December 10, 2025
This is a bug-fix release which fixes a problem that made cjdns not work correctly on 32 bit systems.
- CryptoAuth.c (used only in tests since ~2022) is now removed because it had issues on 32 bit
- Tests updated to address removal of CryptoAuth.c
- Identity.h bug fix word size in identity cookie
December 5, 2025
- cjdnstool: Added ping and route (get) commands
- cjdnstool: Session: print route metric in human readable form
- New RPC:
SubnodePathfinder_queryNodeto perform a DHT query without legacy RouterModule
- Moved all bencoding to Rust
- Bugfix route server sending empty replies
January 8, 2025
This is a point version so there are no changes to the inter-node protocol but introduces a number of new features.
- DNS Seeding allows auto-peering, so manually adding peers is now optional, new RPCs:
PeeringSeeder_publicStatus: Shows statusPeeringSeeder_publicPeer: Enables becoming a public nodePeeringSeeder_listDnsSeeds: List the active DNS seed nodesPeeringSeeder_rmDnsSeed: Remove a DNS seed nodePeeringSeeder_addDnsSeed: Add a DNS seed node
- cjdnstool is compiled with cjdroute making it easier to do node administration.
Security_seccompremoved, SECCOMP BPF filter because is too strict for the 3rd party Rust libraries.- Libuv is gone from the project, all interfaces with the OS are through Rust code.
- UDP and TUN interfaces now use tokio worker pools, new RPCs:
UDPInterface_workerStates: Check the status of UDP Interface workers.Core_tunWorkers: Check the status of TUN Interface workers.
February 3, 2023
It's been since September 18, 2020 when cjdns v21 was tagged out, and brought only small experimental inclusion of Rust code to cjdns. v22 makes Rust a main language in which cjdns is written, and it is foreseen that in v23, almost all interactions with the OS will be done in Rust.
- New protocol version v22, compatibility is maintained with v21 and v20 (no change in compatibility)
- This new protocol version brings a new CryptoAuth protocol based on the NOISE protocol used by WireGuard® VPN. The NOISE protocol is used in all direct peering connections where both sides are v22.
- The legacy CryptoAuth protocol remains but has been entirely re-written in Rust, the C version remains only for testing purposes.
- RPC
InterfaceController_peerStats()Now contains Integer noiseProto: 1 if using the NOISE protocol for communication - RPC
InterfaceController_disconnectPeer()Now disconnects ALL sessions to given peer address instead of only the first - RPC
InterfaceController_timestampPackets()has been removed, as it only affected debug logging and was rarely used - Libuv code is now compiled using the cjdns build system, it is nolonger compiled using gyp so python is nolonger needed to build cjdns
- Removed
cjdroute --benchwhich was not an accurate measure of expected performance
- Made fields of Message structure so they will be accessed through accessors - first step to move Message into Rust
- Make cjdns Error return value use a Rust anyhow error
- In preparation for removal of Libuv, we have replaced the following Libuv functions with Rust implementations:
- IP Address manipulation functions:
uv_inet_pton/uv_inet_pton - Current time:
uv_now/uv_hrtime - Child process:
uv_spawn/uv_exepath/uv_process_kill
- We nolonger put
makekeys,mkpasswd,privatetopublic,publictoip6,randombytes, andsybilsimin the main folder
- In the future:
makekeys,privatetopublic,publictoip6, andrandombyteswill be built as a separate optional component mkpasswdwill be dropped because it is too trivial to be worth maintainingsybilsimwill be dropped because it is nolonger maintained
- Removed from SwitchCore.c the possibility of an interface to be "down" which never exists in reality
- New logger for Rust code which uses the cjdns logger as a backend
- CryptoAuth is now an (asynchronous) Iface rather than a function you call to encrypt and decrypt
For earlier versions, see ./util/version/Version.h