Run a node
Run a Rust XRPL node on public Testnet.
Start with a non-validator node, sample its readiness across multiple ledger closes, and treat hardware and sync figures as planning baselines rather than guarantees. Quaxar is beta software; production validator operation is not recommended.
Scope: this guide is for public-Testnet operation. Review the repository's current running, configuration, and validator documentation before operating a long-lived node.
Provision for the profile and history you intend to keep
A practical Testnet starting point is four CPU cores, 16 GiB of RAM, fast SSD storage, and reliable broadband. Larger node_size profiles, longer history, first synchronization, snapshots, and concurrent operator workloads need additional headroom. These are planning baselines, not minimum guarantees.
| Resource | Plan around |
|---|---|
| CPU | At least four modern cores for a general Testnet node |
| Memory | 16 GiB starting headroom; more for larger profiles and operational margin |
| Storage | Fast SSD with capacity for NuDB, retained history, logs, and snapshots |
| Network | Stable low-loss connectivity and inbound TCP 51235 if accepting peers |
| Time | Accurate system time through NTP; optional SNTP support does not replace host time discipline |
node_size is a cache and resource profile. It changes defaults for cache sizing and runtime concurrency. It is not simply the number of simultaneous ledger-acquisition sessions, and a larger value does not guarantee faster synchronization.
Use the installer or build the exact source
Linux and macOS installer
curl -sSf https://raw.githubusercontent.com/TusharPardhe/quaxar/main/install.sh -o install.sh
bash install.sh
For unattended defaults:
bash install.sh -y
Save and inspect remote scripts before execution when that matches your operational policy.
Windows installer
irm https://raw.githubusercontent.com/TusharPardhe/quaxar/main/install.ps1 -OutFile install.ps1
.\install.ps1
The Windows script installs and verifies the binary. Create quaxar.cfg separately from the repository example. Windows service operation is not currently qualified by the project.
Manual source installation
Install Rust 1.90 or newer and the native dependencies documented for your platform. Then:
git clone https://github.com/TusharPardhe/quaxar.git
cd quaxar
CC=clang CXX=clang++ cargo install --path xrpld/main --locked
The --locked flag preserves the reviewed dependency resolution.
Compose is packaged, but legacy volumes need care
docker compose up -d
Compose mounts infra/docker/quaxar.cfg at /etc/quaxar/quaxar.cfg. Admin ports are published only on host loopback. The default physical data-volume identity deliberately preserves the common legacy volume name so an ordinary upgrade does not silently attach an empty database.
For a confirmed fresh installation only:
export QUAXAR_DATA_VOLUME=quaxar-data
docker compose up -d
Do not select a new volume name merely to rename existing storage. Confirm the physical volume with docker volume ls, preserve a rollback copy, and migrate data through a planned, verified process.
Do not mount an old xrpld.cfg unchanged. Start with the packaged Quaxar Docker configuration and merge reviewed credentials and settings. Legacy data paths such as /var/lib/xrpld, logfile paths, and relative validator-file references belong to the old container layout.
Start with a small explicit Testnet configuration
[server]
port_rpc_admin_local
port_peer
[port_rpc_admin_local]
port = 5005
ip = 127.0.0.1
protocol = http,ws
admin = 127.0.0.1
[port_peer]
port = 51235
ip = 0.0.0.0
protocol = peer
[node_size]
medium
[node_db]
type = NuDB
path = /var/lib/quaxar/db/nudb
online_delete = 256
[ledger_history]
256
[validator_list_sites]
https://vl.ripple.com
[validator_list_keys]
ED2677ABFFD1B33AC6FBC3062B71F1E8397C1505E1C42C64D11AD1B28FF73F4734
Keep admin RPC on loopback or another explicitly trusted interface. If you configure full history, set online_delete = 0 and provision storage accordingly. Numeric history cannot exceed the online-deletion interval.
Validate configuration before startup:
quaxar config --conf /etc/quaxar/quaxar.cfg
quaxar doctor --conf /etc/quaxar/quaxar.cfg
Use explicit Quaxar paths and identity
Start directly for an initial check:
quaxar --conf ./quaxar.cfg
A Linux service should use Quaxar paths rather than the legacy xrpld identity:
[Unit]
Description=Quaxar XRP Ledger server
After=network-online.target
Wants=network-online.target
[Service]
Type=simple
User=quaxar
Group=quaxar
ExecStart=/usr/local/bin/quaxar --conf /etc/quaxar/quaxar.cfg
Restart=on-failure
RestartSec=10
LimitNOFILE=65536
Environment=RUST_LOG=info
[Install]
WantedBy=multi-user.target
sudo systemctl daemon-reload
sudo systemctl enable --now quaxar
Do not expose admin RPC to the public internet. Restrict SSH, preserve configuration and validator material as protected files, and keep rollback artifacts when upgrading.
One green response is not enough
health is a liveness and RPC-reachability check. It can succeed while the node is still synchronizing. Sample the following commands across several ledger closes:
quaxar health
quaxar sync-status
quaxar server-info
quaxar ledger-closed
quaxar ledger-current
quaxar fetch-info
quaxar get-counts
quaxar db-stats
Look for a current validated ledger, continuing sequence advancement, reasonable validated age, stable peers, no repeated recovery loop, and no restart or fatal-error pattern. A single full or proposing sample does not prove sustained readiness.
sync-status reports the current connected, syncing, tracking, or full state. It does not provide a reliable universal percentage or completion ETA.
Inspect the node through the CLI and RPC
| Command | Purpose |
|---|---|
quaxar cli | Open the interactive operator shell |
quaxar peers | Inspect connected peers and protocol details |
quaxar fetch-info | Inspect coordinator phase, anchors, sessions, and recovery counters |
quaxar get-counts | Inspect cache, ledger, allocator, and NodeStore counters |
quaxar db-stats | Inspect NuDB file sizes and database counters |
quaxar log-level debug | Change the runtime log filter |
quaxar rpc METHOD '{}' | Pass a JSON object to any registered RPC command |
quaxar stop | Request graceful shutdown |
For example:
quaxar rpc account_info '{"account":"rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh","ledger_index":"validated"}'
Quaxar records selected metrics internally, but normal package and Compose bootstrap do not expose an HTTP /metrics endpoint.
Export online, import offline
quaxar export-snapshot --output /path/to/quaxar.snapshot
Export traverses NodeStore while the node remains online and reports the job outcome. Import must run offline against the intended storage path:
quaxar load-snapshot --input /path/to/quaxar.snapshot --conf /etc/quaxar/quaxar.cfg
Import verifies integrity and loads through the bulk NuDB path. Preserve the existing database and configuration until the imported node has been checked across repeated ledger closes.
Diagnose the state, not only the label
- Stays connected
- Check trusted validator-list status, peer quality, validated-ledger age,
fetch-info, clock synchronization, disk latency, and recovery logs. A connected state is not caused only by validator-list failure. - No peers
- Confirm outbound connectivity, advertised endpoint settings, the local listener, and firewall policy for TCP 51235. An inbound listener is useful but outbound peers can still establish connectivity.
- Slow or unstable sync
- Inspect SSD latency and queueing, peer churn, acquisition counters, available memory, and restarts. Do not raise
node_sizeblindly; larger caches and concurrency can increase pressure. - History is missing
- Check
ledger_historyandonline_delete. RPC can only return data retained by the configured node. - Time-related validation rejection
- Verify the host's NTP service and clock offset. Do not derive local wall time from validator signatures.
- Windows service setup
- The installer verifies the binary, but Windows service operation is not qualified. Run with an explicit configuration and supervise it using tooling you control.
Use quaxar doctor first, then consult the syncing guide, CLI reference, and issue tracker. Include version, configuration profile, state samples, logs, and exact reproduction steps in a report.