Rsync Protocol Description?

Stephen Paul Weber singpolyma at
Sat Sep 15 10:51:54 MDT 2012

Greetings all,

I'm interesting in implementing a wire-compatible rsync library for use in 
an application I am developing.  The reason I want wire-compatability is so 
that I can interface with normal `rsync --server` over whatever 
communications tunnel on various platforms.  The reason I want to write a 
library instead of executing rsync as a sub-process is that (1) I want to 
support platforms that rsync does not support, or supports poorly (2) I want 
to be able to statically link said library to ease distribution on some such 
systems (3) I think building this library will be fun and potentially useful 
to others.

I have found librsync, which implements the algorithm but not the wire 
protocol, and I intend to use.  I understand that the rsync protocol is not 
stable from version-to-version, but that version negotiation is performed on 
each session to maintain backwards-compatability.  Thus, I would implement a 
recent version of the protocol first, and thus only work with recent 
servers, and would likely not extend backwards but only forwards as new 
versions of the protocol were implemented (though, as long as I do not need 
new features newer servers should still be able to talk to me, yes?)

So, my question is: is there any sort of description of the protocol as it 
exists today outside of the source code for rsync itself?  Even notes that 
rsync developers use for reference when doing development on the relevant 
parts of the source would be useful to me in this endeavour.

Thank you for your time,

Stephen Paul Weber, @singpolyma
See <> for how I prefer to be contacted
edition right joseph

More information about the rsync mailing list