Note: Synchi is under active development and currently in alpha.
Expect breaking changes as the interface and behavior settle.
Synchi is a tool for syncing files between two locations.
You run it when you want, it figures out what changed since last time, and it asks you what to do when there are conflicts.
It works with local folders or over SSH, and it does not require any agent or service on the remote side.
If you’re curious why Synchi exists in the first place, see Why Synchi?.
What Synchi is good at
- Detecting real changes between runs, not just timestamp noise
- Two-way sync with explicit conflict handling
- One-way mirroring when you want it
- Working over plain SSH or local paths
- Staying predictable across repeated runs
Synchi is designed to be run on demand.
It does not watch files, run in the background, or try to hide what it’s doing. You are in control of all changes that are made.
How it works
At a high level, Synchi does the following:
- Scans both roots while applying include and ignore rules (include defines the sync scope)
- Detects changes since the previous run
- Classifies files as new, modified, deleted, or conflicting
- Plans the required operations
- Executes them safely, transferring only what actually changed
Because Synchi keeps state between runs, repeated executions are fast and stable.
What it looks like
A typical sync run: Synchi scans both roots, computes what changed, and executes only the necessary operations.
Quick start
# Install from crates.io
cargo install synchi
# Create your own config
# By default Synchi reads: ~/.config/synchi/config.toml
root_a = "./root_a"
root_b = "ssh://user@host/srv/data"
include = ["**"]
ignore = ["**/.venv/**"]
# Read configuration instructions for other options.
# Remote roots must use ssh://user@host/path.
# scp-style user@host:/path is not supported.
# Run
synchi sync
Requirements
- Root A must be local and writable (it stores Synchi’s state)
- Remote roots are accessed over SSH
- Standard tools must be available:
ssh,tar,find,sha256sum
synchi status is read-only. synchi sync prints the summary before touching either root and only writes during execution.
Most Linux systems already meet these requirements.
Documentation
If you run into issues or have questions, open a GitHub issue with details and logs.