Fast, secure, and peer-to-peer local file sharing directly between devices on your network.
This project has been converted to a Turborepo monorepo for better code organization, faster builds, and easier scalability.
blink-monorepo/
├── apps/
│ ├── web/ # Nuxt.js web application
│ │ ├── app/ # Nuxt app directory
│ │ ├── server/ # Nitro server routes
│ │ ├── public/ # Static assets
│ │ └── package.json
│ ├── mobile/ # Flutter mobile application
│ │ ├── lib/ # Flutter app code
│ │ ├── android/ # Android platform
│ │ ├── ios/ # iOS platform
│ │ ├── macos/ # macOS platform
│ │ ├── windows/ # Windows platform
│ │ ├── linux/ # Linux platform
│ │ ├── pubspec.yaml # Flutter dependencies
│ │ └── package.json
│ └── docs/ # Documentation site
├── packages/
│ ├── types/ # Shared TypeScript types
│ │ └── src/index.ts
│ └── config/ # Shared configuration
│ ├── tailwind.config.ts
│ └── tsconfig.base.json
├── turbo.json # Turborepo configuration
├── package.json # Root workspace config
└── README.md
- Node.js >= 18.0.0
- npm >= 10.0.0
- Flutter >= 3.38.0 (for mobile app)
# Install all dependencies across the monorepo
npm install# Run all apps in dev mode
npm run dev
# Or run specific apps
cd apps/web && npm run dev# Build all apps and packages
npm run build
# Or build specific apps
cd apps/web && npm run build# Type check all packages
npm run typecheckNuxt.js web application with the file sharing UI and WebRTC functionality.
Tech Stack:
- Nuxt 4
- Vue 3 (Composition API)
- Pinia (State Management)
- Tailwind CSS (Synthwave theme)
- PeerJS (WebRTC)
- Socket.io (Signaling)
Flutter cross-platform mobile application (Android, iOS, macOS, Windows, Linux).
Tech Stack:
- Flutter 3.38+
- Dart 3.10+
- Riverpod (State Management)
- flutter_webrtc (P2P connections)
- socket_io_client (Device discovery)
- Material Design 3 (Synthwave theme)
Supported Platforms:
- 📱 Android
- 📱 iOS
- 💻 macOS
- 💻 Windows
- 💻 Linux
Shared TypeScript type definitions used across the monorepo.
Exports:
Device- Device information interfaceTransfer- File transfer state interfaceFileMetadata- File metadata interfaceChunkData- File chunk data interfaceSignalingMessage- WebSocket signaling messages
Shared configuration files for Tailwind CSS and TypeScript.
Exports:
@blink/config/tailwind- Base Tailwind configuration@blink/config/typescript- Base TypeScript configuration
Turborepo intelligently caches task outputs to speed up builds:
# First build - builds everything
npm run build
# Second build - uses cache (much faster!)
npm run build
# Force rebuild without cache
npm run build -- --forceTasks run in parallel across packages when possible:
# Runs typecheck in all packages simultaneously
npm run typecheckTurborepo understands package dependencies and runs tasks in the correct order:
{
"tasks": {
"build": {
"dependsOn": ["^build"] // Builds dependencies first
}
}
}Import shared types in any app or package:
// Before (old monorepo)
import type { Device, Transfer } from '../types'
// After (new monorepo)
import type { Device, Transfer } from '@blink/types'npm run dev- Start dev servers for all appsnpm run build- Build all apps and packagesnpm run typecheck- Type check all packagesnpm run clean- Clean build artifacts and node_modules
Web App:
cd apps/web
npm run dev # Dev server for web app
npm run build # Build web app
npm run preview # Preview production buildMobile App:
cd apps/mobile
flutter run # Run on connected device/emulator
flutter build apk --release # Build Android APK
flutter build ios --release # Build iOS app
flutter build macos --release # Build macOS app
flutter build windows --release # Build Windows app
flutter build linux --release # Build Linux app
flutter test # Run testsIf you see TypeScript errors related to Nuxt auto-imports:
# Regenerate Nuxt type definitions
cd apps/web
npx nuxt prepareIf builds behave unexpectedly:
# Clear Turborepo cache
rm -rf .turbo
# Clear Nuxt cache
rm -rf apps/web/.nuxt
# Rebuild
npm run buildIf packages aren't linking correctly:
# Clean and reinstall
npm run clean
npm installSee apps/web/DEPLOYMENT.md for deployment instructions.
When adding new packages or apps:
- Create the package in
packages/orapps/ - Add a
package.jsonwith a scoped name (@blink/package-name) - Update workspace dependencies in consuming packages
- Run
npm installat the root
See individual package directories for license information.