RSYNCD(5)
π¦ rsyncd(5) Β· File Formats Manual π¦
okay bestie, buckle up π
this is the rsyncd(5) page from the File Formats Manual, and it's all about the rsyncd wire protocol. No cap, every detail stays.
β¨ NAME β¨
rsyncd β rsyncd wire protocol π«Ά
πΈ DESCRIPTION πΈ
The rsyncd protocol described here relates to the BSD-licensed openrsync(1) β a re-implementation of the GPL-licensed reference utility rsync(1). It's compatible with version 27 of the reference, periodt. π₯
The rsyncd protocol is an envelope protocol for rsync(5) between a client and an rsync://-capable server. It provides a means to exchange capabilities information prior to file transfer. Literally the pre-game chat. β¨
In this document, "client" refers to the openrsync(1) utility making the request. It follows that "server" refers to the daemon servicing the request. The client is main character energy, iykyk. π
A connection between a client and server consists of host, a module, and zero or more paths. The vibe is:
openrsync rsync://host/module/path1 rsync://host/path2... dest
At this time, operating in sender mode (with the rsync:// host receiving information) is not described in this document. Not me leaving that out β the page says so. π
π§ Data types π§
These are the same as in rsync(5). A newline is always a standalone \n. That's it, that's the tea. β
π Client process π
After initialising a connection, the client and server exchange the following information, in order. This portion of the process is not multiplexed. Okay so:
- client sends requested module followed by newline
- server responds with preamble followed by standalone newline
Vibe check: the requested module must have non-zero length. The preamble consists in a sequence of lines. Each line either contains free-form text sent by the server as a "motd" (message of the day) or a command:
@RSYNCD: command\n
The only supported command is the server protocol specification:
@RSYNCD: xx[.yy]\n
The optional component is the submodule, which may be discarded. The version may only be specified once. Both the motd and commands end in the special termination command:
@RSYNCD: OK\n
Following that, the client must send the command-line arguments that would otherwise be used to start an openrsync(1) server. Each argument must be specified on its own line, e.g.:
--server\n--sender\n-r\n-t\n.\npath1\npath2
This must be followed by a standalone newline.
If the server does not understand or accept any of the command-line arguments, it will exit at this point. π
Following this, the client must read the integer-length session checksum seed. Multiplexing is subsequently enabled. Slay. π
The sequence that follows is stipulated in rsync(5) following the handshake. That's the next chapter, bestie. π«Ά
π SEE ALSO π
mwah π β the source says Debian, the date stamp is $Mdocdate$, and this iconic page is the RSYNCD(5) manual. periodt. π
π¦ where this page comes from
- nixos 26.05: openrsync-unstable 2025-01-27
- nixpkgs unstable: openrsync 0.5.0-unstable-2026-05-31
- Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
- π girlified by deepseek-ai/DeepSeek-V4.1-Flash-1017 on : a language model's rewrite of the original, under its terms