Send a file or a short note to another device on the same Wi‑Fi. Install the desktop app on a computer; phones and extra machines just open a page in the browser. No account, no cloud.
Stay on a network you trust. Nothing is encrypted, so don’t put this on the public internet. Details are in SECURITY.md.
The join address and QR code sit at the top of the window, so a phone can join without any scrolling. Five skins (Frutiger Aero, Liquid Glass, Cyberpunk, Astral, Space) and light/dark are in Settings.
- Send files between computers, or from a computer to a phone browser (and back)
- Recipient taps Accept before any file data moves
- Pick up to 5 files and several nearby devices; each recipient Accepts per file
- Shared notes board: paste a line, everyone sees it, copy or open links
- QR code and join URL so a phone doesn’t need an app
- Desktops find each other on the LAN automatically
- Themes, light/dark, transfer history
- Programs and scripts are blocked; Windows warns if the network is marked Public
You need Rust, Node.js 18+, and Tauri 2’s extras (WebView2 on Windows, webkitgtk on Linux, Xcode Command Line Tools on macOS: xcode-select --install). On Windows, install Visual Studio 2022 Build Tools with Desktop development with C++. If cargo says link.exe is missing, run that installer by hand.
npm install
npm run desktopThat builds the UI, starts the LAN server on port 7420, and opens the window.
Windows shortcut after the C++ tools are in:
powershell -ExecutionPolicy Bypass -File scripts\dev.ps1Debian/Ubuntu extras:
sudo apt install libwebkit2gtk-4.1-dev build-essential curl wget file libxdo-dev libssl-dev libayatana-appindicator3-dev librsvg2-devIf devices don’t see each other, allow TCP 7420 and UDP 5353 on a private/home firewall profile. Don’t forward those ports on the router.
GitHub-hosted runners build Windows (windows-latest), macOS (macos-latest, a universal Intel + Apple Silicon build) and Linux (ubuntu-22.04) when you push a version tag. Bump version in src-tauri/tauri.conf.json, then:
git tag v0.1.0
git push origin v0.1.0The workflow opens a draft release with the installers. Check the files, then publish it. You can also run the release workflow by hand from the Actions tab.
- The desktop app shows up on the LAN and listens on port 7420.
- Nearby computers appear in the device list. A phone joins by scanning the QR code or opening the address.
- You pick a file and one or more devices. Each recipient gets Accept / Decline. Accepted files land in
Downloads/Lanlinkon a computer, or as a download in the browser. - Shared notes skip Accept: paste, send, and the line shows up on every connected device.
The window you click around in is TypeScript. The LAN work is Rust: Tauri opens the window, then an Axum server on port 7420 handles files, notes, and who is nearby. The UI just talks to that server.
A phone never runs Rust. It loads the same page from the computer. Transfers still go through that machine.
flowchart LR
subgraph desktop["Desktop app - one process"]
UI["UI TypeScript in WebView"]
Rust["Rust Tauri + Axum :7420"]
UI -->|"HTTP / WebSocket localhost"| Rust
end
Phone["Phone / other browser"] -->|"HTTP / WebSocket on LAN"| Rust
OtherPC["Other Lanlink desktop"] -->|"mDNS + HTTP"| Rust
The left box is one installed app. The window uses 127.0.0.1. Phones and other computers use the LAN address.
| Piece | Language | What it does |
|---|---|---|
ui/ |
TypeScript | Screen: send, notes, themes, history |
src-tauri/src/lib.rs |
Rust | Starts the window and the server |
src-tauri/src/server.rs |
Rust | HTTP and WebSocket API |
src-tauri/src/transfer.rs |
Rust | Moves file bytes after Accept |
src-tauri/src/discovery.rs |
Rust | Finds other desktops on the LAN |
src-tauri/src/state.rs |
Rust | Peers, offers, notes, save folder |
MIT


