Install
rsync 3.1 or later must be on your $PATH. lazyrsync shells out to the system rsync rather than reimplementing it, and three of its features depend on options older builds don't have:
| Feature | Needs |
|---|---|
| Dry-run preview | --itemize-changes |
| Live progress bar | --info=progress2, added in rsync 3.1.0 |
| Snapshots | --link-dest |
--info=progress2 is what puts the floor at 3.1 rather than 3.0. Check what you have with rsync --version.
cargo install lazyrsync # crates.io
cargo binstall lazyrsync # prebuilt release binary
brew install lazyrsync # Homebrew
yay -S lazyrsync # AUR (Arch)cargo install builds from source and needs a Rust toolchain; cargo binstall pulls the prebuilt binary from the GitHub Release instead. Only the AUR package depends on rsync and brings it with it; Homebrew and the cargo methods do not.
lazyrsync warns at startup — and on stderr before a headless run — when the rsync it finds is older than 3.1. It warns rather than refuses: a plain transfer may still work, but the preview, the progress bar and snapshots will not.
macOS 15.4 and later
1. Check what you have.
rsync --versionAn answer of openrsync: protocol version 29 means macOS 15.4+ handed you openrsync instead of rsync. It copies files, so ordinary transfers look fine — but the preview and the progress bar can't run at all, and snapshots quietly store a full copy every run instead of hardlinking against the previous one. The acls and xattrs flags do nothing there either.
2. Install rsync.
brew install rsync3. Verify it won. rsync --version should now report rsync version 3.4.x. If it still says openrsync, Homebrew's bin isn't ahead of /usr/bin on your $PATH — name the binary directly with rsync_path.
Older macOS
Releases before Sequoia shipped rsync 2.6.9, from 2006, which is also below the floor. The same fix applies.
From source
git clone https://github.com/westpoint-io/lazyrsync
cd lazyrsync
cargo install --path .This installs the lazyrsync binary into ~/.cargo/bin. Make sure that's on your $PATH.
To run without installing:
cargo run --releasePlanning to schedule it?
cron's PATH is minimal and won't find a binary in ~/.cargo/bin. Note the absolute path now — command -v lazyrsync prints it. The same applies to rsync: cron may find a different one than your shell does, or none. Pin it with rsync_path. See Headless & scheduling.
Platform support
Linux and macOS. Prebuilt binaries ship for x86_64 and aarch64 on both.