The Radix Rust SDK (radixdlt-rust-sdk) is a set of native Rust building blocks for the Radix ledger – the off-ledger primitives that, until now, existed mainly in JavaScript/TypeScript. It lets developers build authentication backends, transaction tooling, and wallet integrations entirely in pure Rust. The project is authored and maintained by Luis Alberto Reoyo Bolaños (GitHub genkipool) and is dual-licensed under MIT or Apache-2.0.
Background
Radix's off-ledger toolkit – the code that runs in a dApp backend or client rather than on the network – has historically been distributed as the official TypeScript packages such as @radixdlt/rola and the Radix dApp Toolkit. The Radix Rust SDK reimplements these primitives for the Rust ecosystem, giving server, desktop, and embedded developers a way to derive addresses, verify signatures, manage keys, and talk to wallets without a JavaScript runtime. It emphasises modular transports, native ROLA verification, and integration with AI agents.
Crates
The workspace holds ten crates, but it is not one workspace: radixdlt-connect, radixdlt-connect-iroh and radixdlt-connector-mcp are each isolated, because their WebRTC and QUIC dependency trees cannot be resolved alongside the Radix Engine tree the Gateway crate pulls in. The manifest records the specific collision: the Scrypto engine pins regex to exactly 1.9.3 while webrtc requires 1.9.5 or newer. A developer therefore picks a transport at the crate level rather than by feature flag.
- radixdlt-sdk – umbrella crate for the main workspace, re-exporting the others behind feature flags (
address,rola– the default,keystore,gateway,connect-types, andfull). It deliberately does not re-export the two transports, for the resolution reason above. - radixdlt-rola – off-ledger authentication matching
@radixdlt/rola("log in with Radix"). - radixdlt-address – virtual-account address derivation.
- radixdlt-keystore – encrypted Ed25519 keystore using scrypt + AES-256-GCM.
- radixdlt-gateway-tx – Gateway client with local transaction signing.
- radixdlt-connect-types – the transport-agnostic Radix Connect wallet-interaction schema, shared by both transports and carrying no heavy dependencies of its own.
- radixdlt-connect – Radix Connect over WebRTC for mobile-wallet integration, including TURN over TCP/TLS for networks with no UDP.
- radixdlt-connect-iroh – Radix Connect over iroh / QUIC for direct SDK-to-SDK communication.
- radixdlt-connector-mcp – a local MCP server that lets AI agents pair a wallet and sign transactions.
- radixdlt-i18n – system-locale detection with bilingual text support.
Availability and Installation
None of the crates are published to crates.io. Queried at the registry's API on 15 August 2026, radixdlt-sdk, radixdlt-rola, radixdlt-connect-iroh and radixdlt-connector-mcp all return crate does not exist, so the radixdlt-sdk = "0.1" quick-start in the README — and the crates.io and docs.rs badges above it — describe an intended future state rather than one a cargo add will reach today. The workspace is consumed by Git or path dependency in the meantime.
The repository's PUBLISHING.md says the packages are publish-ready — metadata and READMEs complete, tests green, a clean cargo publish --dry-run for radixdlt-i18n — and sets out the publish order dependencies-first. What it leaves open is a naming question rather than an engineering one: crates.io names are first-come-first-served, and the radixdlt-* prefix is Radix's own brand, so the document flags that the project "could object or request a transfer, and the names may look official" before anyone claims them.
The exception, and the piece that is installable today, is the MCP connector. It ships as a binary named radix-connector-mcp, installed straight from the repository with cargo install --git https://github.com/genkipool/radixdlt-rust-sdk radixdlt-connector-mcp or the prebuilt-binary scripts for Linux, macOS and Windows. It carries the project's only release train — nine tags from connector-v0.1.0 on 5 July 2026 to connector-v0.3.1 on 2 August 2026, the latter also the repository's most recent commit.
Radix Connect over iroh
The radixdlt-connect-iroh crate defines a transport protocol that lets two pure-Rust peers exchange Radix wallet-interaction messages over iroh (QUIC). It is a Rust-native alternative to the WebRTC transport used by Radix Connect, enabling server-to-signer and device-to-device flows – such as "log in with Radix" and transaction signing – without routing through a mobile wallet. The full specification is published in its PROTOCOL.md.
Transport and framing
Peers connect as iroh 1.x endpoints over QUIC, negotiating the ALPN identifier radixdlt-connect-iroh/0. Each interaction uses one bidirectional QUIC stream: the connecting dApp sends first and the accepting Wallet receives first, so request/response ordering is maintained without a separate handshake. Messages are length-prefixed JSON documents – a 4-byte big-endian u32 length followed by a UTF-8 JSON body.
Roles
The dApp initiates the connection, sends the request, and verifies responses (notably ROLA proofs). The Wallet (signer) accepts the connection, holds the Ed25519 signing keys, and responds to interactions. A request envelope carries an interactionId (UUID-v4), metadata (version, network ID, dApp definition address, origin), and discriminated items; the response envelope echoes the same interactionId as either success or failure.
Interaction flows
The protocol supports the same interaction families as Radix Connect:
- Account proof (ROLA) – the dApp sends a challenge and its context; the Wallet signs a message incorporating the challenge, dApp definition, and origin; the dApp verifies the returned proofs natively via
radixdlt-rola::verify_account_proof, independent of transport authentication. - Transaction – the dApp sends a manifest and blobs; the Wallet compiles it, builds a notarized transaction, submits it to the Gateway, and returns the intent hash (even if the confirmation wait times out).
- Pre-authorization – the dApp sends a subintent manifest and expiration window; the Wallet signs a subintent with an epoch-based validity window (~5 minutes per epoch) and returns the signed partial transaction, which is not submitted.
Pairing, identity, and relays
A Wallet publishes a locator – a full ticket() (local addresses, for same-host or LAN pairing), an id_ticket() (endpoint ID only, for internet use with discovery), or an endpoint_id_string() (mDNS pairing). Identity can be ephemeral (a random key per run) or fixed (a 32-byte seed yields a stable EndpointId); reusing the Radix account key as the endpoint seed unifies channel and ledger identity. Relaying is configurable: Relay::Disabled keeps connections direct, while Relay::Enabled uses n0 public relays and discovery for NAT traversal. Errors surface through the IrohError enum (Bind, Connect, Accept, Stream, Protocol, Rejected).
Security properties
QUIC/TLS provides confidentiality and integrity, and the EndpointId authenticates peers at the transport layer. ROLA proofs are verified natively by the dApp, independent of that transport authentication. When the endpoint seed doubles as the account key, channel and ledger identity are tied together. A relay can observe connection metadata but never the encrypted stream contents.
AI-agent integration
The radixdlt-connector-mcp crate exposes a local Model Context Protocol server, letting AI agents pair a Radix wallet and request signatures through the SDK's transports. Combined with native ROLA verification and Gateway signing, this positions the Rust SDK as a foundation for agentic Radix tooling that runs entirely outside a browser.
