Skip to content

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:

FeatureNeeds
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.

bash
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.

bash
rsync --version

An 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.

bash
brew install rsync

3. 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

bash
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:

bash
cargo run --release

Planning 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.

Released under the MIT License.