The xOne family has four execution clients for XDC Network. They are written in Rust, TypeScript, Python and C++. Each client has its own intro post: xOneRS, xOneTS, xOnePy and xOneC. This post does not repeat them. It puts the four side by side, explains why they agree, and helps you choose.
The xOneTS, xOnePy and xOneC repositories are private. xOneRS is public.
The four at a glance
| xOneRS | xOneTS | xOnePy | xOneC | |
|---|---|---|---|---|
| Language | Rust | TypeScript | Python | C++23 |
| Runtime | native binary xone |
Bun, binary xonets |
CPython 3.13 with the GIL (3.12 or newer supported), xonepy |
native, clang 19 or newer, xonec |
| EVM | revm | @ethereumjs/evm |
py-evm | own interpreter |
| Storage | MDBX | bun:sqlite (WAL) plus segment files |
stdlib sqlite3 (WAL) plus segment files |
libmdbx plus segment files |
| License | GPL-3.0-or-later | Apache-2.0 | MIT | MIT |
| Release tag | v0.1.0 | v0.1.0 | v0.1.1 | v0.1.0 |
| Sync modes on net2040 | full, snap, fast, minimal, archive (the tracker node predates the true state archive, merged in PR #416 on 2026-11-14) | full, snap, fast, minimal, archive (still syncing from genesis) | full, snap, minimal, archive (fast is an alias of snap, not deployed) | full, snap, minimal, archive (fast is an alias of snap, not deployed) |
| Mint on net2040 | holds seat 0xa0ea since 2026-11-12, 0 misses | holds own seat 0xfC71 since 2026-11-13, 1847 seals, 4 misses | holds seat 0xc33a since 2026-11-14, 314 seals, 0 misses | holds seat 0x00ce since 2026-11-13, 908 seals, 0 misses |
The sync and mint rows come from the latest hourly tracker comment on xOneRS#140, posted 2026-11-14T18:30Z at net2040 tip 840762. In that comment, two xOneTS snap nodes and one xOneTS fast node showed as down. On main, each of xOneRS, xOneTS and xOnePy has changes after its tag (see the "Unreleased" section of each CHANGELOG).
Mint here means verified seals. The tracker counts 3 of 3 verified seals on a borrowed seat as the Gate E smoke test. The reconciliation of 2026-11-14 states that no gate is closed with full evidence yet.
xOneRS: the reference for operations
xOneRS is the Rust line. Its README documents the follower paths for net2040 and Apothem. It also documents snapshots, a minimal node, disk state and the producer. --mine runs on private devnets and is allowed on Apothem. It is refused on mainnet (chain 50).
ADR-001 gives the reason for Rust: one memory-safe language for the parts that hold keys and money, and a reference that is independent of the code under test. Its status is Proposed until the owner accepts it.
The README lists what is not qualified: a mainnet follow or mint, a 72 h producer soak, and full-history replay on real disk.
xOneTS: the family in a familiar language
xOneTS is the TypeScript line on Bun. Its plan says the team writes TypeScript. It names the aim: follow, serve RPC, appear on SkyNet, mint on a borrowed seat, then mint on an own validator. Net2040 now shows that last step. A TS node holds its own seat.
The plan states the cost up front. Crypto in pure JavaScript is slower than in Rust, and execution is single-threaded. The plan says a from-genesis Apothem replay is "a machine-time proof (days), not an operator path".
xOnePy: the readable line, and the slowest
xOnePy is the Python line. Its plan (issue #1) states: "Python execution will be the slowest of the four lines." Snap, minimal and fast sync are the targets for Apothem and mainnet. Full sync from genesis is a target for net2040 and the Apothem gate window only.
ADR-P01 records the runtime choice. It rejects the free-threading build and PyPy. coincurve does not build on either. Parallel work uses processes, not threads.
xOneC: no borrowed engine
xOneC is the C++23 line. Its EVM is its own interpreter. The plan adds a memory-safety target: ASan and UBSan clean on every test, and implicit narrowing is a build error. ADR-C01 sets clang 19 or newer, -Werror and typed errors with std::expected.
Why the four agree
One specification feeds all four. xOneRS holds it in spec/. Each page states a rule and cites file:line in geth-XDC at one pinned commit. The oracle is geth-XDC, not the code under test.
The other three do not restate the rules:
- They vendor
spec/and the golden vectors from xOneRS at a pinned commit (vendor/xone/PIN). The vendored tree is read-only. - A drift check compares the vendored copy with xOneRS
main:python3 ci/sync_vendor.pyin xOnePy and xOneC,bun ci/sync-vendor.ts --src <xOne clone>in xOneTS. - The xOneTS plan says a vector is never edited for TS.
- Each of ADR-002, 004, 005, 007 and 010 has an addendum per language, for example ADR-005 for TypeScript, for Python and for C++. An addendum records what differs, such as the storage engine. The rest carries over: the same publication order and the same retention of 4,096 blocks.
The result shows on the live chain. The 2026-11-14T17:55Z comment on #140 counts blocks 814,798 to 840,174 (25,377 blocks). The fair share per seat was 1,813 blocks (7.14%). Rust sealed 1,837, C++ 1,809, Python 1,807 and TS 1,805. Ten geth seats sealed between 1,785 and 1,838.
How to choose
- You want to run a node on Apothem or net2040, with the most documentation: start with xOneRS. It is the only public repository.
- You work in TypeScript and want to read or extend a node: xOneTS.
- You want to learn how an XDC client fits together: xOnePy, and accept that it is the slowest.
- You want a native client with no borrowed engine and sanitizer gates: xOneC.
- You need mainnet: none of the four is qualified for it today. The xOneRS README lists a mainnet follow or mint as not qualified, and the mint-gate rules of xOneTS, xOnePy and xOneC say that mainnet minting is out of scope.
All four are at version 0.1.x. Check the CHANGELOG of each repository for what has changed since its tag.
Sources
- xOneRS: README, CHANGELOG, LICENSE, ADR-001, ADR-002, spec register, reconciliation 2026-11-14
- Live results: xOneRS#140 (comments of 2026-11-14T18:30Z and 2026-11-14T17:55Z)
- xOneTS (private): docs/README.md, plan, CHANGELOG, LICENSE, ADR-002 addendum, ADR-005 addendum
- xOnePy (private): plan, issue #1, CHANGELOG, LICENSE, ADR-P01, ADR-005 addendum
- xOneC (private): plan, issue #1, CHANGELOG, LICENSE, ADR-C01, ADR-002 addendum, ADR-005 addendum
This article describes the source and evidence at its review date. Check the linked repository for current implementation and qualification status.
Explore the engineering evidence