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.
- Node.js v20 or later
- Docker (required for
--localmode only)
From npm (global):
npm install -g xrpl-up
Not available yet: package has not been published to npm.
From source (development):
git clone https://github.com/ripple/xrpl-up.git
cd xrpl-up
npm install
npm run build
npm link# Scaffold a new project (select "local" as default network)
xrpl-up init my-project
cd my-project && npm install
# Start a local sandbox with 10 pre-funded accounts (local is the default)
xrpl-up start
# In another terminal — list accounts with live balances
xrpl-up accounts
# Run a script against the local sandbox
xrpl-up run scripts/example-payment.ts
# Create an AMM pool in one command (local by default)
xrpl-up amm create XRP USD
# Mint a transferable NFT
xrpl-up nft mint --uri https://example.com/meta.json --transferable
# Create an MPT issuance (Multi-Purpose Token)
xrpl-up mptoken issuance create --node local --max-amount 1000000 --asset-scale 6
# Open a payment channel
xrpl-up channel create rDestination... 10xrpl-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.
All XRPL interaction commands accept a global --node option that sets the network target:
| Value | Connects to |
|---|---|
testnet (default) |
XRPL Testnet |
devnet |
XRPL Devnet (may include pre-release amendments not yet supported by this tool) |
local |
Local sandbox (ws://localhost:6006) |
wss://... |
Any custom WebSocket URL |
# Use local sandbox (start first with: xrpl-up start)
xrpl-up account info rMyAddress --node local
# Use testnet (default — no --node needed)
xrpl-up account info rMyAddress
# Use a custom WebSocket URL
xrpl-up account info rMyAddress --node ws://my-node:6006
# Set via environment variable
export XRPL_NODE=local
xrpl-up payment --to rDest --amount 10--node only applies to XRPL interaction commands; sandbox lifecycle commands (start, stop, reset, etc.) use --local / --local-network for the local sandbox and --network for remote networks.
Starts a sandbox environment and funds accounts. Supports a fully local rippled node (via Docker) or a connection to XRPL Testnet/Devnet.
Two local 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.
# Quick sandbox — fast, ephemeral (CI, scripting, sanity tests)
xrpl-up start
# Persistent local network — real consensus, snapshots, survives restarts
xrpl-up start --local-network
# Connect to Testnet instead
xrpl-up start --network testnet
# Connect to Devnet instead
xrpl-up start --network devnetLocal mode options:
| Flag | Default | Description |
|---|---|---|
--local |
— | Run a local rippled node via Docker |
--local-network |
off | Start a 2-node consensus network (persistent state, snapshot support) |
--image <image> |
xrpllabsofficial/xrpld:latest |
rippled Docker image |
--ledger-interval <ms> |
1000 |
Auto-advance ledger every N milliseconds (standalone only) |
--no-auto-advance |
— | Disable automatic ledger closing |
--no-secrets |
— | Suppress seeds and private keys from stdout (auto-enabled with --detach) |
--debug |
— | Enable rippled debug logging |
--detach |
— | Start in background and exit (for CI/CD) |
--config <path> |
— | Use a custom rippled.cfg instead of the auto-generated one |
--exit-on-crash |
— | Exit with code 134 when rippled crashes (SIGABRT); disables container auto-restart |
-a, --accounts <n> |
10 |
Number of accounts to pre-fund |
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, and accounts — keep snapshots
xrpl-up reset
# Wipe everything including saved snapshots
xrpl-up reset --snapshotsWhat xrpl-up reset removes:
- Running Docker containers (
docker compose down) - Ledger volumes (
xrpl-up-local-dbandxrpl-up-local-peer-dbin consensus mode) ~/.xrpl-up/local-accounts.json- With
--snapshots:~/.xrpl-up/snapshots/and all snapshot files
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.
Runs a TypeScript or JavaScript script with the network URL injected as environment variables. TypeScript is executed directly via tsx (no build step needed).
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.
Creates a ready-to-use AMM pool with fresh funded accounts. Automatically handles issuer creation, trust lines, token issuance, and pool creation.
# XRP/USD pool with defaults (100 XRP, 100 USD, 0.5% fee)
xrpl-up amm create XRP USD
# Custom amounts and fee
xrpl-up amm create XRP USD --amount1 500 --amount2 1000 --fee 0.3
# IOU/IOU pool (creates two separate issuers)
xrpl-up amm create USD EUR --amount1 100 --amount2 100
# On testnet
xrpl-up amm create XRP USD -n testnet| Flag | Default | Description |
|---|---|---|
--amount1 <n> |
100 |
Amount of asset1 to deposit |
--amount2 <n> |
100 |
Amount of asset2 to deposit |
--fee <pct> |
0.5 |
Trading fee in % (max 1%) |
The command prints the exact amm info query to use afterward, with the issuer address filled in.
Note: For non-XRP assets,
amm createmints a fresh token on your local ledger. The issuer address is randomly generated — it has no relation to any real-world or testnet issuer.
Shows current pool state: reserves, LP token supply, trading fee, and AMM account.
# Query by asset pair (use the issuer address printed by amm create)
xrpl-up amm info XRP USD.rIssuerAddress
# Query by AMM account address
xrpl-up amm info --account rAMMAccountAddress
# Query on testnet
xrpl-up amm info XRP USD.rHb9... -n testnetAsset format: XRP for native currency, CURRENCY.rIssuerAddress for IOUs (e.g. USD.rHb9CJ...).
NFT lifecycle operations (XLS-20). Supports mint, list, buy/sell offers, and burn on local sandbox or remote networks.
Mints a new NFT. When --seed is omitted a wallet is auto-funded — via the local genesis faucet by default, or the public testnet/devnet faucet on remote networks.
# Mint a transferable NFT with a metadata URI (local by default, auto-funds wallet)
xrpl-up nft mint --uri https://example.com/nft-meta.json --transferable
# Mint on testnet
xrpl-up nft mint -n testnet --uri https://example.com/meta.json \
--transferable --transfer-fee 5 --taxon 42| Flag | Default | Description |
|---|---|---|
--uri <uri> |
— | Metadata URI (hex-encoded automatically) |
--transferable |
off | Allow the NFT to be transferred (tfTransferable) |
--burnable |
off | Allow the issuer to burn it (tfBurnable) |
--taxon <n> |
0 |
NFToken taxon |
--transfer-fee <pct> |
0 |
Royalty fee percentage, 0–50 |
-s, --seed <seed> |
— | Minter wallet seed (omit to auto-fund via faucet) |
Lists NFTs owned by an account.
# List NFTs for the first local account
xrpl-up nft list
# List NFTs for a specific address
xrpl-up nft list --account rSomeAddress...Shows all open buy and sell offers for an NFT.
xrpl-up nft offers 000800006B9C0B...Creates a sell offer for an NFT. Price is "1" for 1 XRP or "10.USD.rIssuer" for an IOU amount.
# Sell for 5 XRP
xrpl-up nft sell 000800006B9C0B... 5 --seed sn3nxiW7...
# Sell for 10 USD (IOU)
xrpl-up nft sell 000800006B9C0B... 10.USD.rHb9CJA... --seed sn3nxiW7...Accepts a sell offer (or a buy offer with --buy). On local a buyer wallet is auto-funded if --seed is omitted.
xrpl-up nft accept A1B2C3D4...
# Accept with an explicit buyer seed
xrpl-up nft accept A1B2C3D4... --seed sBuyerSeed...
# Accept a buy offer
xrpl-up nft accept A1B2C3D4... --seed sHolderSeed... --buyPermanently destroys an NFT.
xrpl-up nft burn 000800006B9C0B... --seed sHolderSeed...Payment channel operations. Payment channels allow fast, off-chain micropayments with on-chain settlement.
Opens a payment channel funded with <amount> XRP. The source wallet is auto-funded if --seed is omitted (local only).
# Create a 10 XRP channel to a destination (local by default, auto-funds source)
xrpl-up channel create rDestination... 10
# Create with a custom settle delay (1 hour)
xrpl-up channel create rDestination... 10 --seed sSourceSeed... --settle-delay 3600| Flag | Default | Description |
|---|---|---|
--settle-delay <s> |
86400 |
Settlement delay in seconds (default: 1 day) |
-s, --seed <seed> |
— | Source wallet seed (omit to auto-fund on local) |
Lists payment channels for an account.
xrpl-up channel list
xrpl-up channel list --account rSomeAddress...Adds more XRP to an existing channel.
xrpl-up channel fund ABC123... 5 --seed sSourceSeed...Signs an off-chain claim authorizing the destination to claim up to <amount> XRP. No on-chain transaction — prints the signature, the signer's public key, and ready-to-use verify and claim commands.
xrpl-up channel sign ABC123... 3 --seed sSourceSeed...The output includes the --public-key value needed for channel claim. Pass the signature and public key to the destination out-of-band; the destination then runs the printed claim command.
Verifies an off-chain claim signature. Exits with code 1 if invalid.
xrpl-up channel verify ABC123... 3 <hex-signature> <public-key>Submits a PaymentChannelClaim on-chain. Optionally redeems an off-chain claim or closes the channel.
# Close the channel (no claim amount)
xrpl-up channel claim ABC123... --seed sDestSeed... --close
# Redeem an off-chain claim
# --public-key is the source wallet's public key (printed by channel sign)
xrpl-up channel claim ABC123... --seed sDestSeed... \
--amount 3 --signature <hex-sig> --public-key <source-public-key>Multi-Purpose Token (MPT / XLS-33) operations. MPT is enabled automatically in the local sandbox. Use --node local to target the local sandbox, or --node testnet for Testnet.
Creates a new MPT issuance.
# Local sandbox
xrpl-up mptoken issuance create --node local --seed sIssuerSeed... \
--max-amount 1000000 --asset-scale 6 --transfer-fee 100 --metadata "My Token"
# Minimal (no supply cap, non-transferable by default)
xrpl-up mptoken issuance create --node local --seed sIssuerSeed...| Flag | Default | Description |
|---|---|---|
--max-amount <n> |
unlimited | Maximum token supply |
--asset-scale <n> |
0 |
Decimal places, 0–19 |
--transfer-fee <n> |
0 |
Fee in hundredths of a percent, 0–50000 |
--metadata <string> |
— | Metadata string (hex-encoded on-chain) |
--seed / --mnemonic / --account |
— | Key material |
Destroys an MPT issuance. Outstanding supply must be zero.
xrpl-up mptoken issuance destroy 00070C44... --node local --seed sIssuerSeed...Authorizes (or unauthorizes) a holder to hold the token.
# Issuer side: authorize a holder
xrpl-up mptoken authorize 00070C44... --holder rHolderAddress... \
--node local --seed sIssuerSeed...
# Holder side: opt in (no --holder flag)
xrpl-up mptoken authorize 00070C44... --node local --seed sHolderSeed...
# Revoke authorization
xrpl-up mptoken authorize 00070C44... --holder rHolderAddress... --unauthorize \
--node local --seed sIssuerSeed...Locks or unlocks an MPT issuance or a specific holder's balance. Requires the issuance to have been created with --can-lock.
xrpl-up mptoken issuance set 00070C44... --lock --node local --seed sIssuerSeed...
xrpl-up mptoken issuance set 00070C44... --lock --holder rAddr... --node local --seed sIssuerSeed...
xrpl-up mptoken issuance set 00070C44... --unlock --node local --seed sIssuerSeed...Shows on-ledger details of an MPT issuance: issuer, outstanding supply, flags, and metadata.
xrpl-up mptoken issuance get 00070C4495F14B0E... --node localLists MPT issuances created by an account.
xrpl-up mptoken issuance list rMyAddress... --node localUse the payment command with an MPT amount format <amount>/<issuanceId>:
xrpl-up payment --to rDestAddress --amount "500/00070C44..." \
--node local --seed sHolderSeed...For querying MPT balances held by an account, use xrpl-up account mptokens.
DEX (decentralized exchange) offer operations. The XRPL DEX is a built-in order book — no smart contracts needed.
Creates a limit order. <pays> is what you put in; <gets> is what you want out. When --seed is omitted a wallet is auto-funded via faucet.
Asset format: "5" = 5 XRP, "10.USD.rIssuer" = IOU (same as AMM). Decimal values like "10.5.USD.rIssuer" are supported.
# Offer 10 USD for 5 XRP (local by default, auto-funds wallet)
xrpl-up offer create "10.USD.rHb9..." "5"
# Offer 5 XRP for 10 USD on testnet
xrpl-up offer create "5" "10.USD.rHb9..." -n testnet --seed sn3nxiW7...
# Immediate-or-cancel sell offer
xrpl-up offer create "5" "10.USD.rHb9..." --sell --immediate-or-cancel --seed sn3nxiW7...| Flag | Description |
|---|---|
--passive |
Do not consume matching offers at equal price |
--sell |
Sell exactly TakerPays regardless of TakerGets minimum |
--immediate-or-cancel |
Fill what is possible immediately, cancel the rest |
--fill-or-kill |
Fill the full amount or cancel entirely |
Cancels an open offer by its sequence number (printed by offer create).
xrpl-up offer cancel 42 --seed sn3nxiW7...Lists all open DEX offers for an account.
xrpl-up offer list
xrpl-up offer list --account rSomeAddress...Trust line operations (renamed from trustline). Use xrpl-up account trust-lines to query existing trust lines.
Creates or updates a trust line.
# Set a USD trust line with a 1000 limit (local sandbox)
xrpl-up trust set --currency USD --issuer rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh \
--limit 1000 --node local --seed sn3nxiW7...
# With NoRipple flag
xrpl-up trust set --currency USD --issuer rHb9... --limit 1000 \
--no-ripple --node local --seed sn3nxiW7...
# Freeze a trust line (issuer only)
xrpl-up trust set --currency USD --issuer rHolderAddress... \
--limit 0 --freeze --node local --seed sIssuerSeed...
# Unfreeze
xrpl-up trust set --currency USD --issuer rHolderAddress... \
--limit 0 --unfreeze --node local --seed sIssuerSeed...| Flag | Description |
|---|---|
--currency <code> |
Currency code (3-char ASCII or 40-char hex) |
--issuer <address> |
Issuer address |
--limit <value> |
Trust line limit (0 removes the trust line) |
--no-ripple |
Set NoRipple flag |
--clear-no-ripple |
Clear NoRipple flag |
--freeze |
Freeze the trust line (issuer only) |
--unfreeze |
Unfreeze the trust line |
--auth |
Authorize the trust line |
xrpl-up account trust-lines rMyAddress... --node localTo enable DefaultRipple (rippling on all new trust lines), use xrpl-up account set defaultRipple.
Escrow operations. Escrows lock XRP until a time condition or crypto-condition is met.
Creates an escrow. At least one of --finish-after, --cancel-after, or --condition is required. When --seed is omitted a wallet is auto-funded.
Time expressions: +30m, +1h, +1d, +7d (relative from now), or an absolute Unix timestamp.
# Time-locked: can finish after 1 hour, auto-cancels after 7 days
xrpl-up escrow create rDest... 10 \
--finish-after +1h --cancel-after +7d
# Crypto-condition escrow
xrpl-up escrow create rDest... 10 \
--condition A0258020... --cancel-after +7d --seed sn3nxiW7...Releases the escrowed funds to the destination after the FinishAfter time has passed. For crypto-condition escrows, --fulfillment and --condition are required.
# Time-based finish
xrpl-up escrow finish rOwner... 42 --seed sDestSeed...
# Crypto-condition finish
xrpl-up escrow finish rOwner... 42 --seed sDestSeed... \
--fulfillment A0228020... --condition A0258020...Cancels an expired escrow (after CancelAfter time) and returns XRP to the owner.
xrpl-up escrow cancel rOwner... 42 --seed sn3nxiW7...Lists escrows for an account, showing amounts, times, and conditions.
xrpl-up escrow list
xrpl-up escrow list --account rSomeAddress...Check operations. Checks are a deferred payment mechanism — the sender authorizes a maximum amount that the destination can cash at any time before expiry.
Creates a check. <sendMax> is the maximum the destination can receive.
# Create a 5 XRP check (valid for 7 days)
xrpl-up check create rDest... 5 --seed sn3nxiW7... --expiry +7d
# Create an IOU check
xrpl-up check create rDest... "10.USD.rHb9..." --seed sn3nxiW7...Cashes a check. Provide an exact [amount] or --deliver-min for a flexible minimum (the destination receives as much as possible up to SendMax).
# Cash exactly 5 XRP
xrpl-up check cash ABC123... 5 --seed sDestSeed...
# Cash flexibly — receive at least 3 XRP
xrpl-up check cash ABC123... --deliver-min 3 --seed sDestSeed...Cancels a check (sender or destination can cancel; anyone can cancel after expiry).
xrpl-up check cancel ABC123... --seed sn3nxiW7...Lists outstanding checks for an account.
xrpl-up check list
xrpl-up check list --account rSomeAddress...Enable or disable account flags (replaces the old accountset command).
xrpl-up account set requireDest --node local --seed sn3nxiW7...
xrpl-up account set requireDest --clear --node local --seed sn3nxiW7...| Flag name | Description |
|---|---|
requireDest |
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) |
defaultRipple |
Enable rippling on all new trust lines (issuers) |
depositAuth |
Only accept payments from pre-authorized senders |
allowClawback |
Allow the issuer to clawback IOU tokens from trust line holders (irreversible) |
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.
The tx command has been removed. Use xrpl-up account transactions:
xrpl-up account transactions rMyAddress... --node local
xrpl-up account transactions rMyAddress... --node testnetManage DepositPreauth entries (renamed from depositpreauth). Required when an account has the depositAuth flag set.
# Enable deposit authorization on your account first
xrpl-up account set depositAuth --node local --seed sn3nxiW7...
# Pre-authorize a specific sender
xrpl-up deposit-preauth set --authorize rSender... \
--node local --seed sn3nxiW7...
# Revoke a pre-authorization
xrpl-up deposit-preauth set --unauthorize rSender... \
--node local --seed sn3nxiW7...
# List all pre-authorizations
xrpl-up deposit-preauth list rMyAddress... --node localTicket operations. Tickets reserve sequence numbers, allowing transactions to be submitted out-of-order or in parallel — useful for multi-sig workflows.
Reserves 1–250 sequence numbers as tickets. Returns the allocated TicketSequence numbers.
Lists existing tickets (reserved sequence numbers) for an account.
# Reserve 5 ticket sequences
xrpl-up ticket create --count 5 --seed sn3nxiW7...
# Auto-fund a new wallet and reserve tickets (local only)
xrpl-up ticket create --count 3 --auto-fund
# List existing tickets
xrpl-up ticket list
xrpl-up ticket list rSomeAddress...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 allowClawback --node local --seed <issuer-seed>- MPT clawback: The issuance must have been created with
xrpl-up mptoken issuance create --can-clawback
Reclaims IOU tokens from a trust line holder. The signing wallet must be the token issuer.
Reclaims MPT tokens from a holder. The signing wallet must be the MPT issuer.
# Clawback 10 USD from a holder trust line
xrpl-up clawback iou 10 USD rHolder... --seed sIssuerSeed...
# Clawback 500 units of an MPT
xrpl-up clawback mpt 00000001AABBCCDD... rHolder... 500 --seed sIssuerSeed...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 |
Print the address for a wallet |
private-key |
Print the private key (requires password) |
public-key |
Print the public key |
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 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 --account rMyAddress
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 --node local
xrpl-up account transactions rMyAddress --node local
xrpl-up account trust-lines rMyAddress --node local
xrpl-up account balance rMyAddress --node testnetSend a Payment transaction. Alias: xrpl-up send.
# Send XRP
xrpl-up payment --to rDest... --amount 10 --node local --seed sSrc...
# Send IOU
xrpl-up payment --to rDest... --amount "10/USD/rIssuer..." \
--node local --seed sSrc...
# Send MPT
xrpl-up payment --to rDest... --amount "500/00070C44..." \
--node local --seed sSrc...| Flag | Description |
|---|---|
--to <address> |
Destination address or alias |
--amount <amount> |
Amount: 10 = XRP, 10/USD/rIssuer = IOU, 500/<issuanceId> = MPT |
--destination-tag <n> |
Destination tag |
--memo <text> |
Memo to attach (repeatable) |
--send-max <amount> |
SendMax for cross-currency payments |
--deliver-min <amount> |
Minimum delivery (enables partial payments) |
--partial |
Set tfPartialPayment flag |
--dry-run |
Print signed transaction without submitting |
Multi-signature signer list management (replaces accountset signer-list).
xrpl-up multisig --helpManage DID-based credentials on the XRP Ledger.
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.
xrpl-up vault --helpInspect 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 --local --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 --local
# List disabled amendments only
xrpl-up amendment list --local --disabled
# Side-by-side diff: local vs testnet
xrpl-up amendment list --local --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 --local
xrpl-up amendment info AMM --network testnet
xrpl-up amendment info A730EB18 --local # hash prefix lookupQueues an amendment for activation in the local sandbox genesis config. Because the local node runs in standalone mode (no consensus), amendments cannot be activated via validator voting — they must be present in the genesis config from the very first ledger. The command writes the amendment hash to ~/.xrpl-up/genesis-amendments.txt, regenerates rippled.cfg, then prompts you to reset and restart.
xrpl-up amendment enable PermissionedDomains --local
# ⚠ Activating this amendment requires a full node reset.
# All ledger data, funded accounts, and snapshots will be wiped.
# Reset and restart the local node now? [y/N]
# Skip the prompt and reset automatically:
xrpl-up amendment enable PermissionedDomains --local --auto-resetStandalone mode only.
enablemodifies the genesis config and only takes effect after a reset — it requires standalone mode (xrpl-up startwithout--local-network). In--local-network(consensus) mode, all production amendments are pre-activated in the genesis ledger and cannot be changed — once activated, amendments are permanent. To undo anenable, simply runxrpl-up resetwithout re-enabling the amendment.
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. Until the package is published to npm, install 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 both the ledger volume and a copy of the account store (local-accounts.json), so xrpl-up accounts reflects the accounts that existed at snapshot time. The account store sidecar is copied as-is — it is not validated against the ledger. The snapshot list output shows +accounts for any snapshot that includes the account sidecar.
Typical workflow:
xrpl-up start --local-network --detach
# Run expensive setup (fund accounts, create AMM pool, set trust lines...)
xrpl-up faucet --network local
# Wait for funded accounts to appear on the validated ledger (~4s consensus close).
# Snapshot save stops services before archiving — unvalidated transactions may be lost.
xrpl-up accounts --local # confirm accounts are on-ledger
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 --local # shows accounts as of snapshot timeFresh start from a snapshot after reset:
xrpl-up reset # wipe everything
xrpl-up start --local-network --detach # start sandbox (creates new volume)
xrpl-up snapshot restore after-setup # restore saved state
xrpl-up accounts --local # 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 --local --config my-rippled.cfgValidation also runs automatically when --config is passed to xrpl-up start --local — the sandbox will not start if there are blocking errors.
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 --local --detach
- 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:
module.exports = {
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',
};Add any custom WebSocket endpoint as a named network and use it with --network <name>.
| 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 # generated on each start (or custom via --config)
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