LocalSend

An open-source, cross-platform AirDrop alternative that sends files and messages device-to-device over your local network with no internet, no account, and no cloud server involved.

84.6Kstars
4.6Kforks
Apache License 2.0
Dart

LocalSend is a free, open-source app for transferring files and text between devices on the same local network — phones, tablets, and desktops alike — without routing anything through the internet or a third-party server. It exposes a REST API over HTTPS on each device, discovers peers automatically, and moves data directly between them, encrypted end-to-end for the duration of the transfer.

The project ships as a single Flutter/Dart codebase covering Android, iOS, macOS, Windows, Linux, and web builds, plus a separate headless Rust server crate and a CLI for scripting or NAS/server deployments. A shared common package keeps transfer logic, models, and the Rust-bridged crypto/networking core consistent across every target instead of forking the implementation per platform.

Because the protocol is public and reference implementations exist for every major OS, LocalSend works the same way whether you’re pairing a phone with a laptop on the same Wi-Fi, running the CLI on a home server, or using a third-party client built against its spec. It’s distributed through the Play Store, App Store, Microsoft Store, F-Droid, and as a portable build with no forced account or subscription.

What You Get

  • Cross-platform apps for Android, iOS, macOS, Windows, Linux, and a web build from one Flutter/Dart codebase
  • A standalone headless Rust server (server/) for running LocalSend on a NAS, home server, or CI box without a GUI
  • A CLI client (cli/) for scripting transfers or automating file drops from the terminal
  • Automatic peer discovery and HTTPS-encrypted transfer with no internet connection or third-party relay required

Common Use Cases

  • Moving files between a phone and laptop on the same Wi-Fi without cables, cloud uploads, or platform-specific tools like AirDrop
  • Running a headless LocalSend server on a home NAS so any device on the network can drop files to it
  • Scripting bulk local transfers from a terminal or CI pipeline using the CLI client
  • Sharing files in environments without internet access, such as offline networks or air-gapped setups

Under The Hood

Architecture LocalSend is a multi-target monorepo rather than a single app: app/ (the Flutter GUI), cli/ (a scriptable client), and server/ (a headless Rust daemon) all depend on a shared common/ package that holds the transfer models and protocol logic, so the discovery-and-transfer behavior stays consistent instead of being reimplemented per platform. Performance- and security-sensitive code lives in a Rust core wired into Dart through flutter_rust_bridge, with provider/network handling peer discovery and provider/security_provider handling the TLS/PIN device-authentication flow. Swapping out the core protocol would ripple through all three targets since they share it directly rather than through a network boundary.

Tech Stack The GUI is Flutter/Dart (SDK ^3.9) using Refena for state management, dart_mappable and freezed for serialization, and routerino for navigation, with flutter_rust_bridge 2.11 bridging into a Rust core for crypto and networking. The standalone server is a separate Rust crate with its own Cargo.toml and Dockerfile for headless deployment. Builds target Android, iOS, macOS, Windows, Linux, and web from the same app codebase, packaged for the Play Store, App Store, Microsoft Store, F-Droid, and as a portable binary.

Code Quality CI runs formatting and build checks across platforms, and the codebase is null-safe Dart throughout, but the test directory is limited — only a handful of unit tests and mocks were found (mainly around i18n), with no broad unit or integration suite covering the transfer or discovery logic itself.

What Makes It Unique LocalSend’s core bet isn’t a single client but a documented, public transfer protocol implemented consistently across mobile, desktop, CLI, and headless server targets — so unlike AirDrop, the protocol isn’t tied to one vendor’s devices, and third parties can build interoperable clients against the same spec.

Self-Hosting

Licensing Model Apache-2.0 licensed — all functionality is available in every build with no license keys or feature gates.

Self-Hosting Restrictions None found. The app itself is the self-hosted piece — each device runs its own local server, and there is no separate cloud edition with extra features.

License Key Required No.

Join founders buildingwith open source

Opinionated takes, migration guides, cost-saving tips, and insights from the open source ecosystem.

Subscribe on Substack

No spam. Unsubscribe anytime.

Join 750+ subscribers
No spam. Unsubscribe anytime.

Search