Improvements

Quaxar improvements and parity work

Quaxar is an independent Rust implementation of the XRP Ledger server. Its design uses explicit ownership, bounded concurrency, typed runtime boundaries, structured logs, and Rust-native operator tools.

This page distinguishes measured results from architectural choices, implemented capabilities, and corrections made to match rippled. A bug fix is not a new protocol feature, and a design difference is not a performance claim.

01 / Independent implementation

A direct route for Rust contributors

Developers familiar with Cargo, Tokio, Serde, tracing, ownership, and typed errors can work on XRPL server infrastructure in a native Rust codebase. Differences between Quaxar and rippled also expose assumptions that can be turned into tests.

This broadens access to the codebase. It does not show that Rust makes protocol work inherently correct or faster.

02 / Measured improvement

Process memory while fully synced

On 11 September, a node_size=huge build remained full during a 60-second recheck. The process had no restarts, maintained 21 peers, kept validated-ledger age at two to three seconds, and advanced by 18 validated ledgers. Process RSS was 7.28 to 7.41 GiB.

These figures come from limited Testnet windows on one host. They are observations, not memory limits, hardware requirements, or long-term averages.

Current live rechecks on the same Testnet host
Profile and stateWindow (UTC)Process RSSLifetime high-water
Huge, full11 Sep, 60-second recheck7.28 to 7.41 GiB (range)13.40 GiB VmHWM since restart
Huge, full11 Sep, 09:27:54 to 09:28:399.58 to 9.60 GiB; 9.59 GiB average13.40 GiB VmHWM since restart
Historical comparison and synchronization observations
RuntimeProfile and phaseRSS evidence
QuaxarMedium, 10-minute full window3.70 to 4.21 GiB; 3.83 GiB average
QuaxarHuge, early post-sync full window6.04 to 6.55 GiB; 6.20 GiB average
QuaxarHuge, synchronization run12.04 GiB summary high-water; 11.61 GiB maximum interval sample
rippled 3.3.0Medium, late full comparator12.60 GiB

Notes: Configuration hashes and raw samples confirm the profile labels. The 6.20 GiB figure is an early post-sync value, while 7.28 to 7.41 GiB is the latest huge-profile full range. The 11.61 GiB and 12.04 GiB figures were recorded during synchronization. The 13.40 GiB figure is the lifetime high-water mark, not current RSS. The rippled 3.3.0 comparison is 12.60 GiB. See the measurement note for build details, hashes, and limitations.

In the recorded same-host windows, Quaxar's medium full average was 3.83 GiB, compared with 12.60 GiB for rippled 3.3.0 in a medium late-full window. This is a lower observed RSS, not proof of equivalent profiles or a prediction of future runs.

Source review identifies three relevant differences: immediate allocator decay across supported platforms, a size-capped single-flight cache that stores no misses, and explicit acquisition limits. Determining how much each contributes requires a single controlled same-workload A/B allocation experiment.

03 / Architectural difference

What differs from rippled

Quaxar shares established patterns with rippled, including intrusive SHAMap ownership, hash canonicalization, cache-first NodeStore reads, rotating-store copy-forward, and per-hash ledger acquisition. These are not presented as Quaxar advantages.

Three areas do differ. First, Quaxar uses jemalloc on non-MSVC targets and compiles in immediate dirty- and muzzy-page decay. In rippled, jemalloc is an opt-in build flag that defaults off; the standard build relies on malloc_trim(0), which is limited to Linux with glibc. Outside that environment, this mechanism does nothing.

Second, Quaxar rejects encoded cache objects above 1 MiB, stores no negative entries, and coalesces simultaneous same-hash loads into one backend read rather than one per caller. The reference TaggedCache has no per-entry size limit, caches negative entries as a sentinel object, and lets concurrent callers reconcile at insertion. Quaxar performs each cold load once.

Third, Quaxar applies explicit limits to acquisition work: 128 packets and 4 MiB by default, 512 pending reads, a 768-entry retained frontier, four packets per engine turn, and twelve timeout reprobes. These limits are checked at shared ingress and again in each session mailbox. The reference subsystem does not apply equivalent count or byte limits to its per-request inbound-ledger vector.

