The rcds binary supports one-shot server/client workflows for set reconciliation and exact file pull synchronization.
make build
./bin/rcds versionrcds server [options]
rcds client [options]
rcds version
rcds helpServers handle one client and then exit by default. Pass --once=false to keep serving sequential clients.
| Flag | Default | Applies to | Description |
|---|---|---|---|
--host |
127.0.0.1 |
server, client | Address to listen on or connect to. |
--port |
8080 |
server, client | TCP port. |
--mode |
set |
server, client | Sync mode: set or file. |
--algorithm |
iblt |
set mode | Set reconciliation algorithm: rcds, iblt, or full. |
--items |
empty | set mode | Comma-separated set elements. |
--input |
empty | set mode, file server | Line-delimited set input, or file source in file server mode. |
--output |
empty | set mode, file client | Reconciled set output, or file destination in file client mode. |
--file |
empty | file mode | File source for server, destination for client. |
--expected-diff |
100 |
IBLT set mode | Expected symmetric difference for IBLT sizing. |
--max-retries |
3 |
IBLT set mode | Additional IBLT retry tables. |
--timeout |
30s |
server, client | Network timeout. Set servers apply it while waiting for a client and during active connections; clients use it while dialing and during active connections. |
--chunk-size |
65536 |
file mode | Fixed chunk size in bytes. |
--freeze-local |
false |
set mode | Do not apply remote additions locally. |
--once |
true |
server | Exit after one client. |
Start a server:
./bin/rcds server \
--algorithm full \
--port 8080 \
--items server-only,shared \
--output server.outConnect a client:
./bin/rcds client \
--algorithm full \
--port 8080 \
--items client-only,shared \
--output client.outBoth outputs contain the reconciled set:
client-only
server-only
shared
For larger inputs, use line-delimited files:
./bin/rcds server --algorithm iblt --expected-diff 500 --input server.txt --output server.out
./bin/rcds client --algorithm iblt --expected-diff 500 --input client.txt --output client.outThe file protocol is a pull workflow. The server exposes an exact source file. The client reconstructs the destination from chunks it already has plus chunks sent by the server. The destination is replaced only after the final SHA-256 checksum matches.
Start a file server:
./bin/rcds server --mode file --file ./source.bin --chunk-size 65536Pull to a destination:
./bin/rcds client --mode file --file ./copy.bin --chunk-size 65536You can also use --input for the server source and --output for the client destination:
./bin/rcds server --mode file --input ./source.bin
./bin/rcds client --mode file --output ./copy.binfullis deterministic and useful as a baseline or for small datasets.ibltis efficient when the expected symmetric difference is accurate enough.rcdsprepares Recursive Content-Dependent Shingling metadata based on the Allerton 2019 paper. The current CLI path uses the shared GenSync/full-sync wire exchange, so treat it as research-grade rather than a complete low-bandwidth RCDS protocol.
For paper background and implementation boundaries, see PAPER.md.
go vet ./...
go test -race ./...
go test -tags integration ./test/integration -v
go test -tags e2e ./test/e2e -vmake integration-test and make e2e-test use Go build tags and exercise localhost TCP workflows.
The full GA verification checklist lives in GA_READINESS.md.