Fast, cloudless file transfer between devices on the same LAN. No accounts, no internet round-trip, no relay servers. Built with Tauri 2 (Rust core + React/Fluent UI), aiming to saturate the wire on a single TCP stream and stay out of your way the rest of the time.
➡️ Latest installer (Windows x64)
Per-user install (no UAC). Multi-language installer wizard. On first launch Windows Defender Firewall asks for network access — tick Private networks and click Allow access.
The app also checks GitHub for new releases on startup (once per 12 hours) and offers an inline download banner.
Existing tools either round-trip through a cloud service or fall apart on the "50 000 tiny files" case because they ack every file. LanBlaze is built around two ideas:
- One big file: push it through a single TCP connection with large
buffers (256 KB chunks,
TCP_NODELAY, 4 MBSO_SNDBUF/SO_RCVBUF); the kernel handles the rest. - Many small files: pipeline them back-to-back over the same stream, tar-style — no per-file ack, no RTT tax. Sender and receiver each run a decoupled read/write task pair so disk-read and network-write overlap.
- mDNS discovery with a manual
↻ Refreshbutton that re-broadcasts our advertisement and re-issues the browse query when a late-joiner doesn't show up on its own. - 6-digit pairing code — every receiver shows a code; senders must enter it. Wrong code → instant reject, no user prompt.
- Trust list — tick "Always trust this device" when accepting an incoming transfer; subsequent transfers from the same device skip the dialog. Manage from Settings.
- blake3 integrity check end-to-end, with atomic
.part→ final rename. - Resume support for files ≥ 8 MB — kill mid-transfer, restart, picks up from the byte that hit disk. The handshake is protocol-level so the sender skips already-on-disk bytes.
- Path-traversal safe — incoming relative paths are sanitized
(absolute paths, drive letters,
..rejected). - Drag and drop files or folders onto the window.
- Right-click → "Send via LanBlaze" on any file, folder, or empty folder background — installer registers the menu entry; the app opens with the selection pre-loaded.
- Per-transfer destination override — the accept dialog lets you redirect a single incoming transfer to a different folder.
- Pause / Resume for any active transfer from either side; ▶/⏸ button on the row, peer notices through TCP back-pressure.
- Cancel from either side — sender or receiver can stop a transfer; the other side is told who cancelled ("Canceled by you" vs "Canceled by peer").
- Disk-space pre-check — receiver rejects with a clear reason before the user is prompted if there isn't ~1.05× of the announced size free.
- Live per-direction rates with proper labels:
NOW/AVERAGE/ETAfor senders; on the receiver,NETWORKandDISKsplit out separately so the bottleneck is visible. ETA ind / h / m / s. - Windows taskbar progress overlay — green bar tracks the combined progress of active transfers; turns yellow when any is paused.
- Custom Mica title bar — extends edge-to-edge, with Win11-spec 46×32 min/max/close buttons.
- System accent color — read from
HKCU\Software\Microsoft\Windows\DWMand applied across the Fluent brand tokens (buttons, badges, progress bar, selected peer tile). Toggle in Settings. - System notifications + sounds for incoming requests and completions (incl. "canceled by you" vs "canceled by peer" toasts).
- Tray icon, autostart, close-to-tray — runs quietly in the background so the receiver is always available. All toggles in Settings.
- Persistent history — last 200 transfers kept across restarts, visible from Settings → Recent activity.
- Window state persistence — size, position, maximized state come back where you left them.
- In-app update check — startup probe of the GitHub Releases API (12-hour throttle, dismiss-per-version); also manual "Check now" in Settings.
- 10 UI languages: English · Türkçe · Español · Deutsch · Français · 日本語 · 中文 · Русский · Português · العربية (RTL).
- Theme override — system / light / dark.
| Layer | Choice | Why |
|---|---|---|
| Desktop framework | Tauri 2 | Native Rust core, web view for UI. ~3 MB installer. |
| Backend language | Rust (stable) | Zero-cost async I/O via tokio, no GC pauses on the data path. |
| Async runtime | tokio | Per-file pipelined tasks (reader/writer split via mpsc), tokio::select! for cancel + pause. |
| Hashing | blake3 | Faster than SHA-2 on modern CPUs; doesn't bottleneck a gigabit link. |
| Discovery | mdns-sd | Standard DNS-SD over multicast, no central server. |
| Sockets | socket2 | SO_SNDBUF / SO_RCVBUF tuning. |
| Disk-space probe | fs2 | Cross-platform available_space. |
| Windows native | windows-rs, winreg, window-vibrancy | ITaskbarList3 for the taskbar overlay, DWM registry for the accent colour, Mica fallback. |
| Tauri plugins | notification, autostart, dialog, window-state, single-instance |
OS toasts, login autostart, native file picker, remember window size, hand argv from second launch to the running instance. |
| Frontend | React 18 + TypeScript + Vite | Familiar, fast HMR. |
| UI library | Fluent UI React v9 | Microsoft's official Fluent Design components — closest to WinUI 3 in a web view. |
| i18n | i18next + react-i18next | 10 bundled locales with pluralization + RTL handling. |
| Installer | NSIS (via tauri-bundler) |
Per-user or all-users, multi-language wizard, LZMA-compressed, custom hooks for the shell context menu. |
- First run — pick a device name and a default destination folder.
- The main screen shows your 6-digit pairing code in the top right. Share it with the sender.
- As the sender:
- drop files / folders onto the window (or right-click → "Send via LanBlaze" in Explorer),
- pick the destination device from the discovered list (or paste an IP),
- paste the receiver's 6-digit code,
- hit Send.
- The receiver sees a dialog with the sender, file count, total size, and a "save somewhere else" button. Tick "Always trust this device" to skip the dialog on future transfers from the same peer.
Manual IP 127.0.0.1 + your own pairing code lets you send to yourself
for a quick sanity check.
- VM settings → Network → Adapter 1: Bridged Adapter with your Wi-Fi / Ethernet selected (NAT will not work — mDNS multicast doesn't cross the NAT boundary).
- Adapter Type: Intel PRO/1000 MT Desktop, Promiscuous: Allow All on Wi-Fi.
- Install the same
setup.exeinside the VM. - If the host doesn't see the VM right away, press ↻ Refresh in Step 2 — it re-broadcasts your advertisement and re-issues the browse query.
All multi-byte integers are little-endian. One TCP connection carries the whole transfer:
[u32 hello_len][HELLO JSON] ← sender → receiver
[u32 ack_len][HELLO_ACK JSON] ← receiver → sender
repeated per file:
[u16 path_len][path bytes][u64 size][u8 resumable]
if resumable == 1:
[u64 offset] ← receiver → sender
[size - offset bytes of file body]
[32 bytes blake3 of the full file]
[u16 0] ← end-of-stream
HELLO carries the sender's device name, OS, file count, total bytes,
the receiver's pairing code, and the manifest. HELLO_ACK is
{ accept, reason? }. Files below 8 MiB skip the resume handshake to
keep the small-files pipeline at zero extra RTTs.
Requirements: Node.js ≥ 20, Rust stable, Windows with the WebView2 runtime.
git clone https://github.com/ethemdemirkaya/lan-file-transfer
cd lan-file-transfer
npm install
npm run tauri dev # development (HMR)
npm run tauri build # production installerThe installer ends up in
src-tauri/target/release/bundle/nsis/LanBlaze_<version>_x64-setup.exe.
- Tauri 2 + React/TS + Fluent UI scaffold
- Single-file transfer, blake3, atomic write
- Many-file / folder pipeline (no per-file ack)
- mDNS discovery + refresh button
- Setup wizard, pairing code, drag-and-drop, incoming dialog
- Resume for interrupted large-file transfers
- NSIS installer (multi-language, custom artwork)
- 10 UI languages
- Background-friendly (tray, autostart, close-to-tray, notifications)
- Persistent history + trust list + disk-space pre-check
- Cancel + Pause / Resume from either side
- Live per-direction rates (network vs disk) + labeled metric grid + d/h/m/s ETA
- In-app update check (GitHub Releases API)
- Custom Mica title bar + system accent color + window state persistence
- Windows taskbar progress overlay
- Windows Explorer "Send via LanBlaze" right-click menu
- Next: TLS encryption (
tokio-rustls+rcgenself-signed) - Cross-platform builds (Linux, macOS) via GitHub Actions
- Signed
tauri-plugin-updaterauto-install - Concurrent file open (K-deep prefetch) for tiny-files throughput
Issues and pull requests welcome. The project follows Conventional Commits and ships everything English (commit messages, code comments, docs); the UI is fully localized.
No license attached yet — ask before redistributing.