04 / Implemented capability

Explicit limits on retained work

Acquisition limits cover retained packets and bytes, pending reads, the network frontier, outbound credits, ingress queues, and read-broker subscriptions. Per-profile write backpressure ranges from 64 to 1024 MiB. Named constants enforce these limits at ingress and in each session mailbox.

The NodeStore cache rejects objects above 1 MiB, coalesces same-hash loads, and prevents stale loaders from repopulating the cache after database rotation. It also keeps a cache that spends none of its capacity remembering absences.

On non-MSVC builds, jemalloc returns freed pages promptly through immediate decay settings. These limits and policies are implemented in the source. Their individual effect on RSS has not yet been measured in isolation.

Quaxar does not promise a fixed RSS ceiling. Memory use depends on the cache profile, active work, retained history, storage mode, and allocator behavior.

05 / Architectural difference

Reusable work for each ledger hash

Requests for the same ledger hash share one acquisition session. Different hashes can progress independently, while workers, brokers, mailboxes, packet lanes, peer credits, and retained bytes remain bounded.

Verified immutable nodes remain available through NodeFamily, fetch-pack state, and NodeStore. A stable recovery anchor can remain in place while the preferred ledger follows the network tip, so valid work is not discarded whenever that preference changes.

Quaxar confirms durable storage before publishing FullBelow state. See the acquisition architecture and syncing guide.

06 / Implemented capability

Rotating NuDB and verified snapshots

Rotating NuDB keeps active and archive generations, with generation fences and copy-forward handling for immutable objects. This allows bounded online deletion without discarding valid stored nodes.

Operators can export a snapshot while the node is running. Offline import streams records into NuDB, verifies SHA-256 integrity, and supports LZ4 compression. Snapshots simplify recovery, but operators must still decide which ledger state to trust.

07 / Implemented capability

Operator CLI, structured logs, and diagnostics

The CLI provides direct RPC access, configuration checks, doctor, ledger and acquisition inspection, NodeStore counters, snapshot commands, validator-key tools, and graceful shutdown. Structured logs include subsystem and severity context.

Installers are available for Linux and macOS. The Windows installer verifies the binary, and Docker Compose provides a packaged deployment option. Migration guidance covers existing volumes and configuration. Selected metrics exist internally, but packaged deployments do not expose a Prometheus /metrics endpoint.

See the CLI reference, configuration reference, and running guide.

08 / Parity hardening

Corrections, not protocol features

Recent work addressed OfferCreate Direct IOU semantics, BookDirectory quality, Fill-or-Kill regressions, Payment and AMM flow, metadata, ledger application, MPT behavior, consensus, and recovery.

An OfferCreate mismatch was reproduced at public-Testnet ledger 20660471. A seven-SLE replay isolated it, focused tests captured it, and the corrected binary returned to sustained full. The correction is available in the source on main.

Scope of the evidence: The offer test suite passed 521 of 522 cases. The remaining case concerns a known global-freeze placement gap. Strict division was reviewed and left unchanged. A seven-SLE replay does not prove full child-ledger identity, and passing tests do not establish an overall parity percentage.

09 / Unchanged protocol boundary

The XRPL protocol remains unchanged

Quaxar does not intentionally change transaction rules, amendments, serialization formats, ledger hashes, or consensus rules. Its runtime, storage, diagnostics, and operator interfaces may differ, but the protocol target remains established XRPL behavior.

Parity corrections are bug fixes. Likewise, a Quaxar capability is not a measured advantage over rippled unless evidence supports that claim.

10 / Evidence and limits

Current limits

  • Production validator operation is not recommended.
  • Complete transaction, metadata, state, recovery, consensus, and RPC parity is not claimed.
  • Full-history configuration exists, but a complete public historical deployment is not claimed.
  • Initial sync time and hardware use depend on profile, storage, network conditions, retained history, and current network state.
  • One deployment window cannot establish a universal performance ranking.