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