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.