Rust implementation of Dataspaces, Syndicate, and a high-speed networked dataspace broker.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Tony Garnock-Jones bf1552d9a8 Use busybox as base rather than a completely empty image, for convenience 1 month ago
dev-scripts Update configuration in run-server 9 months ago
docker Use busybox as base rather than a completely empty image, for convenience 1 month ago
syndicate (cargo-release) version 0.23.0 5 months ago
syndicate-macros (cargo-release) version 0.18.0 5 months ago
syndicate-server Add `stringify` quasi-function 4 months ago
.gitignore Use OUT_DIR 11 months ago
Cargo.lock Bump deps for a ~1% speed boost from tracing 0.1.32 4 months ago
Cargo.toml Use the localdev pattern 9 months ago
Cross.toml Makefile & Cross.toml hack to work around an aarch64 cross-compilation issue ( 9 months ago
Makefile Add x86_64-binary-debug target 6 months ago Update README 10 months ago 5 months ago
rust-toolchain Split out syndicate-server crate 11 months ago
syndicate-rs-server.png 1 year ago


A Rust implementation of:

  • the Syndicated Actor model, including assertion-based communication, failure-handling, capability-style security, dataspace entities, and facets as a structuring principle;

  • the Syndicate network protocol, including

    • a high-speed Dataspace indexing structure (; see also from syndicate-rkt) and

    • a standalone Syndicate protocol "broker" service (roughly comparable in scope and intent to D-Bus); and

  • a handful of example programs.

The Syndicate/rs server running.
The Syndicate/rs server running.


git clone
cd syndicate-rs
cargo build --release
./target/release/syndicate-server -p 8001

Running the examples

In one window, start the server:

./target/release/syndicate-server -p 8001

Then, choose one of the examples below.

Producer/Consumer (sending messages)

In a second window, run a "consumer" process:


Finally, in a third window, run a "producer" process:


State producer/consumer (state replication)

Replace producer with state-producer and consumer with state-consumer, respectively, in the instructions of the previous subsection to demonstrate Syndicate state replication.

Pingpong example (latency)

In a second window, run

./target/release/examples/pingpong pong

and in a third window, run

./target/release/examples/pingpong ping

The order is important - the difference between ping and pong is about who kicks off the pingpong session.

Performance note

You may find better performance by restricting the server to fewer cores than you have available. For example, for me, running

taskset -c 0,1 ./target/release/syndicate-server -p 8001

roughly quadruples throughput for a single producer/consumer pair, on my 48-core AMD CPU.