OneDrive for your own hardware — auto-sync the folders you choose to any drive you plug in, the moment it connects.
SyncDrop is a lightweight macOS menu-bar app. No dock icon, no window clutter.
Think of it like OneDrive or iCloud Drive — but instead of syncing to a cloud you don't control, it syncs the folders you pick to your own storage device. Configure your folders once; then whenever you connect the configured drive — an external SSD, USB pen drive, or hard disk — SyncDrop automatically mirrors your selected files onto it. Plug in, it syncs, you're backed up. No subscriptions, no cloud, your data stays yours.
-
Download
SyncDrop.zipfrom the latest release. -
Unzip it (double-click) and drag
SyncDrop.appinto your/Applicationsfolder. -
First launch. Double-click it. macOS shows "Apple could not verify SyncDrop is free of malware." That's expected — the app isn't notarized yet (see below). To open it:
On macOS 15 (Sequoia) and later:
- Click Done on the dialog.
- Open → System Settings → Privacy & Security.
- Scroll down to the message "SyncDrop was blocked…" and click Open Anyway.
- Authenticate, then click Open. Done — you only do this once.
On macOS 13–14 (Ventura/Sonoma): right-click
SyncDrop.app→ Open → Open.Or, from Terminal (any version): one command, then just double-click normally:
xattr -dr com.apple.quarantine /Applications/SyncDrop.app
-
The SyncDrop icon appears in your menu bar. Click it → Settings to set up.
Why the warning? SyncDrop is open-source and code-signed, but not yet notarized by Apple — notarization requires a paid Apple Developer account ($99/yr). The build is safe and fully auditable here; you can also build it yourself in one command. Notarization is on the roadmap.
Requires the Swift toolchain (Xcode or Command Line Tools).
git clone https://github.com/abhinay-hat/SyncDrop.git
cd SyncDrop
make app # builds a signed SyncDrop.app in the repo root
make install # builds and copies it to ~/ApplicationsOther targets:
swift build # debug build
swift test # run unit tests (needs full Xcode, not just Command Line Tools)
make clean # remove build artifactsOpen the menu-bar icon → Settings, then in the Folders tab:
- Source (Mac) — choose the folder you want backed up (e.g.
~/Desktop/Projects). - SSD Volume Name — type the exact name of your SSD as it appears in Finder (e.g.
Extreme Pro). - Destination (on SSD) — plug in the SSD, then choose the target folder on it.
In the Behavior tab, turn on Auto-sync when SSD connected if you want it to run automatically. That's it — plug in the drive and SyncDrop syncs.
| Feature | What it does |
|---|---|
| Auto-sync on connect | Plug in your SSD and the sync starts (opt-in per profile). |
| Multiple profiles | Different source/destination/exclude sets, switchable from the menu. |
| Dry-run preview | See exactly what will be added, updated, or deleted before committing. |
| Mirror mode | Adds --delete so the SSD exactly matches the Mac. |
| Versioned backups | Overwritten/deleted files are kept under .syncdrop_archive/<date> instead of discarded. |
| Exclude patterns | rsync glob patterns, with sane macOS defaults (.DS_Store, node_modules, …). |
| Auto-eject | Safely ejects the SSD after a successful sync. |
| Sync history & notifications | Recent runs (files, size, duration) and a completion notification. |
| exFAT-safe | Avoids permission/ownership flags that break on exFAT; uses --modify-window=1 for its 2-second timestamp granularity. |
- macOS 13 (Ventura) or later
rsync— ships with macOS at/usr/bin/rsync- (Source builds only) Swift toolchain
VolumeMonitor watches NSWorkspace mount/unmount notifications and matches your configured SSD volume name. On connect — with auto-sync enabled — SyncEngine launches rsync with a per-profile argument list, streams progress from stdout, and reports state through Combine to the menu-bar UI. Profiles, settings, and history persist in UserDefaults via ConfigStore.
Sources/
SyncDropCore/ # rsync engine, volume monitor, config, models (no UI)
SyncDrop/ # AppKit + SwiftUI menu-bar app
Tests/ # XCTest unit tests for the core
android/ # Android port (work in progress)
Resources/ # app icon (.svg source + .icns)
SyncDrop today is macOS → local drive. The goal is sync the folders you choose to any storage you own, from any device. Planned:
- NAS / network drives — sync to a NAS or any mounted network share, not just USB-attached drives.
- Android app — sync from your phone to a USB-OTG SSD/pen drive (in progress under
android/). - Windows app — the same plug-in-and-sync experience on Windows.
- More targets — any drive type macOS/Windows can mount (SSD, pen drive, HDD, SD card).
Have a use case or want to help build one of these? Open an issue.
An Android port (Kotlin + Jetpack Compose) targeting USB-OTG drive sync is in early development under android/.
Issues and pull requests welcome. Build with make app, run swift test before submitting.
make app # ad-hoc signed bundle, hardened runtime (notarization-ready)
make zip # clean, AppleDouble-free SyncDrop.zip for distributionTo ship a notarized build (no Gatekeeper warning for users), you need a paid Apple Developer account, then:
export APP_IDENTITY="Developer ID Application: Your Name (TEAMID)"
export APP_STORE_CONNECT_KEY_ID=... # App Store Connect API key id
export APP_STORE_CONNECT_ISSUER_ID=... # issuer id
export APP_STORE_CONNECT_API_KEY_P8="$(cat AuthKey_XXXX.p8)"
make notarize # builds, signs with Developer ID, notarizes, staples, zipsSee Scripts/sign-and-notarize.sh.
Pushing a v* tag triggers .github/workflows/release.yml,
which builds, packages, and attaches SyncDrop.zip to a GitHub Release:
git tag v1.0.1 && git push origin v1.0.1If these repo secrets are set, the workflow signs with Developer ID and notarizes; otherwise it falls back to a clean ad-hoc build (still uploaded):
| Secret | What |
|---|---|
APP_IDENTITY |
Developer ID Application: Your Name (TEAMID) |
MACOS_CERTIFICATE_P12_BASE64 |
Developer ID cert exported as .p12, base64-encoded |
MACOS_CERTIFICATE_PASSWORD |
password for that .p12 |
APP_STORE_CONNECT_KEY_ID |
App Store Connect API key id |
APP_STORE_CONNECT_ISSUER_ID |
issuer id |
APP_STORE_CONNECT_API_KEY_P8 |
contents of the AuthKey_XXXX.p8 |
MIT © 2026 Abhinay Reddy


