An interactive Dropbox-like bidirectional sync tool over SSH for devs.
- Local scanner with support for:
- nested
.dropboxignore - excluded folders (
node_modules,.tox, cache dirs)
- nested
- Remote scanner over SSH helper (streamed JSONL) with nested
.dropboxignore+ excluded folders. - Local and remote scan status are persisted in SQLite under each sync root:
<local_root>/.limsync/state.sqlite3<remote_root>/.limsync/state.sqlite3
- First comparison report that separates:
- content status
- metadata status (mode + mtime)
- scan progress with adaptive path depth for long-running scans
- Always excludes
.DS_Store, excluded folder families, and.limsync. - Also excludes
.venvand FinderIcon\\rmarker files. - Interactive review TUI with:
- tree navigation
- per-file/per-folder action assignment
- in-TUI plan apply with confirmation + progress + errors
uv syncuv run limsync --help
uv run limsync --source local:/path/to/source --destination user@host:/path/to/destination
uv run limsync review --source local:/path/to/source --destination user@host:/path/to/destinationuv run limsync \
--source local:/path/to/source \
--destination ssh://user@example-host/path/to/destination
# Scan without opening the review UI immediately
uv run limsync \
--source /path/to/source \
--destination user@example-host:~/path/to/destination \
--no-open-review
# Enable SSH compression during apply operations in the review UI
uv run limsync \
--source local:/path/to/source \
--destination /path/to/destination \
--apply-ssh-compression
# Review by inferred state DB (~/.limsync/<source>__<destination>.sqlite3)
uv run limsync review \
--source local:/path/to/source \
--destination ssh://user@example-host/path/to/destination \
--apply-ssh-compression
# Or review from an explicit DB path
uv run limsync review --state-db ~/.limsync/some_pair.sqlite3- Arrow keys: navigate tree
- Enter: open/close selected folder
?: show advanced Commands modal (Up/Downto select,Enterto execute), including scoped path update (U), clear plan, and metadata-suggestion bulk applyP: copy selected file/folder relative path to clipboardV: view current plan as grouped action tree (copy/metadata/delete categories)h: show/hide completely identical folders (preference persisted in SQLite)D: delete selected file/folder on both sides (with confirmation)F: diff selected file (left vs right) in a modall: left wins (applies to selected file/subtree)r: right wins (applies to selected file/subtree)i: ignore (applies to selected file/subtree)I: add selected file/folder name to parent.dropboxignoreand hide it from current review states: suggested planner action (applies to selected file/subtree)a: apply current plan (press twice to confirm)q: quit
- Default action is
ignore(do nothing) until you assign actions. - Plan summary shows operation counts:
- delete left/right
- copy left->right and right->left
- metadata updates left<->right
ais disabled when total planned operations is zero.- Applying opens:
- confirmation modal (
Aapply /Ccancel) - execution modal with progress bar and error list
- confirmation modal (
- After apply:
- successful paths are marked done in-place during execution (no rescan)
- failed paths stay pending in the UI
- There is no standalone CLI
applycommand; apply is executed from the review TUI. - xattr-based exclusion is intentionally disabled in current scan path for performance.