Free & open-source Android file transfer for macOS.
Freedroid lets you browse your Android phone's storage and move files to and from your Mac through a clean, native-feeling dual-pane interface — over USB or Wi-Fi. It's a community alternative to closed-source tools like MacDroid and the discontinued Android File Transfer.
Freedroid is an independent project. It is not affiliated with, endorsed by, or derived from MacDroid or its assets — only its functionality is reimplemented.
mtp build)Freedroid is a Tauri 2 app: a Rust backend drives the
Android Debug Bridge (adb), and a Svelte frontend renders the UI. The adb
binary is bundled as a sidecar, so there's nothing to install separately.
An optional MTP backend (Rust FFI to libmtp, behind the mtp cargo
feature) lets the app talk to Android over MTP — no USB debugging required. The
default build doesn't include it, so the normal app stays install-free.
mtp build), no developer settings are needed — just set
the USB connection to File Transfer / MTP.# 1. Install toolchains: Rust (rustup), Node 20+, Xcode Command Line Tools
# 2. Fetch the bundled adb sidecar
./scripts/fetch-adb.sh
# 3. Install JS deps and run
npm install
npm run tauri dev
Build a release bundle (produces .app + .dmg):
npm run tauri build
# universal (Apple Silicon + Intel):
npm run tauri build -- --target universal-apple-darwin
The MTP backend needs libmtp at build time and bundles it into the .app:
brew install libmtp
./scripts/build-mtp-dmg.sh # -> dist/Freedroid_<ver>_aarch64-mtp.dmg (self-contained)
# or just run it during development:
npm run tauri dev -- --features mtp
CI builds this self-contained DMG (Apple Silicon) and attaches it to each release.
Pushing a v* tag triggers .github/workflows/release.yml,
which builds a universal macOS DMG and attaches it to a draft GitHub Release.
By default the build is unsigned — it works, but macOS Gatekeeper shows an "unidentified developer" warning and users must right-click → Open the first time. To produce a signed + notarized build that opens cleanly, add these repository secrets (requires a paid Apple Developer account):
| Secret | What it is |
|---|---|
APPLE_CERTIFICATE |
base64 of your "Developer ID Application" .p12 |
APPLE_CERTIFICATE_PASSWORD |
password for that .p12 |
APPLE_SIGNING_IDENTITY |
e.g. Developer ID Application: Your Name (TEAMID) |
APPLE_ID |
your Apple ID email |
APPLE_PASSWORD |
an app-specific password for notarization |
APPLE_TEAM_ID |
your 10-character Team ID |
Then uncomment the APPLE_* env block in
.github/workflows/release.yml; tauri-action
signs and notarizes automatically when those vars are present. (They're left
commented by default — passing an empty APPLE_CERTIFICATE makes the bundler
try and fail a certificate import.)
src/ Svelte frontend
lib/ipc.ts typed wrappers over the Rust commands
lib/state.svelte.ts central app state (Svelte 5 runes)
lib/components/ Pane, DevicePicker, WifiDialog, TransferQueue
src-tauri/src/
adb/ adb wrapper: devices, files, transfer, wifi
mtp/ native libmtp FFI backend (optional `mtp` feature)
local.rs local (Mac) filesystem listing
commands.rs #[tauri::command] surface
/sdcard and local filesmtp feature, with a USB/MTP toggle, storage switching, folder browsing,
transfers (with live progress via libmtp's callback), open, and delete.
Verified end-to-end against a real device.libmtp + libusb bundled
into the .app, install names rewritten to @rpath): scripts/build-mtp-dmg.sh,
also built in CI and attached to each release.Note: dragging files in from Finder isn't supported — macOS WebViews can't expose dropped files' real paths to HTML5 drag-and-drop, and Tauri's native drop handler is mutually exclusive with the in-app pane-to-pane dragging we use. Use the → / ← buttons or pane-to-pane drag instead.
Not planned: "Mount as a disk in Finder." On macOS that requires a privileged filesystem driver (macFUSE/fuse-t) or a signed FSKit/File-Provider extension — all of which mean an extra system install or a paid Apple Developer account. Freedroid intentionally stays install-free; the dual-pane manager covers the same use cases.
MIT. adb is redistributed under the Apache License 2.0 as part of
the Android SDK platform-tools.