Lightweight cross-platform LAN file transfer & clipboard sync app built with Tauri v2
A fast, zero-config file transfer tool for local networks. Select a file, pick a device, and send — no cloud, no account, no internet required.
- Cross-Platform — Windows, macOS, Linux desktop + Android
- Auto Discovery — Devices find each other automatically via UDP multicast
- Real-Time Chat — Text messaging between devices with auto-reconnect
- Clipboard Sync — Auto-sync clipboard content across devices with history tracking
- Multi-Language — Built-in i18n support (English & Chinese)
- Multi-File Transfer — Send multiple files in one batch with queue management
- Folder Transfer — Send entire folders with directory structure preserved
- Progress Tracking — Real-time progress bars on both sender and receiver sides
- Cancellable Transfers — Both sender and receiver can cancel anytime, with cross-device notification and auto-cleanup
- Drag & Drop — Drag files directly to the app (desktop)
- Android Multi-Select — Native file picker with multi-select support
- Android Back Button — Double-press to exit with toast notification
- No Setup — No server, no registration, just open and go
- Large File Support — Streaming transfer with backpressure, handles files of any size
- Android SAF — Full Storage Access Framework support for modern Android scoped storage
- Lightweight — Small binary, minimal resource usage
┌──────────────┐ UDP Multicast ┌──────────────┐
│ Device A │◄────────────────►│ Device B │
│ (Sender) │ │ (Receiver) │
│ │ WebSocket │ │
│ Select File ├─────────────────►│ Save File │
└──────────────┘ ws://ip:7878 └──────────────┘
- Both devices open the app on the same LAN
- Receiver enters Receive Mode, starts listening
- Sender enters Send Mode, selects a file
- Sender picks a discovered device (or enters IP manually)
- File transfers directly over WebSocket
┌──────────────┐ Bidirectional ┌──────────────┐
│ Device A │ WebSocket Chat │ Device B │
│ │◄────────────────►│ │
│ Chat Server │ ws://ip:7879 │ Chat Server │
└──────────────┘ └──────────────┘
- Enter Chat Mode on both devices
- Pick a device to chat with (or auto-accept incoming connection)
- Send messages in real-time with auto-reconnect
- Each device runs both server and client for bidirectional communication
┌──────────────┐ ┌──────────────┐
│ Device A │ Auto-Sync │ Device B │
│ │◄────────────────►│ │
│ Clipboard │ ws://ip:7880 │ Clipboard │
└──────────────┘ └──────────────┘
- Enter Clipboard Mode on all devices
- Connect to other devices (supports multiple connections)
- Enable auto-sync to broadcast clipboard changes automatically
- Or use manual sync button to push current clipboard
| Select Mode | Send Mode | Receive Mode | Chat Mode |
|---|---|---|---|
| Choose role | Pick device & send | Wait for files | Real-time messaging |
- Node.js >= 18
- Rust >= 1.70
- Yarn v1
- For Android: Android Studio + NDK
# Clone
git clone https://github.com/SnowWarri0r/lan-transfer.git
cd lan-transfer
# Install dependencies
yarn install
# Run desktop dev
yarn tauri dev
# Run on Android device (USB debugging)
yarn tauri android dev# Desktop (produces .exe / .dmg / .AppImage)
yarn tauri build
# Android (produces APK + AAB)
yarn tauri android build| Layer | Technology |
|---|---|
| Frontend | React 18 + TypeScript + Tailwind CSS v4 |
| Backend | Rust + Tokio async runtime |
| Framework | Tauri v2 |
| Transfer | WebSocket (tokio-tungstenite) |
| Discovery | UDP Multicast (socket2) |
| Android Storage | SAF via custom Tauri plugin |
src/
App.tsx # React UI — mode selection, device list, file transfer, chat, clipboard
i18n/ # Internationalization (English & Chinese)
src-tauri/src/
lib.rs # Entry point, plugin & command registration
android_storage.rs # Rust ↔ Kotlin plugin bridge for Android SAF
network/
transfer.rs # Discovery, WebSocket server, file I/O
chat.rs # Bidirectional WebSocket chat (dual server/client)
clipboard.rs # Clipboard sync (multi-device, auto-sync with polling)
src-tauri/gen/android/.../
app/tauri/storage/
StoragePlugin.kt # Android SAF: folder picker, file write via DocumentsContract
com/tauri_app/app/
MainActivity.kt # Multicast lock + back button handling on Android
| Port | Protocol | Purpose |
|---|---|---|
| 37821 | UDP | Device discovery (multicast 239.255.77.88) |
| 7878 | TCP/WS | File transfer |
| 7879 | TCP/WS | Chat (bidirectional messaging) |
| 7880 | TCP/WS | Clipboard sync |
Issues and PRs are welcome! Feel free to open an issue for bug reports or feature requests.
If this project helps you, consider giving it a ⭐