Skip to content

afluffywaffle/flytja

Repository files navigation

Flytja

Old Norse · /ˈflɪt.ja/ · to move, to transport

Two-way file sync between your Mac and any device — Android, Linux, Mac, or Windows — over your local network or from anywhere via Tailscale. No cloud. No subscription. No background service running on your machine.


Download

Go to Releases and grab the file for your platform:

Platform File to download
macOS (Apple Silicon) Flytja_x.x.x_aarch64.dmg
macOS (Intel) Flytja_x.x.x_x64.dmg
Linux flytja_x.x.x_amd64.AppImage
Windows Flytja_x.x.x_x64-setup.exe

macOS note: on first launch, right-click the app → Open → Open. macOS will ask once because the app isn't signed through the App Store. After that it opens normally.

Linux note: make the AppImage executable before running: chmod +x flytja_*.AppImage


What it does

Flytja compares files on both sides by hash (not timestamp) and only moves what actually changed. It scans the entire local and remote folder recursively — all subfolders are included, as long as the file type matches your filter. It handles conflicts gracefully — if both sides edited the same file, it keeps your local version and saves the remote version alongside it as filename.device-conflict-TIMESTAMP.ext so nothing is lost.

Three ways to connect:

Transport Use for
Android (adb) Syncing with an Android device over Wi-Fi
SSH / LAN Syncing with a Linux or Mac machine
Windows Share Syncing with a Windows machine via a mounted network share

Tailscale (optional, recommended) — install on both devices and sign into the same account. Your devices get private IP addresses that work from anywhere without opening firewall ports.

Auto-sync

Instead of hitting Sync now by hand, set auto-sync to an interval (presets, or type any number of minutes ≥ 1) and Flytja re-syncs on that schedule — while the app is open. Nothing runs in the background on your Mac; close Flytja and the schedule stops.

It's built to be safe to walk away from:

  • Calibration — when you enable auto-sync, Flytja first runs a one-time dry run to measure how long a scan of your folder takes. If that's longer than your chosen interval, it refuses to arm and tells you to pick a longer one — so you can't accidentally set it to run back-to-back.
  • No pileup — if a scheduled sync comes due while one is still running, it's skipped, never queued. A too-short interval can't stack up runs.
  • Auto-pause — if syncs keep overrunning the interval (e.g. the folder grew), Flytja pauses auto-sync on its own and shows why, rather than grinding continuously unattended.

Tip: run a dry run once first to see how long a scan takes, then pick an interval comfortably above that.


Quick setup by transport

Android

  1. Install Android SDK Platform Tools on your Mac — this provides the adb command:
    • Via Homebrew: brew install android-platform-tools
    • Or install Android Studio and use its built-in SDK Manager (SDK Tools → Android SDK Platform-Tools).
  2. Enable USB Debugging on your device (Settings → About → tap Build Number 7 times → Developer Options → USB Debugging).
  3. Connect via USB once and run: adb tcpip 5555
  4. Unplug. The device is now reachable over Wi-Fi.
  5. In Flytja: select Android, enter the device IP and port 5555, hit Test connection.

Linux / Mac (SSH)

  1. Enable SSH on the remote machine:
    • Linux: sudo systemctl enable --now sshd
    • Mac: System Settings → General → Sharing → Remote Login
  2. Set up an SSH key so sync works without a password prompt:
    ssh-keygen -t ed25519
    ssh-copy-id user@host
    
  3. In Flytja: select SSH / LAN, enter your username, host IP, and optionally your key path.

Windows (SMB)

  1. On Windows: enable File Sharing (Settings → Network → Advanced sharing settings).
  2. On your Mac: Go → Connect to Server (⌘K) → smb://windows-ip/ShareName → Connect.
  3. In Flytja: select Windows Share, set the mounted path (e.g. /Volumes/ShareName).

Profiles

Flytja supports multiple named profiles — one per device or sync task. Each profile stores its own connection settings, file patterns, and a notes field for reminders. Settings auto-save after every change.


Headless / command-line sync

Click Export script… in the actions bar to save a standalone Python script with your current profile baked in. You can run it from the terminal without opening Flytja:

python3 skies-sync.py            # sync files
python3 skies-sync.py --dry-run  # preview without moving anything

Schedule with cron (open with crontab -e):

0 * * * * /usr/bin/python3 ~/Scripts/skies-sync.py

Always-on sync on macOS (launchd): the exported script includes a commented launchd .plist template near the top — copy it, fill in the path, and load it with launchctl load.

Remote trigger over SSH:

ssh user@100.x.x.x python3 ~/Scripts/skies-sync.py

Re-export any time your profile changes.


Build from source

You'll need Node.js (v18+) and Rust.

git clone https://github.com/afluffywaffle/flytja
cd flytja
npm install
npm run tauri build

The built app appears in src-tauri/target/release/bundle/.

Linux build dependencies:

sudo apt-get install libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf

License

MIT

About

a cross-platform file sync GUI.

Resources

License

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors