x0x 0.19.21

Agent-to-agent gossip network for AI systems — no winners, no losers, just cooperation
Documentation
[package]
name = "x0x"
version = "0.19.21"
edition = "2021"
rust-version = "1.95.0"
license = "MIT OR Apache-2.0"
description = "Agent-to-agent gossip network for AI systems — no winners, no losers, just cooperation"
repository = "https://github.com/saorsa-labs/x0x"
homepage = "https://saorsalabs.com"
documentation = "https://docs.rs/x0x"
readme = "README.md"
keywords = ["gossip", "ai-agents", "p2p", "decentralised", "post-quantum"]
categories = ["network-programming", "asynchronous"]
authors = ["David Irvine <david@saorsalabs.com>"]
# Proof artefacts are committed to the git repo for reviewers + CI but are
# not needed to compile the crate. Excluding them keeps the published
# tarball under crates.io's 10 MB limit.
exclude = ["proofs/**", "tests/proof-reports/**", "target/**"]

[dependencies]
anyhow = "1.0"
ant-quic = "0.27.5"
saorsa-mls = "0.3.5"
async-trait = "0.1"
bincode = "1.3"
blake3 = "1.5"
bytes = "1.11"
chacha20poly1305 = "0.10"
clap = { version = "4.5", features = ["derive"] }
dashmap = "6.1"
dirs = "5.0"
postcard = { version = "1.1", features = ["use-std"] }
hex = "0.4"
if-addrs = "0.13"
axum = { version = "0.7", features = ["ws"] }
base64 = "0.22"
axum-extra = { version = "0.9", features = ["typed-header"] }
hyper = { version = "0.14", features = ["server", "http1", "tcp"] }
tokio-stream = { version = "0.1", features = ["sync"] }
tower-http = { version = "0.6", features = ["cors", "trace"] }
rand = "0.8"
saorsa-gossip-coordinator = "0.5.31"
saorsa-gossip-crdt-sync = "0.5.31"
saorsa-gossip-groups = "0.5.31"
saorsa-gossip-identity = "0.5.31"
saorsa-gossip-membership = "0.5.31"
saorsa-gossip-presence = "0.5.31"
saorsa-gossip-pubsub = "0.5.31"
saorsa-gossip-rendezvous = "0.5.31"
saorsa-gossip-runtime = "0.5.31"
saorsa-gossip-transport = "0.5.31"
saorsa-gossip-types = "0.5.31"
saorsa-pqc = "0.5"
serde = { version = "1.0", features = ["derive"] }
serde_json = "1.0"
thiserror = "2.0"
tokio = { version = "1", features = ["full"] }
toml = "0.8"
reqwest = { version = "0.12", default-features = false, features = ["json", "stream", "rustls-tls"] }
semver = "1.0"
sha2 = "0.10"
flate2 = "1.0"
tar = "0.4"
zip = "2.0"
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["json", "env-filter"] }
zeroize = "1.8.2"
four-word-networking = "2.7.0"
futures = { version = "0.3", features = ["alloc"] }
async-stream = "0.3.6"
uuid = { version = "1.20.0", features = ["v4"] }
libc = "0.2"
which = "7"
termimad = "0.30"
terminal_size = "0.4"
dhat = { version = "0.3", optional = true }
# jemalloc for the daemon binary — glibc malloc holds pages after free,
# producing the 50 MB+ heap-to-RSS amplification observed during the
# 2026-04-25 soak. tikv-jemallocator is the maintained fork. We configure
# aggressive purge via MALLOC_CONF in the binary entry point.
[target.'cfg(not(target_env = "msvc"))'.dependencies]
tikv-jemallocator = { version = "0.6", optional = true }
tikv-jemalloc-ctl = { version = "0.6", optional = true }

[features]
# jemalloc with aggressive purge — eliminates the 50 MB heap-to-RSS
# amplification glibc was producing. Opt-in (not default) so library
# consumers aren't forced into a particular allocator. The daemon binary
# enables this in its own production builds.
jemalloc = ["dep:tikv-jemallocator", "dep:tikv-jemalloc-ctl"]
# Enable dhat heap profiling in x0xd. Outputs dhat-heap.json at exit.
# Build: cargo build --bin x0xd --features profile-heap
profile-heap = ["dep:dhat"]

[dev-dependencies]
tokio-tungstenite = "0.24"
futures-util = "0.3"
criterion = "0.5"
futures = { version = "0.3", features = ["alloc"] }
proptest = "1.4"
serde_json = "1.0"
tempfile = "3.14"

[[bin]]
name = "x0xd"
path = "src/bin/x0xd.rs"
test = false

[[bin]]
name = "x0x-keygen"
path = "src/bin/x0x-keygen.rs"
test = false

[[bin]]
name = "x0x"
path = "src/bin/x0x.rs"
test = false

[[bin]]
name = "gui-coverage"
path = "src/bin/gui_coverage.rs"
test = false

[[bench]]
name = "gossip_dispatch_throughput"
harness = false

[workspace]
members = [
    ".",
    "tests/harness",
]

[profile.release-profiling]
inherits = "release"
debug = "line-tables-only"
strip = "none"
# Embed debuginfo in the binary so gdb / perf on remote VPS can resolve
# Rust symbols without needing the .dwo files shipped alongside.
split-debuginfo = "off"