A lightweight desktop app for transferring files over SSH using rsync. Built with Tauri (Rust) and React + TypeScript.
- Dual-pane browser — local and remote directories side by side with a draggable vertical divider
- Drag & drop — drag files from either pane to the other to start a transfer; drop onto a specific subfolder to target it directly
- Context menu — right-click any file or folder to rename, upload/download, or delete; right-click empty space to create a new folder
- Multi-select — Shift-click and Ctrl/Cmd-click to select ranges or individual items; bulk operations (delete, upload, download) act on the whole selection
- Inline rename — rename files and folders directly in the browser without a popup
- Inline folder creation — create a new folder inline with a single right-click
- Delete with confirmation — delete one or multiple items with a confirmation dialog showing the item count; works on both local and remote
- SSH / rsync backend — all transfers run via
rsyncover SSH for reliability and delta-transfer efficiency - Resumable transfers — uses
--partial-dir=.rsync-partialso interrupted transfers pick up where they left off - Checksum verification — optionally verify file integrity using checksums instead of size+timestamp
- Local network optimisation — disables compression when transferring on a LAN for higher throughput
- Transfer queue — run multiple transfers concurrently with live progress bar, speed, ETA, and file counter
- Cancel — gracefully cancel any in-flight transfer; partial data is preserved for resumption
- SSH key auth — select a key file and optionally provide a passphrase
- Connection profiles — save and reuse host, user, port, key, and transfer option configurations
- Remote browser — navigate the remote filesystem with directory caching and smart pre-fetch for instant traversal
- Message log — timestamped, colour-coded log of all actions (green = success, yellow = warning/delete/cancel, red = error)
- Resizable panels — drag the horizontal dividers to resize the message log and transfer queue independently
- Collapsible panels — collapse the message log and transfer queue to reclaim screen space
see Releases
bun install
bun run tauri devbun run tauri buildThe distributable app bundle is placed in src-tauri/target/release/bundle/.
The app is built and shipped as an unsigned .dmg. It works, but macOS Gatekeeper will block the first launch.
- Gatekeeper flags the app as from an unidentified developer
- User sees: "cannot be opened because the developer cannot be verified"
- The app is not broken — it is quarantined, not damaged
Method 1 — right-click (fastest)
- Right-click the app → Open
- Click Open in the dialog
Gatekeeper creates a permanent whitelist entry for that app.
Method 2 — System Settings
- Try to open the app (it fails)
- Go to System Settings → Privacy & Security
- Click Open Anyway
- Download and open the
.dmg - Drag the app to Applications
- Right-click the app → Open
- Confirm Open
This is required because the app is not signed.
If you trust the binary and want to skip the prompt entirely:
xattr -rd com.apple.quarantine /Applications/EasyFileTransfer.app| Layer | Technology |
|---|---|
| Shell | Tauri 2 (Rust) |
| Backend | Tokio, rsync subprocess |
| Frontend | React 19, TypeScript, Tailwind 4 |
| Bundler | Vite 7 |

