LocalSend is a free, open source file management & sync project written in Dart and released under Apache-2.0. It has 97,058 GitHub stars, 5,516 forks and 1,113 open issues, and was last pushed 15 hours ago. On this registry it ranks #1 of 83 tracked projects in File Management & Sync, with 5 head-to-head comparisons available. It gained 3,977 stars over the last 30 tracked days.

What is LocalSend?

LocalSend is a free, open-source, cross-platform application that shares files and messages directly between nearby devices over the local network, and it is built for anyone who wants AirDrop-style transfers without an internet connection or a third-party server.

What it is

LocalSend is an open-source app written in Dart with Flutter and released under the Apache-2.0 licence. It runs on Windows, macOS, Linux, Android, iOS and Fire OS, and it moves files and messages between devices that sit on the same local network. Communication happens over a REST API protected by HTTPS encryption, so the payload travels device to device. Nothing is uploaded to an external account, and no third-party server sits in the middle. The project lives in the Productivity & Utilities / File Management & Sync category, carries the topics dart, file-sharing, flutter and flutter-apps, and is hosted at localsend.org with code on GitHub and a Codeberg mirror. It reports roughly 91,889 stars, 5,129 forks and 1,113 open issues, with recent commits pushed in September 2026.

The concrete problem it solves is the transfer gap between operating systems. AirDrop moves files comfortably between Apple devices, but it stops at that boundary, and cloud transfer services solve the problem by routing content through remote infrastructure on someone else's terms. LocalSend closes both gaps at once: the README describes it plainly as an open-source cross-platform alternative to AirDrop, so a phone, a Windows laptop and a Linux workstation can exchange files with each other directly over the LAN.

Key capabilities

  • Shares files and messages with nearby devices over the local network without an internet connection.
  • Uses a REST API with HTTPS encryption instead of relaying data through third-party servers.
  • Runs from one Dart and Flutter codebase across Windows, macOS, Linux, Android, iOS and Fire OS.
  • Ships through native stores and package managers: Winget, Scoop, Chocolatey, Homebrew, Flathub, Nixpkgs, Snap, AUR, Play Store, F-Droid and Amazon, plus EXE, DMG, TAR, DEB, AppImage, Portable ZIP and APK artefacts.
  • Signs Windows binaries and documents a code signing policy in the README.
  • Documents a command line interface alongside the graphical app.
  • Handles translations through Weblate and runs continuous integration through the GitHub Actions workflow ci.yml.

Who uses it and how

  • Households with mixed operating systems move photos and large files between a phone and a desktop without a cable or a cloud upload.
  • Teams on restricted or air-gapped networks transfer files on the LAN where no internet route exists.
  • Linux users install it from Flathub, Nixpkgs, Snap or the AUR alongside colleagues on Windows and macOS.
  • Privacy-conscious users keep large transfers off third-party infrastructure entirely.
  • Scripted or headless workflows use the documented command line interface instead of the GUI.

Getting started

Download from an app store or a package manager for the platform in question, such as Winget, Homebrew, Flathub or F-Droid. The README recommends those channels specifically because the app does not auto-update, and it also lists direct EXE, DMG, TAR, DEB, AppImage and APK installers, plus build instructions per platform for source builds.

How it compares

The facts name AirDrop as the direct point of comparison, and the difference is platform reach: AirDrop works between Apple devices, while LocalSend covers Windows, macOS, Linux, Android, iOS and Fire OS from one codebase under Apache-2.0. Both keep transfers peer to peer, but LocalSend extends that behaviour past the Apple ecosystem and publishes its protocol implementation and client source.

When to use it — and when not to

Adopt LocalSend where devices share a LAN and the goal is a direct, serverless transfer with no cloud account involved. The honest trade-offs: it does not auto-update, so updates depend on the store or package manager chosen, and the README points users to a troubleshooting section when discovery or transfer fails. Users who need transfers across the open internet, not across a local network, should look elsewhere, and anyone tempted by the unofficial MSIX preview at localsend.ob-buff.dev should note that the README does not guarantee its stability.

project readme (upstream, from github) — read inline

LocalSend

CI status Translations Packaging status

Homepage • Discord • GitHub • Codeberg

English (Default) • 中文

LocalSend is a free, open-source app that allows you to securely share files and messages with nearby devices over your local network without needing an internet connection.

About

LocalSend is a cross-platform app that enables secure communication between devices using a REST API and HTTPS encryption. Unlike other messaging apps that rely on external servers, LocalSend doesn't require an internet connection or third-party servers, making it a fast and reliable solution for local communication.

Sponsors

Browser testing via

Screenshots

iPhone screenshot PC screenshot

Download

Packaging status

It is recommended to download the app either from an app store or from a package manager because the app does not have an auto-update.

Read more about distribution channels.

Windows binaries are signed. Read more about the Code signing policy.

[!CAUTION] Unofficial MSIX preview: you can try builds from the latest commits at localsend.ob-buff.dev. Stability is not guaranteed and all custom code tweaks are listed on that site.

Compatibility

Platform Minimum Version Note
Android 5.0 -
iOS 12.0 -
macOS 11 Big Sur Use OpenCore Legacy Patcher 2.0.2 (See #1005)
Windows 10 The last version to support Windows 7 is v1.15.4. There might be backports of newer versions for Windows 7 in the future.
Linux N.A. Deps: Gnome: xdg-desktop-portal and xdg-desktop-portal-gtk, KDE: xdg-desktop-portal and xdg-desktop-portal-kde

Setup

In most cases, LocalSend should work out of the box. However, if you are having trouble sending or receiving files, you may need to configure your firewall to allow LocalSend to communicate over your local network.

Traffic Type Protocol Port Action
Incoming TCP, UDP 53317 Allow
Outgoing TCP, UDP Any Allow

On Linux, for example with ufw: sudo ufw allow 53317. With firewalld: sudo firewall-cmd --permanent --add-port=53317/tcp, sudo firewall-cmd --permanent --add-port=53317/udp, then sudo firewall-cmd --reload.

Also make sure to disable AP isolation on your router. It should be usually disabled by default but some routers may have it enabled (especially guest networks). See troubleshooting for more information.

Portable Mode

(Introduced in v1.13.0)

Create a file named settings.json located in the same directory as the executable. This file can be empty. The app will use this file to store settings instead of the default location.

Start hidden

(Updated in v1.15.0)

To start the app hidden (only in tray), use the --hidden flag (example: localsend_app.exe --hidden).

On v1.14.0 and earlier, the app starts hidden if autostart flag is set, and the hidden setting is enabled.

How It Works

LocalSend uses a secure communication protocol that allows devices to communicate with each other using a REST API. All data is sent securely over HTTPS, and the TLS/SSL certificate is generated on the fly on each device, ensuring maximum security.

For more information on the LocalSend Protocol, see the documentation.

Dependency Hierarchy

Dependency hierarchy

Getting Started

To compile LocalSend from the source code, follow these steps:

  1. Install Flutter directly or using fvm (see version required)
  2. Install Rust
  3. Clone the LocalSend repository
  4. Run cd app to enter the app directory
  5. Run flutter pub get to download dependencies
  6. Run flutter run to start the app

[!NOTE] LocalSend currently requires an older Flutter version (specified in .fvmrc) and thus build issues may be caused by a mismatch between the required and the (system-wide) installed Flutter version.
To make development more consistent, LocalSend uses fvm to manage the project Flutter version. After installing fvm, run fvm flutter instead of flutter.

Command Line Interface

The LocalSend CLI is a terminal client built on LocalSend Protocol v2. Run localsend-cli --help to see every available option and hotkey.

Use the send command with one or more files, directories, or a mixture of both:

localsend-cli send report.pdf photo.jpg ./project-backup

The command opens the discovered-device list; select the destination interactively and press Enter to start the transfer.

To select the destination without an interactive device list, pass its exact alias or IP address:

localsend-cli send --to "Cute Tomato" report.pdf
localsend-cli send --to 192.168.27.26 report.pdf

An alias must uniquely identify a discovered device. An IP address is probed directly over HTTPS on LocalSend's default port (53317).

Directories are collected recursively. Their selected root names and nested paths are preserved on the receiver. Empty directories are not sent because LocalSend transfers file entries rather than directory entries.

Contributing

We welcome contributions from anyone interested in helping improve LocalSend. If you'd like to contribute, there are a few ways to get involved:

Translation

You can help translate LocalSend into other languages. We use the Weblate platform to manage translations.

Alternatively, you can also contribute by forking this repository and adding translations manually.

The translations are located in the app/assets/i18n directory. Edit the _missing_translations_.json or strings_.i18n.json file to add or update translations.

Translation status

Take note: Fields decorated with @ are not meant to be translated; they are not used in the app in any way, being merely informative text about the file or to give context to the translator.

Bug Fixes and Improvements

  • Bug Fixes: If you find a bug, please create a pull request with a clear description of the issue and how to fix it.
  • Improvements: Have an idea for how to improve LocalSend? Please create an issue first to discuss why the improvement is needed.

For more information, see the contributing guide.

Troubleshooting

Issue Platform (Sending) Platform (Receiving) Solution
Device not visible Any Any Make sure to disable AP-Isolation on your router. If it is enabled, connections between devices are forbidden.
Device not visible Any Windows Make sure to configure your network as a "private" network. Windows might be more restrictive when the network is configured as public.
Device not visible macOS, iOS Any You can try to toggle the "Local Network" permission under "Privacy" in the OS settings.
Device not visible Any Any If a VPN is active, allow local/LAN traffic or temporarily disable the VPN. Some VPNs block local network connections by default.
Device not visible Any Any Use manual sending to enter the receiver's IP address directly. If that works, add the device to favorites so it is probed directly.
Speed too slow Any Any Use 5 Ghz; Disable encryption on both devices
Speed too slow Any Android Known issue. https://github.com/flutter-cavalry/saf_stream/issues/4

Building

These commands are intended for maintainers only. Make sure to run them from the app directory.

Android

Traditional APK

flutter build apk

AppBundle for Google Play

flutter build appbundle

iOS

flutter build ipa

macOS

flutter build macos

Windows

Traditional

flutter build windows

Local MSIX App

flutter pub run msix:create

Store ready

flutter pub run msix:create --store

Linux

Traditional

flutter build linux

AppImage

appimage-builder --recipe AppImageBuilder.yml

Snap

Instructions in localsend/snap/README.md

Contributors

Localsend Contributors

Frequently asked questions

Is LocalSend free to use?

LocalSend is open source under the Apache-2.0 licence. There is no licence fee and no seat count — you can self-host it or, where the project offers one, pay a vendor for a managed version instead.

What does LocalSend do?

Share files securely across all devices without servers

What is LocalSend written in?

LocalSend is primarily written in Dart. Its source is publicly available at https://github.com/localsend/localsend, and it has 97,058 GitHub stars.