-
v2.28.0
StableCI / lint (push) Successful in 2m0sCI / parity-fast (push) SkippedCI / lint (pull_request) Successful in 2m0sCI / parity-full (pull_request) SkippedCI / sanitizers (address) (pull_request) SkippedCI / sanitizers (undefined) (pull_request) SkippedCI / fuzz-build (pull_request) SkippedCI / coverage (pull_request) SkippedCI / valgrind (pull_request) SkippedCI / parity-full (push) Successful in 19sCI / sanitizers (address) (push) Successful in 50sCI / sanitizers (undefined) (push) Successful in 44sCI / build-and-test (push) Successful in 1m8sCI / coverage (push) Successful in 42sCI / fuzz-build (push) Successful in 47sCI / parity-fast (pull_request) Successful in 19sCI / build-and-test (pull_request) Successful in 52sCI / valgrind (push) Successful in 2m13sreleased this
2026-09-20 01:11:40 +02:00 | 126 commits to main since this releaseThe rsync-parity cycle.
PROTOCOL_VERSIONmoves2.26.0 → 2.27.0 → 2.28.0; client and server must run the same version.Highlights
- Differential rsync 3.4.1 parity gate in CI (fast on PR, full strict on push; empty residual allowlist).
- Parity matrix 116 ✅ / 14 ⚠️ / 27 ❌ = 157 (was 111/13/33).
--deletenow defaults to delete-during (rsync--del); FastSync-only--delete-commitkeeps the old atomic timing.- Receiver-observed
--stats(created breakdown + exact delta literal);--progressopt-into-chkpre-count. - Receiver-side
protect/riskfilter engine —--filterand--delete-excludednow parity. - Basis dirs default to rsync's quick-check; FastSync-only
--verify-basis; streamed basis materialization. - Per-codec compression defaults +
RSYNC_*_LISTforauto;--checksum-choiceproven observable-equivalent.
Migration
- Plain
--deletenow removes reached directories' extras during the transfer; pass--delete-commit(or--delete-after) for the old commit-only-after-success behavior. - Basis verification now trusts size+mtime by default; pass
--verify-basisto require a whole-file digest.
See
CHANGELOG.mdfor details andRSYNC_COMPAT.mdfor remaining documented caveats.Downloads
-
v2.26.0 — rsync 3.4.1 drop-in parity
StableCI / lint (push) Successful in 1m40sCI / sanitizers (undefined) (push) Successful in 44sCI / sanitizers (address) (push) Successful in 50sCI / build-and-test (push) Successful in 58sCI / coverage (push) Successful in 40sCI / fuzz-build (push) Successful in 46sCI / valgrind (push) Successful in 2m12sreleased this
2026-09-18 19:11:03 +02:00 | 164 commits to main since this releaseFastSync v2.26.0 — rsync 3.4.1 drop-in parity
This release makes FastSync a drop-in replacement for
rsync 3.4.1across the vast majority of its option surface, and closes the issues tracked in #285–#297.Protocol
- 2.22.0 → 2.26.0 — breaking wire change. Upgrade client and server together; the handshake is strict same-version (no mixed-version peers).
--protocolaccepts only2.26.0.
Highlights
- Delete timing: true
--delete-during/--delete-delayvia per-directory delete plans (STATUS_DELETE_PLAN), with-Rprefix scoping and dry-run safety. - Wire stats: receiver counters (
STATUS_STATS) now drive--stats,--progress, and--out-format %b/%c/%C, in both the sequential and--threadspaths. - Codecs & checksums:
lz4/zlib/zlibxcompression andmd4/sha1/nonechecksums with negotiation; defaultsxxh128/zstd. - Selection & paths: general
-R/--relative,--no-implied-dirs,-d/--dirs,--iconv, the full filter grammar (merge/dir-merge/hide/show/protect/risk/clear+ modifiers), receiver-side--chownTO-name resolution, absolute basis dirs +--link-destrelink,--preallocateover--sparse,--fuzzy,--ignore-existingshort-circuit. - Compatibility matrix (
RSYNC_COMPAT.md): 156 rows — 106 ✅ Parity / 27 ⚠️ Caveat / 23 ❌ Divergent (was 83 / 63 / 4). Every ⚠️ and ❌ row names its residual or rationale.
Fixes
- Uninitialized
File.matched_bytesleaking garbage into--statsoutput. --append/--append-verifycrash on streamed (large /--sendfile) files.- Filter merge-file rollback could double-free after a
clearrule. - Reject the xattr-name filter modifier
xinstead of silently treating it as a filename rule. - ASan leak in receiver pipeline teardown.
valgrindunit-test hang (io-fd redirection leaking across test suites) and uninitializedper_dir_filter_count.
Known caveats
27 rows remain ⚠️ with a documented residual (e.g.
--progressleading whole-transfer line,%b/%cbyte accounting, silent--info/--debugcategories,--delete-delaydeleted-count, absolute--temp-dir,-Mover TCP,--bwlimitunits). The 23 ❌ rows are intentional divergences (native daemon config/auth, rsync batch container, privilege namespaces,--protocoldowngrade, non-portable--crtimes). SeeRSYNC_COMPAT.mdfor the full, honest table.Verification
- Unit tests 43/43; full integration 729 passed / 23 skipped / 1 xpassed; PR gate 301 passed.
lint,build-and-test,sanitizers (address|undefined),fuzz-build,coverage, andvalgrindall green on bothdevandmain.
Downloads
- 2.22.0 → 2.26.0 — breaking wire change. Upgrade client and server together; the handshake is strict same-version (no mixed-version peers).