CLI for XRPL local development and scripting. Spin up a local sandbox with pre-funded accounts, run scripts, manage snapshots, and interact with remote testnet/devnet endpoints from one tool.
Development and testing only. xrpl-up is built for use with a local sandbox, Devnet, or Testnet. It is not designed or supported for XRPL Mainnet or real XRP or any other tokens. It does not implement production key management — e.g., seeds are stored unencrypted and can be passed on the command line — and several commands are irreversible. The optional Claude Code plugin builds and submits transactions from natural-language input using an AI model; its output may be wrong, so review commands before running them. Use only keys and accounts you're prepared to lose. Provided under the MIT License, "AS IS" and without warranty; to the maximum extent permitted by law, Ripple accepts no liability of any kind, including for any loss of funds, keys, or data, arising from use of this tool on any network.
- Node.js v22 or later
- Docker (required for the local sandbox — not needed when targeting
--network testnet/devnet)
From npm (global):
# Latest stable release
npm install -g xrpl-up
# Beta release
npm install -g xrpl-up@beta-experimentalFrom source (development):
git clone https://github.com/ripple/xrpl-up.git
cd xrpl-up
npm install
npm run build
npm linkxrpl-up includes a Claude Code plugin that lets you interact with the XRP Ledger using natural language.
Install:
claude plugin marketplace add ripple/xrpl-up
claude plugin install xrpl-up@xrpl-up --scope userUsage: In a Claude Code session, use /xrpl-up:xrpl-up followed by what you want to do:
/xrpl-up:xrpl-up start local sandbox
/xrpl-up:xrpl-up show status
/xrpl-up:xrpl-up list pre-funded accounts
/xrpl-up:xrpl-up create an XRP/USD AMM trading pair on local
/xrpl-up:xrpl-up swap 10 XRP for USD using account 2
/xrpl-up:xrpl-up show balance for account 2
/xrpl-up:xrpl-up stop the sandbox
Claude translates your request into the correct xrpl-up commands, executes them, and explains the result in plain language.
xrpl-up has two command sets:
- Sandbox operation commands: environment lifecycle and state control (
start,stop,reset,snapshot,status,accounts,logs,config,run,init,faucet,amendment). - XRPL interaction commands: transaction submission and account management (
wallet,account,payment,trust,offer,amm,nft,mptoken,escrow,check,channel,ticket,clawback,credential,did,multisig,oracle,deposit-preauth,permissioned-domain,vault).
XRPL interaction commands are intentionally non-exhaustive. For complex or production-grade flows, use xrpl.js directly or call rippled RPC endpoints.
Starts a local sandbox (via Docker) and funds accounts.
Two modes are available:
| Mode | Command | Ledger close | State | Best for |
|---|---|---|---|---|
| Standalone (default) | xrpl-up start |
Instant | Ephemeral | CI, quick tests, scripting |
| Local network | xrpl-up start --local-network |
~4s (consensus) | Persistent | Long dev sessions, snapshots |
Standalone is a single rippled node with instant ledger closes. State is wiped on each start. Use this for CI pipelines, quick sanity checks, and any workflow where you don't need state to survive restarts.
Local network (--local-network) runs a 2-node private consensus network. Ledgers close via real consensus (~4s), state persists across stop/start, and snapshots are supported. Use this when you're building an app over hours or days against a stable environment — set up AMM pools, trust lines, and funded accounts once, snapshot the state, and roll back when you need to.
Switching from
--local-networkback to standalone replaces your wallet records. Standalone clears the account store on start, and those seeds are the only way to reach accounts on the persisted local-network ledger. If the local-network volumes still hold data,startwarns first and asks for confirmation — save a snapshot beforehand if you want that state back. In a non-interactive shell (CI) it prints the warning and continues rather than blocking on input.
Once started (either mode), interaction commands default to the local sandbox — no flag needed. To target something else, pass --network testnet, --network devnet, or --network <wss://...>:
# Start the sandbox once (either mode)
xrpl-up start # standalone: fast, ephemeral
xrpl-up start --local-network # persistent, real consensus
# `xrpl-up start` already funded 10 local accounts and printed their
# addresses — run `xrpl-up accounts` to list them again.
xrpl-up account info rMyAddress
# testnet/devnet addresses aren't auto-funded like the local sandbox —
# get one first with `xrpl-up faucet --network testnet`, then query it:
xrpl-up account info rMyTestnetAddress --network testnet
xrpl-up account info rMyDevnetAddress --network devnet
# any other rippled node you already have an account on
xrpl-up account info rMyAddress --network wss://your-own-rippled-server:6006
# Or set XRPL_NETWORK once instead of passing --network on every command —
# applies everywhere a network concept exists, sandbox lifecycle commands included
export XRPL_NETWORK=testnet
xrpl-up faucet --json # funds on testnet via XRPL_NETWORK, no --network needed
xrpl-up payment --to rDest --amount 10 --seed <seed from faucet output> # also uses testnetRun xrpl-up start --help for all options.
Note: The local sandbox is a clean-room environment — ledger starts at index 1 with only the genesis wallet. It is not a mirror of the public ledger. What matters is that transaction validation rules match the rippled version in use.
AMM / XLS-30 and MPT / XLS-33: Both AMM and MPT (Multi-Purpose Token) are enabled by default in the local sandbox. xrpl-up uses the
[amendments]section inrippled.cfgto force-enable the required amendments at genesis creation. No voting or ledger advancement is needed.
Hardware: A typical developer laptop is sufficient (~2 GB RAM, ~500 MB disk for the Docker image). The local sandbox has no internet requirement and only processes transactions you submit locally.
Stops the local Docker sandbox stack.
xrpl-up stopWipes all local sandbox state and starts with a clean slate. Useful after a --local-network session or when you want to discard all ledger state and funded accounts.
# Wipe containers, ledger volume, accounts, and manually enabled amendments — keep snapshots
xrpl-up reset
# Wipe everything including saved snapshots
xrpl-up reset --snapshots
# Keep amendments you enabled with `amendment enable`
xrpl-up reset --keep-amendmentsWhat xrpl-up reset removes:
- Running Docker containers (
docker compose down) - Ledger volumes (
xrpl-up-local-dbandxrpl-up-local-peer-dbin consensus mode) - Funded sandbox accounts
- Amendments you added with
amendment enable— so the next start really is factory state, not silently carrying them forward. Pass--keep-amendmentsto preserve them. - With
--snapshots: all saved snapshots
Snapshots are kept by default since they are the only way to recover a previous state. Use
--snapshotsonly when you want a complete wipe.
Lists funded accounts with their live XRP balances.
xrpl-up accounts # local (default)
xrpl-up accounts --network testnet
# Query any address directly
xrpl-up accounts --address rSomeAddress...Funds a new or existing account via the local sandbox faucet or a public testnet/devnet faucet. Funded accounts are automatically saved to ~/.xrpl-up/{network}-accounts.json so they appear in xrpl-up accounts.
# Generate and fund a new wallet on the local sandbox (default)
xrpl-up faucet
# Fund an existing wallet by seed on the local sandbox
xrpl-up faucet --seed sn3nxiW7v8KXzPzAqzyHXbSSKNuN9
# Use the public Testnet faucet
xrpl-up faucet --network testnetFaucet targets supported by this command:
local(default),testnet,devnet.
Shows rippled server info and faucet health.
xrpl-up status # local (default)
xrpl-up status --network testnetDisplays rippled version, current ledger index, and faucet availability. For the local sandbox it also shows which mode is running (standalone vs --local-network).
Runs a TypeScript or JavaScript script with the network URL injected as environment variables. TypeScript is executed directly via tsx (no build step needed).
Wrap your script body in an
async function, don't use top-levelawait—tsxcompiles.tsfiles to CJS unless the project'spackage.jsonsets"type": "module"(the configxrpl-up initscaffolds does set this, but a script dropped into an arbitrary project may not have it), and top-levelawaitisn't valid CJS. The example below follows this pattern for exactly that reason.
xrpl-up run scripts/example-payment.ts --network local
xrpl-up run scripts/my-script.js --network testnetInjected environment variables:
| Variable | Description |
|---|---|
XRPL_NETWORK |
Network key (e.g. local, testnet) |
XRPL_NETWORK_URL |
WebSocket URL (e.g. ws://localhost:6006) |
XRPL_NETWORK_NAME |
Human-readable name |
Example script:
// scripts/send-payment.ts
import { Client, xrpToDrops, Wallet } from 'xrpl';
async function main() {
const client = new Client(process.env.XRPL_NETWORK_URL!);
await client.connect();
const sender = Wallet.fromSeed('sn3nxiW7v8KXzPzAqzyHXbSSKNuN9'); // from xrpl-up accounts
await client.submitAndWait(
{
TransactionType: 'Payment',
Account: sender.address,
Amount: xrpToDrops('10'),
Destination: 'rDestinationAddress...',
},
{ wallet: sender }
);
console.log('Payment sent!');
await client.disconnect();
}
main().catch(console.error);Streams Docker Compose logs from the running local sandbox.
xrpl-up logs # all services
xrpl-up logs rippled # rippled only (useful with --debug)
xrpl-up logs faucet # faucet server onlyManage AMM pools (XLS-30). AMM is enabled by default in the local sandbox — no extra configuration needed.
See AMM — Automated Market Maker for a full walkthrough.
Prerequisite: Enable
DefaultRippleon the issuer account before creating a pool (xrpl-up account set --set-flag defaultRipple), oramm createwill fail.
Run xrpl-up amm create --help / amm info --help / amm deposit --help / amm withdraw --help / amm bid --help / amm vote --help / amm delete --help / amm clawback --help for options.
NFT lifecycle operations (XLS-20).
See NFT Lifecycle (XLS-20) for a full walkthrough.
Run xrpl-up nft mint --help / nft burn --help / nft modify --help / nft offer create --help / nft offer accept --help / nft offer cancel --help / nft offer list --help for options. To list NFTs owned by an account, use xrpl-up account nfts <address>.
Payment channel operations. Payment channels allow fast, off-chain micropayments with on-chain settlement.
See Payment Channel for a full walkthrough, and Payment Channel Settlement Lifecycle for a deeper dive on off-chain claims and settlement.
Run xrpl-up channel create --help / channel fund --help / channel sign --help / channel verify --help / channel claim --help / channel list --help for options. sign/verify are offline (no on-chain transaction); claim submits the on-chain PaymentChannelClaim.
Multi-Purpose Token (MPT / XLS-33) operations. MPT is enabled automatically in the local sandbox (the --network default — no flag needed); pass --network testnet for Testnet.
See MPT — Multi-Purpose Token (XLS-33) for a full walkthrough, and MPT Policy Lifecycle: RequireAuth + Lock + Clawback for a deeper dive on authorization, locking, and clawback.
Run xrpl-up mptoken issuance create --help / issuance destroy --help / issuance set --help / issuance get --help / issuance list --help / mptoken authorize --help for options. Send MPT payments via xrpl-up payment with amount format <amount>/<issuanceId>; query holdings via xrpl-up account mptokens.
DEX (decentralized exchange) offer operations — a built-in order book, no smart contracts needed.
See DEX — Decentralized Exchange for a full walkthrough.
Run xrpl-up offer create --help / xrpl-up offer cancel --help for options. To list open offers, use xrpl-up account offers <address> (there's no offer list).
Trust line operations (renamed from trustline). Use xrpl-up account trust-lines to query existing trust lines.
See Issued Token (IOU / Trust Line) for a full walkthrough.
Run xrpl-up trust set --help for options. Query trust lines with xrpl-up account trust-lines <address>; enable rippling on new trust lines with xrpl-up account set --set-flag defaultRipple.
Escrow operations. Escrows lock XRP until a time condition or crypto-condition is met.
See Escrow for a full walkthrough, and Escrow with Crypto-Condition for a deeper dive on crypto-conditions.
Run xrpl-up escrow create --help / escrow finish --help / escrow cancel --help / escrow list --help for options.
Check operations. Checks are a deferred payment mechanism — the sender authorizes a maximum amount that the destination can cash at any time before expiry.
See Checks — Deferred Payments for a full walkthrough.
Run xrpl-up check create --help / check cash --help / check cancel --help / check list --help for options.
Manage DepositPreauth entries (renamed from depositpreauth). Required when an account has the depositAuth flag set (enable it with xrpl-up account set --set-flag depositAuth).
See Deposit Authorization (DepositPreauth) for a full walkthrough.
| Subcommand | Description |
|---|---|
set --authorize <address> |
Pre-authorize a specific sender |
set --unauthorize <address> |
Revoke a pre-authorization |
set --authorize-credential <issuer> --credential-type <type> |
Pre-authorize any sender holding a matching credential |
set --unauthorize-credential <issuer> --credential-type <type> |
Revoke a credential-based pre-authorization |
list <address> |
List all pre-authorizations for an account |
Ticket operations. Tickets reserve sequence numbers, allowing transactions to be submitted out-of-order or in parallel — useful for multi-sig workflows.
See Tickets — Out-of-Order and Parallel Transactions for a full walkthrough, and Multi-Sig + Tickets: Out-of-Order Parallel Signing for a deeper dive combining tickets with multi-signing.
Reserves 1–250 sequence numbers as tickets. Returns the allocated TicketSequence numbers.
Lists existing tickets (reserved sequence numbers) for an account. <address> is required.
Usage: To use a ticket in a transaction, set
Sequence = 0andTicketSequence = <n>.
Issuer clawback operations. The issuer account must have clawback enabled before use.
Prerequisites:
- IOU clawback: Enable
asfAllowTrustLineClawbackwithxrpl-up account set --allow-clawback --confirm --seed <issuer-seed>- MPT clawback: The issuance must have been created with
xrpl-up mptoken issuance create --flags can-clawback
See Clawback — Reclaim Issued Tokens for a full walkthrough.
Run xrpl-up clawback --help for options. The signing wallet must be the token issuer.
Wallet management — create, import, and manage XRPL key pairs in a local keystore (~/.xrpl/keystore/ by default).
| Subcommand | Description |
|---|---|
new |
Generate a new random wallet |
new-mnemonic |
Generate a wallet from a BIP39 mnemonic |
import |
Import a wallet by seed or mnemonic |
list |
List all wallets in the keystore |
address |
Derive the address from a seed, mnemonic, or private key (no keystore access) |
private-key |
Derive the private key from a seed or mnemonic (--seed/--mnemonic; no keystore access) |
public-key |
Derive the public key from a seed, mnemonic, or private key (no keystore access) |
sign |
Sign arbitrary data |
verify |
Verify a signature |
alias |
Set or clear a human-readable alias for a wallet |
fund |
Fund a wallet from the testnet or devnet faucet |
change-password |
Change keystore encryption password |
decrypt-keystore |
Export keystore contents (decrypt to plaintext) |
remove |
Remove a wallet from the keystore |
xrpl-up wallet new
xrpl-up wallet fund rMyAddress --network testnet # only testnet/devnet have a wallet-fund faucet
xrpl-up wallet listAccount query and management. The account command provides both query subcommands and mutation subcommands.
| Subcommand | Description |
|---|---|
info |
Account flags, sequence, balance, signer list |
balance |
XRP and IOU balances |
transactions |
Recent transaction history (replaces tx list) |
offers |
Open offers on the DEX |
trust-lines |
Trust lines (replaces trustline list) |
channels |
Open payment channels |
nfts |
NFTs owned by the account |
mptokens |
MPT balances held by the account |
set |
Enable/disable account flags (replaces accountset set/clear) |
set-regular-key |
Set or remove the regular key |
delete |
Delete the account |
xrpl-up account info rMyAddress
xrpl-up account transactions rMyAddress
xrpl-up account trust-lines rMyAddress
xrpl-up account balance rMyAddress --network testnetEnable or disable account flags (replaces the old accountset command).
xrpl-up account set --set-flag requireDestTag --seed sn3nxiW7...
xrpl-up account set --clear-flag requireDestTag --seed sn3nxiW7...| Flag name | Description |
|---|---|
requireDestTag |
Require a destination tag on all incoming payments |
requireAuth |
Require the issuer to authorize all trust lines |
disallowXRP |
Signal that this account does not accept direct XRP payments |
disableMaster |
Disable the master key (use only after setting a signer list) |
noFreeze |
Permanently give up the ability to freeze trust lines (irreversible) |
globalFreeze |
Freeze all trust lines at once (issuers) |
defaultRipple |
Enable rippling on all new trust lines (issuers) |
depositAuth |
Only accept payments from pre-authorized senders |
For IOU clawback, use --allow-clawback --confirm (irreversible, not a --set-flag).
Note: Set a signer list before disabling the master key (
disableMaster). For signer list management, usexrpl-up multisig. To query account settings, usexrpl-up account info.
Recent transaction history (replaces the old tx list command):
xrpl-up account transactions rMyAddress...
xrpl-up account transactions rMyTestnetAddress... --network testnet # fund one first: xrpl-up faucet --network testnetSend a Payment transaction. Alias: xrpl-up send.
See XRP Payment for a full walkthrough.
Run xrpl-up payment --help for all options.
Multi-signature signer list management (replaces accountset signer-list).
See Multi-Sig + Tickets: Out-of-Order Parallel Signing for a full walkthrough.
Run xrpl-up multisig set --help / multisig delete --help / multisig list --help for options.
Manage on-chain verifiable credentials on the XRP Ledger (independent of the did command — credentials reference a subject account, not a DID).
xrpl-up credential --helpManage Decentralized Identifiers (DID) on the XRP Ledger.
xrpl-up did --helpPrice oracle management on the XRP Ledger.
xrpl-up oracle --helpManage Permissioned Domains on the XRP Ledger (XLS-80d).
xrpl-up permissioned-domain --helpManage vaults on the XRP Ledger.
See Single-Asset Vault (XLS-65 / SingleAssetVault) for a full walkthrough.
Run xrpl-up vault create --help / vault set --help / vault deposit --help / vault withdraw --help / vault delete --help / vault clawback --help for options.
Inspect and manage XRPL amendments in the local sandbox. The local sandbox starts with a set of amendments baked into its genesis config; use enable to queue additional amendments (takes effect after xrpl-up reset && xrpl-up start).
Devnet compatibility: XRPL Devnet may enable pre-release amendments that are not yet supported by the rippled version bundled with this tool. If you encounter unsupported transaction types or behaviors on devnet, check whether the amendment is available in the local sandbox with
xrpl-up amendment list --diff devnet.
Local only for mutations:
enablewrites to the genesis config and only applies to the local sandbox.listandinfowork on any network.
Lists all amendments known to the target node with their enabled/supported status.
# List amendments on the local sandbox
xrpl-up amendment list
# List disabled amendments only
xrpl-up amendment list --disabled
# Side-by-side diff: local vs testnet
xrpl-up amendment list --diff testnet
# List amendments on testnet
xrpl-up amendment list --network testnetShows full details for a single amendment. Accepts the amendment name or a hash prefix.
xrpl-up amendment info PermissionedDomains
xrpl-up amendment info AMM --network testnet
xrpl-up amendment info A730EB18 # hash prefix lookupQueues one or more amendments for genesis activation on the local sandbox. Requires a reset to take effect — you'll be prompted automatically (once, for the whole batch), or pass --auto-reset to skip the prompt.
xrpl-up amendment enable PermissionedDomains
# ⚠ Activating this amendment requires a full node reset.
# Ledger data and funded accounts will be wiped. Saved snapshots are kept.
# Reset and restart the local node now? [y/N]
# Enable multiple amendments together — one queue, one reset:
xrpl-up amendment enable SingleAssetVault DynamicMPT LendingProtocol
# Skip the prompt and reset automatically:
xrpl-up amendment enable PermissionedDomains --auto-resetAmendments you enable stay in effect across restarts until you xrpl-up reset (which clears them — use reset --keep-amendments to keep them).
Works in both modes, but takes longer under
--local-network.enablechanges the genesis config, which only takes effect when a genesis ledger is created. In standalone mode,xrpl-up reset && xrpl-up startpicks it up in seconds. In--local-networkmode, queuing an amendment makes the next start build a real 2-node consensus genesis from scratch instead of resuming the pre-built ledger — this takes roughly a minute (real peer discovery + consensus bootstrap) instead of ~5s, and it starts a new ledger lineage.That lineage change is why
xrpl-up snapshot save/restorerecords which amendment set each snapshot's genesis was built with: restoring a snapshot taken before anamendment enableautomatically reverts the sandbox's amendment config to match it (and vice versa) — the ledger and the config always agree after a restore. Seexrpl-up resetabove for undoing anenablewithout a snapshot.
Scaffolds a new project with config, TypeScript setup, and example scripts. Prompts for a default network; choose local for local-sandbox-ready scripts out of the box.
Prerequisite:
xrpl-upmust be available on PATH. Install globally vianpm install -g xrpl-upor from source withnpm link(see Installation). The generatedpackage.jsonscripts (npm run start,npm run accounts) callxrpl-upfrom PATH and do not re-install it locally.
xrpl-up init
xrpl-up init my-projectGenerated files:
my-project/
├── xrpl-up.config.js # Network configuration defaults + custom network support
├── package.json
├── tsconfig.json
├── .gitignore
└── scripts/
├── example-payment.ts # Send XRP + verify sender/receiver balances
├── example-token.ts # Issue a custom IOU token (DefaultRipple + TrustSet + Payment)
├── example-dex.ts # Place a DEX order, list it, cancel it (⚠ needs counterparty to fill)
├── example-nft.ts # Full NFT lifecycle: mint → sell offer → accept → burn
├── example-mpt.ts # Issue a Multi-Purpose Token: create issuance → opt in → transfer
└── example-amm.ts # Create an AMM pool and execute a swap (local only)
When local is selected as the default network, the example scripts use the local faucet (http://localhost:3001) instead of client.fundWallet(). example-amm.ts is only scaffolded for local mode since AMM is enabled by default there. The local example-dex.ts controls both sides of the trade so the order fills immediately; the remote variant places the order, lists it, then cancels it with a note that a real counterparty is required for fills.
Save and restore ledger state checkpoints. Useful for complex test setups (AMM pools, issued currencies, multi-step escrows) where re-running setup from scratch is expensive.
Requires
--local-networkmode. Snapshots tar the named Docker volume (xrpl-up-local-db) into a self-contained.tar.gzfile. Restore recreates the volume from that tarball — the volume does not need to have survived between runs. In standalone mode (default), there is no persistent volume to snapshot.
# Save the current ledger state
xrpl-up snapshot save before-amm
# List saved snapshots
xrpl-up snapshot list
# Restore to a previous checkpoint (~5–10s: rippled + faucet stop, volume restored, both restart)
xrpl-up snapshot restore before-ammEach snapshot saves the ledger volume, a copy of the account store (local-accounts.json), and the manually enabled amendments (amendment enable) the ledger's genesis was built with. snapshot save waits for every account in the store to appear on a validated ledger before archiving, so the tarball and the account sidecar always agree — xrpl-up accounts reflects exactly the accounts that existed at snapshot time. snapshot restore verifies this after restoring and fails loudly if an account is missing, rather than leaving a silently inconsistent sandbox. The snapshot list output shows +accounts for any snapshot that includes the account sidecar.
Restoring across an amendment enable: enabling an amendment rebuilds the genesis ledger (see amendment enable above), which starts a new ledger lineage — a snapshot taken before that change belongs to a different lineage than the sandbox now running. snapshot restore detects this automatically and reverts the amendment config to match the snapshot being restored, so the ledger and the config always agree afterward. No special handling needed on your part — just restore.
Typical workflow:
xrpl-up start --local-network
# Run expensive setup (fund accounts, create AMM pool, set trust lines...)
xrpl-up faucet
# `snapshot save` waits for accounts to be validated before archiving — no manual wait needed.
xrpl-up snapshot save after-setup
# Run tests, mutate state...
# Roll back to known-good state and run again
xrpl-up snapshot restore after-setup
xrpl-up accounts # shows accounts as of snapshot timeFresh start from a snapshot after reset:
xrpl-up reset # wipe everything
xrpl-up start --local-network # start sandbox (creates new volume)
xrpl-up snapshot restore after-setup # restore saved state
xrpl-up accounts # snapshot accounts restoredSnapshots are stored at ~/.xrpl-up/snapshots/ and are portable — copy them to any machine and restore. Each snapshot produces three files:
<name>.tar.gz— compressed node DB volume (typically 5–100 MB)<name>-accounts.json— account store at snapshot time<name>-meta.json— snapshot metadata (format version)
Manage and validate rippled configuration.
Prints the auto-generated rippled.cfg to stdout, or writes it to a file. Use this as a starting point for a custom config.
# Print to stdout
xrpl-up config export
# Save to file
xrpl-up config export --output my-rippled.cfg
# Export with debug log level
xrpl-up config export --debug --output my-rippled.cfgValidates a rippled.cfg for compatibility with xrpl-up before you use it. Checks for blocking errors, warnings, and prints recommendations.
xrpl-up config validate my-rippled.cfgWhat is checked:
| Severity | Check |
|---|---|
| Error | WebSocket port must be 6006 (hardcoded by xrpl-up) |
| Error | WebSocket ip must be 0.0.0.0 (faucet container access) |
| Error | WebSocket admin must include 0.0.0.0 (admin commands) |
| Error | [ssl_verify] must be 0 |
| Error | [node_db] and [database_path] must be present |
| Warning | node_size = large/huge risks OOM on developer laptops |
| Warning | send_queue_limit < 100 may throttle heavy test suites |
| Recommendation | Add send_queue_limit = 500 for AMM testing |
Exit code 1 if any errors are found, 0 otherwise.
Custom config workflow:
# 1. Export the default as a starting point
xrpl-up config export --output my-rippled.cfg
# 2. Edit — e.g. change node_size, send_queue_limit, log level
$EDITOR my-rippled.cfg
# 3. Validate before starting
xrpl-up config validate my-rippled.cfg
# 4. Start with the custom config
xrpl-up start --config my-rippled.cfgValidation also runs automatically when --config is passed to xrpl-up start — the sandbox will not start if there are blocking errors.
--configalways runs standalone. A customrippled.cfgreplaces the generated config entirely, including the 2-node consensus setup —--configand--local-networkcannot be combined, andxrpl-up startrejects that combination with an error.
Docker is available on all GitHub-hosted runners (ubuntu-latest, macos-latest).
Standalone mode (the default) is recommended for CI — it starts in seconds, has instant ledger closes, and needs no volume management.
# .github/workflows/test.yml
steps:
- run: xrpl-up start
- run: npm test
- run: xrpl-up stop
if: always()First run:
xrpl-up startautomatically pulls the rippled Docker image (~1 GB) on first run and shows download progress. Subsequent runs reuse the cached image.
xrpl-up.config.js in your project root defines named networks used by run, accounts, status, and remote start/faucet flows:
// xrpl-up.config.js
export default {
networks: {
local: {
url: 'ws://localhost:6006',
name: 'Local rippled (Docker)',
},
testnet: {
url: 'wss://s.altnet.rippletest.net:51233',
name: 'XRPL Testnet',
},
devnet: {
url: 'wss://s.devnet.rippletest.net:51233',
name: 'XRPL Devnet',
},
},
defaultNetwork: 'local',
accounts: {
count: 10,
},
};Requires "type": "module" in your project's package.json (the config xrpl-up init scaffolds already has this).
Add any custom WebSocket endpoint as a named network and use it with --network <name> on run/accounts/status/faucet/start. XRPL interaction commands (account, payment, trust, etc.) don't read this config — their --network only understands local/testnet/devnet or a raw wss://... URL passed directly.
| Key | Endpoint | Faucet |
|---|---|---|
local |
ws://localhost:6006 |
Yes (genesis wallet, no limits) |
testnet |
wss://s.altnet.rippletest.net:51233 |
Yes (rate limited) |
devnet |
wss://s.devnet.rippletest.net:51233 |
Yes (rate limited) |
Local vs Testnet: The local sandbox is designed to cover most development workflows without needing testnet. Local mode has no transaction throttling, no faucet rate limits, and full reset control. Standalone mode (default) has instant ledger closes;
--local-networkhas ~4s consensus closes but adds persistence and snapshot support. Use testnet for final validation against real network state.
Account seeds, generated configs, and snapshots are stored at:
~/.xrpl-up/
local-accounts.json # funded account seeds (local mode)
testnet-accounts.json # funded account seeds (testnet)
devnet-accounts.json # funded account seeds (devnet)
docker-compose.yml # generated on each start
rippled.cfg # standalone mode only (or custom via --config)
rippled-node1.cfg # --local-network mode only
rippled-node2.cfg # --local-network mode only
validators.txt # standalone: written once if missing (empty); --local-network: regenerated every start (validator keys)
genesis-amendments.txt # queued by `amendment enable`, merged into the config above
genesis-lineage.txt # fingerprint of the current --local-network genesis (see amendment enable)
local-network-image.txt # records which --image last started the --local-network volumes
snapshots/
before-amm.tar.gz # node DB volume snapshot (--local-network mode)
before-amm-accounts.json # account store at snapshot time
before-amm-meta.json # snapshot metadata
after-setup.tar.gz
after-setup-accounts.json
after-setup-meta.json
xrpl-up start always recreates accounts fresh unless --local-network is used. xrpl-up faucet appends to the account store regardless of mode. xrpl-up reset clears the account store and Docker volume in one command.
MIT
