A terminal UI (TUI) for managing sync tasks, backed by a small local daemon.
- Create Push tasks (local → remote) or Pull tasks (remote → local)
- Choose a sync strategy: Mirror, AddOnly, SafeSync, Update
- Browse local/remote directories inside the TUI
- View per-task logs
- Tasks are persisted and restored automatically
- Rust toolchain (edition 2024)
rsyncavailable on your machinesshavailable on your machine (OpenSSH)- For password-based SSH: a working system keyring is recommended (the app stores passwords in the OS keyring when provided)
Build locally:
cargo build --releaseRun:
cargo run --releaseThe main binary is sync_app (default).
./target/release/sync_appsync_app start
sync_app status
sync_app stop
sync_app restartNotes:
- The TUI will auto-start the daemon if it is not running.
- The
serversubcommand is internal.
- A: Add task (Push)
- P: Add task (Pull)
- ↑/↓: Select task (list scrolls)
- D: Delete selected task
- R: Dry run selected task
- S: Restart selected task
- L: View selected task logs
- Ctrl+R: Restart daemon
- Q: Quit
- ↑/↓: Move selection (list scrolls)
- Enter: Enter directory
- Space: Select current entry (source/destination depending on flow)
- N: Create directory
- Esc: Back/cancel
All state is kept under your home directory:
- Daemon socket:
~/.sync_daemon.sock - Daemon PID:
~/.sync_daemon.pid - Saved tasks:
~/.sync_daemon_tasks.json - Saved remote hosts list:
~/.sync_hosts - Logs directory:
~/.sync_daemon_logs/- Daemon log:
~/.sync_daemon_logs/daemon.log - Client log:
~/.sync_daemon_logs/client.log - Per-task logs:
~/.sync_daemon_logs/<task_id>.log
- Daemon log:
- Mirror: exact copy (uses
--delete) - AddOnly: add/update only (no delete)
- SafeSync: mirror, but deleted files are moved to
.rsync-backup/(uses--delete --backup --backup-dir=.rsync-backup) - Update: only overwrite if local file is newer (uses
--update)
- Remote host input is validated to reduce SSH flag-injection risk.
- The SSH commands used by the daemon currently include
StrictHostKeyChecking=nofor non-interactive operation. If you need stricter host key verification, you may want to change this in the server SSH/rsync command builders.
- Nothing happens / can’t connect: check daemon status with
sync_app status, and inspect~/.sync_daemon_logs/daemon.log. - UI shows few items: lists support scrolling; use ↑/↓ to move selection and the UI will scroll automatically.