{"_id":"@9oelm/xrpl-up","name":"@9oelm/xrpl-up","dist-tags":{"latest":"0.1.7"},"versions":{"0.1.7":{"name":"@9oelm/xrpl-up","version":"0.1.7","description":"XRPL sandbox for local development","author":"","license":"MIT","repository":{"type":"git","url":"git+https://github.com/ripple/xrpl-up.git"},"keywords":["xrpl","xrp","blockchain","development","sandbox"],"bin":{"xrpl-up":"dist/cli.js"},"main":"./dist/index.js","types":"./dist/index.d.ts","engines":{"node":">=20.0.0"},"scripts":{"build":"tsc","postbuild":"cp src/faucet-server/package.json dist/faucet-server/package.json && cp src/faucet-server/Dockerfile dist/faucet-server/Dockerfile && chmod +x dist/cli.js && mkdir -p dist/core/genesis && cp src/core/genesis/*.tar.gz dist/core/genesis/","dev":"tsx src/cli.ts","clean":"rm -rf dist","prepare":"npm run build","test":"vitest run","test:watch":"vitest","test:e2e":"vitest run tests/e2e","test:e2e:local":"vitest run --config vitest.config.local.ts tests/e2e","test:e2e:local-network":"vitest run --config vitest.config.local-network.ts tests/e2e","test:e2e:snapshot":"vitest run --config vitest.config.snapshot.ts","typecheck":"tsc --noEmit"},"dependencies":{"@xrplf/isomorphic":"^1.0.1","chalk":"^4.1.2","cli-table3":"^0.6.3","commander":"^12.0.0","inquirer":"^8.2.6","ora":"^5.4.1","xrpl":"^4.6.0"},"devDependencies":{"@types/inquirer":"^8.2.10","@types/node":"^22.0.0","tsx":"^4.7.0","typescript":"^5.3.3","vitest":"^2.1.9"},"gitHead":"1968bd5212e5a4eb55321dc1782e9c9eb8683de5","_id":"@9oelm/xrpl-up@0.1.7","bugs":{"url":"https://github.com/ripple/xrpl-up/issues"},"homepage":"https://github.com/ripple/xrpl-up#readme","_nodeVersion":"24.13.1","_npmVersion":"11.8.0","dist":{"integrity":"sha512-zGjgBP0+JberO+i0/I4qx49lrCO+I5p47WvA7loFK2V0L8BO3YgeER7wYxt8qSEUKfHn/PrAxxalgj0jd/jnOg==","shasum":"32a4e5b6e4fbf916e503189b14329dc01a66850a","tarball":"https://registry.npmjs.org/@9oelm/xrpl-up/-/xrpl-up-0.1.7.tgz","fileCount":252,"unpackedSize":1747741,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQCGhXlSTjXUC6r8zt/FLn2pax9RszOtq8qYDTeZ1GVjsQIhAIeiD4cB/rPHzGKNj1V+11sOMWX/EqcUJh89i7imY9pD"}]},"_npmUser":{"name":"9oelm","email":"whymemememe@gmail.com"},"directories":{},"maintainers":[{"name":"9oelm","email":"whymemememe@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/xrpl-up_0.1.7_1775813850021_0.7909970985928667"},"_hasShrinkwrap":false}},"time":{"created":"2026-04-10T09:37:29.930Z","0.1.7":"2026-04-10T09:37:30.237Z","modified":"2026-04-10T09:37:30.465Z"},"maintainers":[{"name":"9oelm","email":"whymemememe@gmail.com"}],"description":"XRPL sandbox for local development","homepage":"https://github.com/ripple/xrpl-up#readme","keywords":["xrpl","xrp","blockchain","development","sandbox"],"repository":{"type":"git","url":"git+https://github.com/ripple/xrpl-up.git"},"bugs":{"url":"https://github.com/ripple/xrpl-up/issues"},"license":"MIT","readme":"# xrpl-up\n\nCLI 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.\n\n## Prerequisites\n\n- **Node.js** v20 or later\n- **Docker** (required for `--local` mode only)\n\n## Installation\n\n~~**From npm (global):**~~\n\n~~`npm install -g xrpl-up`~~\n\n_Not available yet: package has not been published to npm._\n\n**From source (development):**\n\n```bash\ngit clone https://github.com/ripple/xrpl-up.git\ncd xrpl-up\nnpm install\nnpm run build\nnpm link\n```\n\n## Quick Start\n\n```bash\n# Scaffold a new project (select \"local\" as default network)\nxrpl-up init my-project\ncd my-project && npm install\n\n# Start a local sandbox with 10 pre-funded accounts (local is the default)\nxrpl-up start\n\n# In another terminal — list accounts with live balances\nxrpl-up accounts\n\n# Run a script against the local sandbox\nxrpl-up run scripts/example-payment.ts\n\n# Create an AMM pool in one command (local by default)\nxrpl-up amm create XRP USD\n\n# Mint a transferable NFT\nxrpl-up nft mint --uri https://example.com/meta.json --transferable\n\n# Create an MPT issuance (Multi-Purpose Token)\nxrpl-up mptoken issuance create --node local --max-amount 1000000 --asset-scale 6\n\n# Open a payment channel\nxrpl-up channel create rDestination... 10\n```\n\n---\n\n## Commands\n\n`xrpl-up` has two command sets:\n\n- **Sandbox operation commands**: environment lifecycle and state control (`start`, `stop`, `reset`, `snapshot`, `status`, `accounts`, `logs`, `config`, `run`, `init`, `faucet`, `amendment`).\n- **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`).\n\nXRPL interaction commands are intentionally non-exhaustive. For complex or production-grade flows, use `xrpl.js` directly or call `rippled` RPC endpoints.\n\n### Global flag: `--node`\n\nAll XRPL interaction commands accept a global `--node` option that sets the network target:\n\n| Value | Connects to |\n|-------|-------------|\n| `testnet` (default) | XRPL Testnet |\n| `devnet` | XRPL Devnet (may include pre-release amendments not yet supported by this tool) |\n| `local` | Local sandbox (`ws://localhost:6006`) |\n| `wss://...` | Any custom WebSocket URL |\n\n```bash\n# Use local sandbox (start first with: xrpl-up start)\nxrpl-up account info rMyAddress --node local\n\n# Use testnet (default — no --node needed)\nxrpl-up account info rMyAddress\n\n# Use a custom WebSocket URL\nxrpl-up account info rMyAddress --node ws://my-node:6006\n\n# Set via environment variable\nexport XRPL_NODE=local\nxrpl-up payment --to rDest --amount 10\n```\n\n`--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.\n\n### `xrpl-up start`\n\nStarts a sandbox environment and funds accounts. Supports a fully local rippled node (via Docker) or a connection to XRPL Testnet/Devnet.\n\nTwo local modes are available:\n\n| Mode | Command | Ledger close | State | Best for |\n|------|---------|-------------|-------|----------|\n| **Standalone** (default) | `xrpl-up start` | Instant | Ephemeral | CI, quick tests, scripting |\n| **Local network** | `xrpl-up start --local-network` | ~4s (consensus) | Persistent | Long dev sessions, snapshots |\n\n**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.\n\n**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.\n\n```bash\n# Quick sandbox — fast, ephemeral (CI, scripting, sanity tests)\nxrpl-up start\n\n# Persistent local network — real consensus, snapshots, survives restarts\nxrpl-up start --local-network\n\n# Connect to Testnet instead\nxrpl-up start --network testnet\n\n# Connect to Devnet instead\nxrpl-up start --network devnet\n```\n\n**Local mode options:**\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--local` | — | Run a local rippled node via Docker |\n| `--local-network` | off | Start a 2-node consensus network (persistent state, snapshot support) |\n| `--image <image>` | `xrpllabsofficial/xrpld:latest` | rippled Docker image |\n| `--ledger-interval <ms>` | `1000` | Auto-advance ledger every N milliseconds (standalone only) |\n| `--no-auto-advance` | — | Disable automatic ledger closing |\n| `--no-secrets` | — | Suppress seeds and private keys from stdout (auto-enabled with `--detach`) |\n| `--debug` | — | Enable rippled debug logging |\n| `--detach` | — | Start in background and exit (for CI/CD) |\n| `--config <path>` | — | Use a custom `rippled.cfg` instead of the auto-generated one |\n| `--exit-on-crash` | — | Exit with code 134 when rippled crashes (SIGABRT); disables container auto-restart |\n| `-a, --accounts <n>` | `10` | Number of accounts to pre-fund |\n\n> **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.\n>\n> **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 in `rippled.cfg` to force-enable the required amendments at genesis creation. No voting or ledger advancement is needed.\n\n> **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.\n\n---\n\n### `xrpl-up stop`\n\nStops the local Docker sandbox stack.\n\n```bash\nxrpl-up stop\n```\n\n---\n\n### `xrpl-up reset`\n\nWipes 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.\n\n```bash\n# Wipe containers, ledger volume, and accounts — keep snapshots\nxrpl-up reset\n\n# Wipe everything including saved snapshots\nxrpl-up reset --snapshots\n```\n\nWhat `xrpl-up reset` removes:\n- Running Docker containers (`docker compose down`)\n- Ledger volumes (`xrpl-up-local-db` and `xrpl-up-local-peer-db` in consensus mode)\n- `~/.xrpl-up/local-accounts.json`\n- With `--snapshots`: `~/.xrpl-up/snapshots/` and all snapshot files\n\n> Snapshots are kept by default since they are the only way to recover a previous state. Use `--snapshots` only when you want a complete wipe.\n\n---\n\n### `xrpl-up accounts`\n\nLists funded accounts with their live XRP balances.\n\n```bash\nxrpl-up accounts                          # local (default)\nxrpl-up accounts --network testnet\n\n# Query any address directly\nxrpl-up accounts --address rSomeAddress...\n```\n\n---\n\n### `xrpl-up faucet`\n\nFunds 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`.\n\n```bash\n# Generate and fund a new wallet on the local sandbox (default)\nxrpl-up faucet\n\n# Fund an existing wallet by seed on the local sandbox\nxrpl-up faucet --seed sn3nxiW7v8KXzPzAqzyHXbSSKNuN9\n\n# Use the public Testnet faucet\nxrpl-up faucet --network testnet\n```\n\n> Faucet targets supported by this command: `local` (default), `testnet`, `devnet`.\n\n---\n\n### `xrpl-up status`\n\nShows rippled server info and faucet health.\n\n```bash\nxrpl-up status                     # local (default)\nxrpl-up status --network testnet\n```\n\nDisplays rippled version, current ledger index, and faucet availability.\n\n---\n\n### `xrpl-up run <script>`\n\nRuns a TypeScript or JavaScript script with the network URL injected as environment variables. TypeScript is executed directly via `tsx` (no build step needed).\n\n```bash\nxrpl-up run scripts/example-payment.ts --network local\nxrpl-up run scripts/my-script.js --network testnet\n```\n\n**Injected environment variables:**\n\n| Variable | Description |\n|----------|-------------|\n| `XRPL_NETWORK` | Network key (e.g. `local`, `testnet`) |\n| `XRPL_NETWORK_URL` | WebSocket URL (e.g. `ws://localhost:6006`) |\n| `XRPL_NETWORK_NAME` | Human-readable name |\n\n**Example script:**\n\n```ts\n// scripts/send-payment.ts\nimport { Client, xrpToDrops, Wallet } from 'xrpl';\n\nasync function main() {\n  const client = new Client(process.env.XRPL_NETWORK_URL!);\n  await client.connect();\n\n  const sender = Wallet.fromSeed('sn3nxiW7v8KXzPzAqzyHXbSSKNuN9'); // from xrpl-up accounts\n\n  await client.submitAndWait(\n    {\n      TransactionType: 'Payment',\n      Account: sender.address,\n      Amount: xrpToDrops('10'),\n      Destination: 'rDestinationAddress...',\n    },\n    { wallet: sender }\n  );\n\n  console.log('Payment sent!');\n  await client.disconnect();\n}\n\nmain().catch(console.error);\n```\n\n---\n\n### `xrpl-up logs`\n\nStreams Docker Compose logs from the running local sandbox.\n\n```bash\nxrpl-up logs           # all services\nxrpl-up logs rippled   # rippled only (useful with --debug)\nxrpl-up logs faucet    # faucet server only\n```\n\n---\n\n### `xrpl-up amm`\n\nManage AMM pools (XLS-30). AMM is enabled by default in the local sandbox — no extra configuration needed.\n\n#### `xrpl-up amm create <asset1> <asset2>`\n\nCreates a ready-to-use AMM pool with fresh funded accounts. Automatically handles issuer creation, trust lines, token issuance, and pool creation.\n\n```bash\n# XRP/USD pool with defaults (100 XRP, 100 USD, 0.5% fee)\nxrpl-up amm create XRP USD\n\n# Custom amounts and fee\nxrpl-up amm create XRP USD --amount1 500 --amount2 1000 --fee 0.3\n\n# IOU/IOU pool (creates two separate issuers)\nxrpl-up amm create USD EUR --amount1 100 --amount2 100\n\n# On testnet\nxrpl-up amm create XRP USD -n testnet\n```\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--amount1 <n>` | `100` | Amount of asset1 to deposit |\n| `--amount2 <n>` | `100` | Amount of asset2 to deposit |\n| `--fee <pct>` | `0.5` | Trading fee in % (max 1%) |\n\nThe command prints the exact `amm info` query to use afterward, with the issuer address filled in.\n\n> **Note:** For non-XRP assets, `amm create` mints a fresh token on your local ledger. The issuer address is randomly generated — it has no relation to any real-world or testnet issuer.\n\n#### `xrpl-up amm info <asset1> <asset2>`\n\nShows current pool state: reserves, LP token supply, trading fee, and AMM account.\n\n```bash\n# Query by asset pair (use the issuer address printed by amm create)\nxrpl-up amm info XRP USD.rIssuerAddress\n\n# Query by AMM account address\nxrpl-up amm info --account rAMMAccountAddress\n\n# Query on testnet\nxrpl-up amm info XRP USD.rHb9... -n testnet\n```\n\nAsset format: `XRP` for native currency, `CURRENCY.rIssuerAddress` for IOUs (e.g. `USD.rHb9CJ...`).\n\n---\n\n### `xrpl-up nft`\n\nNFT lifecycle operations (XLS-20). Supports mint, list, buy/sell offers, and burn on local sandbox or remote networks.\n\n#### `xrpl-up nft mint`\n\nMints 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.\n\n```bash\n# Mint a transferable NFT with a metadata URI (local by default, auto-funds wallet)\nxrpl-up nft mint --uri https://example.com/nft-meta.json --transferable\n\n# Mint on testnet\nxrpl-up nft mint -n testnet --uri https://example.com/meta.json \\\n  --transferable --transfer-fee 5 --taxon 42\n```\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--uri <uri>` | — | Metadata URI (hex-encoded automatically) |\n| `--transferable` | off | Allow the NFT to be transferred (`tfTransferable`) |\n| `--burnable` | off | Allow the issuer to burn it (`tfBurnable`) |\n| `--taxon <n>` | `0` | NFToken taxon |\n| `--transfer-fee <pct>` | `0` | Royalty fee percentage, 0–50 |\n| `-s, --seed <seed>` | — | Minter wallet seed (omit to auto-fund via faucet) |\n\n#### `xrpl-up nft list`\n\nLists NFTs owned by an account.\n\n```bash\n# List NFTs for the first local account\nxrpl-up nft list\n\n# List NFTs for a specific address\nxrpl-up nft list --account rSomeAddress...\n```\n\n#### `xrpl-up nft offers <nftokenId>`\n\nShows all open buy and sell offers for an NFT.\n\n```bash\nxrpl-up nft offers 000800006B9C0B...\n```\n\n#### `xrpl-up nft sell <nftokenId> <price>`\n\nCreates a sell offer for an NFT. Price is `\"1\"` for 1 XRP or `\"10.USD.rIssuer\"` for an IOU amount.\n\n```bash\n# Sell for 5 XRP\nxrpl-up nft sell 000800006B9C0B... 5 --seed sn3nxiW7...\n\n# Sell for 10 USD (IOU)\nxrpl-up nft sell 000800006B9C0B... 10.USD.rHb9CJA... --seed sn3nxiW7...\n```\n\n#### `xrpl-up nft accept <offerId>`\n\nAccepts a sell offer (or a buy offer with `--buy`). On local a buyer wallet is auto-funded if `--seed` is omitted.\n\n```bash\nxrpl-up nft accept A1B2C3D4...\n\n# Accept with an explicit buyer seed\nxrpl-up nft accept A1B2C3D4... --seed sBuyerSeed...\n\n# Accept a buy offer\nxrpl-up nft accept A1B2C3D4... --seed sHolderSeed... --buy\n```\n\n#### `xrpl-up nft burn <nftokenId>`\n\nPermanently destroys an NFT.\n\n```bash\nxrpl-up nft burn 000800006B9C0B... --seed sHolderSeed...\n```\n\n---\n\n### `xrpl-up channel`\n\nPayment channel operations. Payment channels allow fast, off-chain micropayments with on-chain settlement.\n\n#### `xrpl-up channel create <destination> <amount>`\n\nOpens a payment channel funded with `<amount>` XRP. The source wallet is auto-funded if `--seed` is omitted (local only).\n\n```bash\n# Create a 10 XRP channel to a destination (local by default, auto-funds source)\nxrpl-up channel create rDestination... 10\n\n# Create with a custom settle delay (1 hour)\nxrpl-up channel create rDestination... 10 --seed sSourceSeed... --settle-delay 3600\n```\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--settle-delay <s>` | `86400` | Settlement delay in seconds (default: 1 day) |\n| `-s, --seed <seed>` | — | Source wallet seed (omit to auto-fund on local) |\n\n#### `xrpl-up channel list`\n\nLists payment channels for an account.\n\n```bash\nxrpl-up channel list\nxrpl-up channel list --account rSomeAddress...\n```\n\n#### `xrpl-up channel fund <channelId> <amount>`\n\nAdds more XRP to an existing channel.\n\n```bash\nxrpl-up channel fund ABC123... 5 --seed sSourceSeed...\n```\n\n#### `xrpl-up channel sign <channelId> <amount>`\n\nSigns 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.\n\n```bash\nxrpl-up channel sign ABC123... 3 --seed sSourceSeed...\n```\n\nThe 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.\n\n#### `xrpl-up channel verify <channelId> <amount> <signature> <publicKey>`\n\nVerifies an off-chain claim signature. Exits with code `1` if invalid.\n\n```bash\nxrpl-up channel verify ABC123... 3 <hex-signature> <public-key>\n```\n\n#### `xrpl-up channel claim <channelId>`\n\nSubmits a `PaymentChannelClaim` on-chain. Optionally redeems an off-chain claim or closes the channel.\n\n```bash\n# Close the channel (no claim amount)\nxrpl-up channel claim ABC123... --seed sDestSeed... --close\n\n# Redeem an off-chain claim\n# --public-key is the source wallet's public key (printed by channel sign)\nxrpl-up channel claim ABC123... --seed sDestSeed... \\\n  --amount 3 --signature <hex-sig> --public-key <source-public-key>\n```\n\n---\n\n### `xrpl-up mptoken`\n\nMulti-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.\n\n#### `xrpl-up mptoken issuance create`\n\nCreates a new MPT issuance.\n\n```bash\n# Local sandbox\nxrpl-up mptoken issuance create --node local --seed sIssuerSeed... \\\n  --max-amount 1000000 --asset-scale 6 --transfer-fee 100 --metadata \"My Token\"\n\n# Minimal (no supply cap, non-transferable by default)\nxrpl-up mptoken issuance create --node local --seed sIssuerSeed...\n```\n\n| Flag | Default | Description |\n|------|---------|-------------|\n| `--max-amount <n>` | unlimited | Maximum token supply |\n| `--asset-scale <n>` | `0` | Decimal places, 0–19 |\n| `--transfer-fee <n>` | `0` | Fee in hundredths of a percent, 0–50000 |\n| `--metadata <string>` | — | Metadata string (hex-encoded on-chain) |\n| `--seed / --mnemonic / --account` | — | Key material |\n\n#### `xrpl-up mptoken issuance destroy <issuanceId>`\n\nDestroys an MPT issuance. Outstanding supply must be zero.\n\n```bash\nxrpl-up mptoken issuance destroy 00070C44... --node local --seed sIssuerSeed...\n```\n\n#### `xrpl-up mptoken authorize <issuanceId>`\n\nAuthorizes (or unauthorizes) a holder to hold the token.\n\n```bash\n# Issuer side: authorize a holder\nxrpl-up mptoken authorize 00070C44... --holder rHolderAddress... \\\n  --node local --seed sIssuerSeed...\n\n# Holder side: opt in (no --holder flag)\nxrpl-up mptoken authorize 00070C44... --node local --seed sHolderSeed...\n\n# Revoke authorization\nxrpl-up mptoken authorize 00070C44... --holder rHolderAddress... --unauthorize \\\n  --node local --seed sIssuerSeed...\n```\n\n#### `xrpl-up mptoken issuance set <issuanceId>`\n\nLocks or unlocks an MPT issuance or a specific holder's balance. Requires the issuance to have been created with `--can-lock`.\n\n```bash\nxrpl-up mptoken issuance set 00070C44... --lock --node local --seed sIssuerSeed...\nxrpl-up mptoken issuance set 00070C44... --lock --holder rAddr... --node local --seed sIssuerSeed...\nxrpl-up mptoken issuance set 00070C44... --unlock --node local --seed sIssuerSeed...\n```\n\n#### `xrpl-up mptoken issuance get <issuanceId>`\n\nShows on-ledger details of an MPT issuance: issuer, outstanding supply, flags, and metadata.\n\n```bash\nxrpl-up mptoken issuance get 00070C4495F14B0E... --node local\n```\n\n#### `xrpl-up mptoken issuance list <address>`\n\nLists MPT issuances created by an account.\n\n```bash\nxrpl-up mptoken issuance list rMyAddress... --node local\n```\n\n#### Sending MPT payments\n\nUse the `payment` command with an MPT amount format `<amount>/<issuanceId>`:\n\n```bash\nxrpl-up payment --to rDestAddress --amount \"500/00070C44...\" \\\n  --node local --seed sHolderSeed...\n```\n\nFor querying MPT balances held by an account, use `xrpl-up account mptokens`.\n\n---\n\n### `xrpl-up offer`\n\nDEX (decentralized exchange) offer operations. The XRPL DEX is a built-in order book — no smart contracts needed.\n\n#### `xrpl-up offer create <pays> <gets>`\n\nCreates 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.\n\nAsset format: `\"5\"` = 5 XRP, `\"10.USD.rIssuer\"` = IOU (same as AMM). Decimal values like `\"10.5.USD.rIssuer\"` are supported.\n\n```bash\n# Offer 10 USD for 5 XRP (local by default, auto-funds wallet)\nxrpl-up offer create \"10.USD.rHb9...\" \"5\"\n\n# Offer 5 XRP for 10 USD on testnet\nxrpl-up offer create \"5\" \"10.USD.rHb9...\" -n testnet --seed sn3nxiW7...\n\n# Immediate-or-cancel sell offer\nxrpl-up offer create \"5\" \"10.USD.rHb9...\" --sell --immediate-or-cancel --seed sn3nxiW7...\n```\n\n| Flag | Description |\n|------|-------------|\n| `--passive` | Do not consume matching offers at equal price |\n| `--sell` | Sell exactly `TakerPays` regardless of `TakerGets` minimum |\n| `--immediate-or-cancel` | Fill what is possible immediately, cancel the rest |\n| `--fill-or-kill` | Fill the full amount or cancel entirely |\n\n#### `xrpl-up offer cancel <sequence>`\n\nCancels an open offer by its sequence number (printed by `offer create`).\n\n```bash\nxrpl-up offer cancel 42 --seed sn3nxiW7...\n```\n\n#### `xrpl-up offer list`\n\nLists all open DEX offers for an account.\n\n```bash\nxrpl-up offer list\nxrpl-up offer list --account rSomeAddress...\n```\n\n---\n\n### `xrpl-up trust`\n\nTrust line operations (renamed from `trustline`). Use `xrpl-up account trust-lines` to query existing trust lines.\n\n#### `xrpl-up trust set`\n\nCreates or updates a trust line.\n\n```bash\n# Set a USD trust line with a 1000 limit (local sandbox)\nxrpl-up trust set --currency USD --issuer rHb9CJAWyB4rj91VRWn96DkukG4bwdtyTh \\\n  --limit 1000 --node local --seed sn3nxiW7...\n\n# With NoRipple flag\nxrpl-up trust set --currency USD --issuer rHb9... --limit 1000 \\\n  --no-ripple --node local --seed sn3nxiW7...\n\n# Freeze a trust line (issuer only)\nxrpl-up trust set --currency USD --issuer rHolderAddress... \\\n  --limit 0 --freeze --node local --seed sIssuerSeed...\n\n# Unfreeze\nxrpl-up trust set --currency USD --issuer rHolderAddress... \\\n  --limit 0 --unfreeze --node local --seed sIssuerSeed...\n```\n\n| Flag | Description |\n|------|-------------|\n| `--currency <code>` | Currency code (3-char ASCII or 40-char hex) |\n| `--issuer <address>` | Issuer address |\n| `--limit <value>` | Trust line limit (0 removes the trust line) |\n| `--no-ripple` | Set NoRipple flag |\n| `--clear-no-ripple` | Clear NoRipple flag |\n| `--freeze` | Freeze the trust line (issuer only) |\n| `--unfreeze` | Unfreeze the trust line |\n| `--auth` | Authorize the trust line |\n\n#### Query trust lines\n\n```bash\nxrpl-up account trust-lines rMyAddress... --node local\n```\n\nTo enable `DefaultRipple` (rippling on all new trust lines), use `xrpl-up account set defaultRipple`.\n\n---\n\n### `xrpl-up escrow`\n\nEscrow operations. Escrows lock XRP until a time condition or crypto-condition is met.\n\n#### `xrpl-up escrow create <destination> <amount>`\n\nCreates an escrow. At least one of `--finish-after`, `--cancel-after`, or `--condition` is required. When `--seed` is omitted a wallet is auto-funded.\n\nTime expressions: `+30m`, `+1h`, `+1d`, `+7d` (relative from now), or an absolute Unix timestamp.\n\n```bash\n# Time-locked: can finish after 1 hour, auto-cancels after 7 days\nxrpl-up escrow create rDest... 10 \\\n  --finish-after +1h --cancel-after +7d\n\n# Crypto-condition escrow\nxrpl-up escrow create rDest... 10 \\\n  --condition A0258020... --cancel-after +7d --seed sn3nxiW7...\n```\n\n#### `xrpl-up escrow finish <owner> <sequence>`\n\nReleases the escrowed funds to the destination after the `FinishAfter` time has passed. For crypto-condition escrows, `--fulfillment` and `--condition` are required.\n\n```bash\n# Time-based finish\nxrpl-up escrow finish rOwner... 42 --seed sDestSeed...\n\n# Crypto-condition finish\nxrpl-up escrow finish rOwner... 42 --seed sDestSeed... \\\n  --fulfillment A0228020... --condition A0258020...\n```\n\n#### `xrpl-up escrow cancel <owner> <sequence>`\n\nCancels an expired escrow (after `CancelAfter` time) and returns XRP to the owner.\n\n```bash\nxrpl-up escrow cancel rOwner... 42 --seed sn3nxiW7...\n```\n\n#### `xrpl-up escrow list`\n\nLists escrows for an account, showing amounts, times, and conditions.\n\n```bash\nxrpl-up escrow list\nxrpl-up escrow list --account rSomeAddress...\n```\n\n---\n\n### `xrpl-up check`\n\nCheck operations. Checks are a deferred payment mechanism — the sender authorizes a maximum amount that the destination can cash at any time before expiry.\n\n#### `xrpl-up check create <destination> <sendMax>`\n\nCreates a check. `<sendMax>` is the maximum the destination can receive.\n\n```bash\n# Create a 5 XRP check (valid for 7 days)\nxrpl-up check create rDest... 5 --seed sn3nxiW7... --expiry +7d\n\n# Create an IOU check\nxrpl-up check create rDest... \"10.USD.rHb9...\" --seed sn3nxiW7...\n```\n\n#### `xrpl-up check cash <checkId> [amount]`\n\nCashes a check. Provide an exact `[amount]` or `--deliver-min` for a flexible minimum (the destination receives as much as possible up to `SendMax`).\n\n```bash\n# Cash exactly 5 XRP\nxrpl-up check cash ABC123... 5 --seed sDestSeed...\n\n# Cash flexibly — receive at least 3 XRP\nxrpl-up check cash ABC123... --deliver-min 3 --seed sDestSeed...\n```\n\n#### `xrpl-up check cancel <checkId>`\n\nCancels a check (sender or destination can cancel; anyone can cancel after expiry).\n\n```bash\nxrpl-up check cancel ABC123... --seed sn3nxiW7...\n```\n\n#### `xrpl-up check list`\n\nLists outstanding checks for an account.\n\n```bash\nxrpl-up check list\nxrpl-up check list --account rSomeAddress...\n```\n\n---\n\n### `xrpl-up account set`\n\nEnable or disable account flags (replaces the old `accountset` command).\n\n```bash\nxrpl-up account set requireDest --node local --seed sn3nxiW7...\nxrpl-up account set requireDest --clear --node local --seed sn3nxiW7...\n```\n\n| Flag name | Description |\n|-----------|-------------|\n| `requireDest` | Require a destination tag on all incoming payments |\n| `requireAuth` | Require the issuer to authorize all trust lines |\n| `disallowXRP` | Signal that this account does not accept direct XRP payments |\n| `disableMaster` | Disable the master key (use only after setting a signer list) |\n| `defaultRipple` | Enable rippling on all new trust lines (issuers) |\n| `depositAuth` | Only accept payments from pre-authorized senders |\n| `allowClawback` | Allow the issuer to clawback IOU tokens from trust line holders (irreversible) |\n\n> **Note:** Set a signer list before disabling the master key (`disableMaster`). For signer list management, use `xrpl-up multisig`. To query account settings, use `xrpl-up account info`.\n\n---\n\n### Transaction history\n\nThe `tx` command has been removed. Use `xrpl-up account transactions`:\n\n```bash\nxrpl-up account transactions rMyAddress... --node local\nxrpl-up account transactions rMyAddress... --node testnet\n```\n\n---\n\n### `xrpl-up deposit-preauth`\n\nManage DepositPreauth entries (renamed from `depositpreauth`). Required when an account has the `depositAuth` flag set.\n\n```bash\n# Enable deposit authorization on your account first\nxrpl-up account set depositAuth --node local --seed sn3nxiW7...\n\n# Pre-authorize a specific sender\nxrpl-up deposit-preauth set --authorize rSender... \\\n  --node local --seed sn3nxiW7...\n\n# Revoke a pre-authorization\nxrpl-up deposit-preauth set --unauthorize rSender... \\\n  --node local --seed sn3nxiW7...\n\n# List all pre-authorizations\nxrpl-up deposit-preauth list rMyAddress... --node local\n```\n\n---\n\n### `xrpl-up ticket`\n\nTicket operations. Tickets reserve sequence numbers, allowing transactions to be submitted out-of-order or in parallel — useful for multi-sig workflows.\n\n#### `xrpl-up ticket create`\n\nReserves 1–250 sequence numbers as tickets. Returns the allocated TicketSequence numbers.\n\n#### `xrpl-up ticket list [account]`\n\nLists existing tickets (reserved sequence numbers) for an account.\n\n```bash\n# Reserve 5 ticket sequences\nxrpl-up ticket create --count 5 --seed sn3nxiW7...\n\n# Auto-fund a new wallet and reserve tickets (local only)\nxrpl-up ticket create --count 3 --auto-fund\n\n# List existing tickets\nxrpl-up ticket list\nxrpl-up ticket list rSomeAddress...\n```\n\n> **Usage:** To use a ticket in a transaction, set `Sequence = 0` and `TicketSequence = <n>`.\n\n---\n\n### `xrpl-up clawback`\n\nIssuer clawback operations. The issuer account must have clawback enabled before use.\n\n> **Prerequisites:**\n> - **IOU clawback:** Enable `asfAllowTrustLineClawback` with `xrpl-up account set allowClawback --node local --seed <issuer-seed>`\n> - **MPT clawback:** The issuance must have been created with `xrpl-up mptoken issuance create --can-clawback`\n\n#### `xrpl-up clawback iou <amount> <currency> <holder>`\n\nReclaims IOU tokens from a trust line holder. The signing wallet must be the token issuer.\n\n#### `xrpl-up clawback mpt <issuanceId> <holder> <amount>`\n\nReclaims MPT tokens from a holder. The signing wallet must be the MPT issuer.\n\n```bash\n# Clawback 10 USD from a holder trust line\nxrpl-up clawback iou 10 USD rHolder... --seed sIssuerSeed...\n\n# Clawback 500 units of an MPT\nxrpl-up clawback mpt 00000001AABBCCDD... rHolder... 500 --seed sIssuerSeed...\n```\n\n---\n\n### `xrpl-up wallet`\n\nWallet management — create, import, and manage XRPL key pairs in a local keystore (`~/.xrpl/keystore/` by default).\n\n| Subcommand | Description |\n|------------|-------------|\n| `new` | Generate a new random wallet |\n| `new-mnemonic` | Generate a wallet from a BIP39 mnemonic |\n| `import` | Import a wallet by seed or mnemonic |\n| `list` | List all wallets in the keystore |\n| `address` | Print the address for a wallet |\n| `private-key` | Print the private key (requires password) |\n| `public-key` | Print the public key |\n| `sign` | Sign arbitrary data |\n| `verify` | Verify a signature |\n| `alias` | Set or clear a human-readable alias for a wallet |\n| `fund` | Fund a wallet from the testnet faucet |\n| `change-password` | Change keystore encryption password |\n| `decrypt-keystore` | Export keystore contents (decrypt to plaintext) |\n| `remove` | Remove a wallet from the keystore |\n\n```bash\nxrpl-up wallet new\nxrpl-up wallet fund --account rMyAddress\nxrpl-up wallet list\n```\n\n---\n\n### `xrpl-up account`\n\nAccount query and management. The `account` command provides both query subcommands and mutation subcommands.\n\n| Subcommand | Description |\n|------------|-------------|\n| `info` | Account flags, sequence, balance, signer list |\n| `balance` | XRP and IOU balances |\n| `transactions` | Recent transaction history (replaces `tx list`) |\n| `offers` | Open offers on the DEX |\n| `trust-lines` | Trust lines (replaces `trustline list`) |\n| `channels` | Open payment channels |\n| `nfts` | NFTs owned by the account |\n| `mptokens` | MPT balances held by the account |\n| `set` | Enable/disable account flags (replaces `accountset set/clear`) |\n| `set-regular-key` | Set or remove the regular key |\n| `delete` | Delete the account |\n\n```bash\nxrpl-up account info rMyAddress --node local\nxrpl-up account transactions rMyAddress --node local\nxrpl-up account trust-lines rMyAddress --node local\nxrpl-up account balance rMyAddress --node testnet\n```\n\n---\n\n### `xrpl-up payment`\n\nSend a Payment transaction. Alias: `xrpl-up send`.\n\n```bash\n# Send XRP\nxrpl-up payment --to rDest... --amount 10 --node local --seed sSrc...\n\n# Send IOU\nxrpl-up payment --to rDest... --amount \"10/USD/rIssuer...\" \\\n  --node local --seed sSrc...\n\n# Send MPT\nxrpl-up payment --to rDest... --amount \"500/00070C44...\" \\\n  --node local --seed sSrc...\n```\n\n| Flag | Description |\n|------|-------------|\n| `--to <address>` | Destination address or alias |\n| `--amount <amount>` | Amount: `10` = XRP, `10/USD/rIssuer` = IOU, `500/<issuanceId>` = MPT |\n| `--destination-tag <n>` | Destination tag |\n| `--memo <text>` | Memo to attach (repeatable) |\n| `--send-max <amount>` | SendMax for cross-currency payments |\n| `--deliver-min <amount>` | Minimum delivery (enables partial payments) |\n| `--partial` | Set tfPartialPayment flag |\n| `--dry-run` | Print signed transaction without submitting |\n\n---\n\n### `xrpl-up multisig`\n\nMulti-signature signer list management (replaces `accountset signer-list`).\n\n```bash\nxrpl-up multisig --help\n```\n\n---\n\n### `xrpl-up credential`\n\nManage DID-based credentials on the XRP Ledger.\n\n```bash\nxrpl-up credential --help\n```\n\n---\n\n### `xrpl-up did`\n\nManage Decentralized Identifiers (DID) on the XRP Ledger.\n\n```bash\nxrpl-up did --help\n```\n\n---\n\n### `xrpl-up oracle`\n\nPrice oracle management on the XRP Ledger.\n\n```bash\nxrpl-up oracle --help\n```\n\n---\n\n### `xrpl-up permissioned-domain`\n\nManage Permissioned Domains on the XRP Ledger (XLS-80d).\n\n```bash\nxrpl-up permissioned-domain --help\n```\n\n---\n\n### `xrpl-up vault`\n\nManage vaults on the XRP Ledger.\n\n```bash\nxrpl-up vault --help\n```\n\n---\n\n### `xrpl-up amendment`\n\nInspect 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`).\n\n> **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`.\n\n> **Local only for mutations:** `enable` writes to the genesis config and only applies to the local sandbox. `list` and `info` work on any network.\n\n#### `xrpl-up amendment list`\n\nLists all amendments known to the target node with their enabled/supported status.\n\n```bash\n# List amendments on the local sandbox\nxrpl-up amendment list --local\n\n# List disabled amendments only\nxrpl-up amendment list --local --disabled\n\n# Side-by-side diff: local vs testnet\nxrpl-up amendment list --local --diff testnet\n\n# List amendments on testnet\nxrpl-up amendment list --network testnet\n```\n\n#### `xrpl-up amendment info <nameOrHash>`\n\nShows full details for a single amendment. Accepts the amendment name or a hash prefix.\n\n```bash\nxrpl-up amendment info PermissionedDomains --local\nxrpl-up amendment info AMM --network testnet\nxrpl-up amendment info A730EB18 --local   # hash prefix lookup\n```\n\n#### `xrpl-up amendment enable <nameOrHash>`\n\nQueues 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.\n\n```bash\nxrpl-up amendment enable PermissionedDomains --local\n# ⚠  Activating this amendment requires a full node reset.\n#    All ledger data, funded accounts, and snapshots will be wiped.\n#  Reset and restart the local node now? [y/N]\n\n# Skip the prompt and reset automatically:\nxrpl-up amendment enable PermissionedDomains --local --auto-reset\n```\n\n> **Standalone mode only.** `enable` modifies the genesis config and only takes effect after a reset — it requires standalone mode (`xrpl-up start` without `--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 an `enable`, simply run `xrpl-up reset` without re-enabling the amendment.\n\n---\n\n### `xrpl-up init [directory]`\n\nScaffolds 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.\n\n> **Prerequisite:** `xrpl-up` must be available on PATH. Until the package is published to npm, install from source with `npm link` (see [Installation](#installation)). The generated `package.json` scripts (`npm run start`, `npm run accounts`) call `xrpl-up` from PATH and do not re-install it locally.\n\n```bash\nxrpl-up init\nxrpl-up init my-project\n```\n\n**Generated files:**\n\n```\nmy-project/\n├── xrpl-up.config.js          # Network configuration defaults + custom network support\n├── package.json\n├── tsconfig.json\n├── .gitignore\n└── scripts/\n    ├── example-payment.ts     # Send XRP + verify sender/receiver balances\n    ├── example-token.ts       # Issue a custom IOU token (DefaultRipple + TrustSet + Payment)\n    ├── example-dex.ts         # Place a DEX order, list it, cancel it (⚠ needs counterparty to fill)\n    ├── example-nft.ts         # Full NFT lifecycle: mint → sell offer → accept → burn\n    ├── example-mpt.ts         # Issue a Multi-Purpose Token: create issuance → opt in → transfer\n    └── example-amm.ts         # Create an AMM pool and execute a swap (local only)\n```\n\nWhen `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.\n\n---\n\n### `xrpl-up snapshot`\n\nSave 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.\n\n> **Requires `--local-network` mode.** Snapshots tar the named Docker volume (`xrpl-up-local-db`) into a self-contained `.tar.gz` file. 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.\n\n```bash\n# Save the current ledger state\nxrpl-up snapshot save before-amm\n\n# List saved snapshots\nxrpl-up snapshot list\n\n# Restore to a previous checkpoint (~5–10s: rippled + faucet stop, volume restored, both restart)\nxrpl-up snapshot restore before-amm\n```\n\nEach 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.\n\n**Typical workflow:**\n\n```bash\nxrpl-up start --local-network --detach\n\n# Run expensive setup (fund accounts, create AMM pool, set trust lines...)\nxrpl-up faucet --network local\n# Wait for funded accounts to appear on the validated ledger (~4s consensus close).\n# Snapshot save stops services before archiving — unvalidated transactions may be lost.\nxrpl-up accounts --local                        # confirm accounts are on-ledger\nxrpl-up snapshot save after-setup\n\n# Run tests, mutate state...\n\n# Roll back to known-good state and run again\nxrpl-up snapshot restore after-setup\nxrpl-up accounts --local    # shows accounts as of snapshot time\n```\n\n**Fresh start from a snapshot after reset:**\n\n```bash\nxrpl-up reset                                    # wipe everything\nxrpl-up start --local-network --detach          # start sandbox (creates new volume)\nxrpl-up snapshot restore after-setup             # restore saved state\nxrpl-up accounts --local                         # snapshot accounts restored\n```\n\nSnapshots are stored at `~/.xrpl-up/snapshots/` and are portable — copy them to any machine and restore. Each snapshot produces three files:\n- `<name>.tar.gz` — compressed node DB volume (typically 5–100 MB)\n- `<name>-accounts.json` — account store at snapshot time\n- `<name>-meta.json` — snapshot metadata (format version)\n\n---\n\n### `xrpl-up config`\n\nManage and validate rippled configuration.\n\n#### `xrpl-up config export`\n\nPrints the auto-generated `rippled.cfg` to stdout, or writes it to a file. Use this as a starting point for a custom config.\n\n```bash\n# Print to stdout\nxrpl-up config export\n\n# Save to file\nxrpl-up config export --output my-rippled.cfg\n\n# Export with debug log level\nxrpl-up config export --debug --output my-rippled.cfg\n```\n\n#### `xrpl-up config validate <file>`\n\nValidates a `rippled.cfg` for compatibility with xrpl-up before you use it. Checks for blocking errors, warnings, and prints recommendations.\n\n```bash\nxrpl-up config validate my-rippled.cfg\n```\n\n**What is checked:**\n\n| Severity | Check |\n|----------|-------|\n| Error | WebSocket port must be `6006` (hardcoded by xrpl-up) |\n| Error | WebSocket `ip` must be `0.0.0.0` (faucet container access) |\n| Error | WebSocket `admin` must include `0.0.0.0` (admin commands) |\n| Error | `[ssl_verify]` must be `0` |\n| Error | `[node_db]` and `[database_path]` must be present |\n| Warning | `node_size = large/huge` risks OOM on developer laptops |\n| Warning | `send_queue_limit < 100` may throttle heavy test suites |\n| Recommendation | Add `send_queue_limit = 500` for AMM testing |\n\nExit code `1` if any errors are found, `0` otherwise.\n\n**Custom config workflow:**\n\n```bash\n# 1. Export the default as a starting point\nxrpl-up config export --output my-rippled.cfg\n\n# 2. Edit — e.g. change node_size, send_queue_limit, log level\n$EDITOR my-rippled.cfg\n\n# 3. Validate before starting\nxrpl-up config validate my-rippled.cfg\n\n# 4. Start with the custom config\nxrpl-up start --local --config my-rippled.cfg\n```\n\nValidation also runs automatically when `--config` is passed to `xrpl-up start --local` — the sandbox will not start if there are blocking errors.\n\n---\n\n## CI/CD\n\nDocker is available on all GitHub-hosted runners (`ubuntu-latest`, `macos-latest`).\n\nStandalone mode (the default) is recommended for CI — it starts in seconds, has instant ledger closes, and needs no volume management.\n\n```yaml\n# .github/workflows/test.yml\nsteps:\n  - run: xrpl-up start --local --detach\n  - run: npm test\n  - run: xrpl-up stop\n    if: always()\n```\n\n> **First run:** `xrpl-up start` automatically pulls the rippled Docker image (~1 GB) on first run and shows download progress. Subsequent runs reuse the cached image.\n\n---\n\n## Configuration\n\n`xrpl-up.config.js` in your project root defines named networks used by `run`, `accounts`, `status`, and remote `start`/`faucet` flows:\n\n```js\nmodule.exports = {\n  networks: {\n    local: {\n      url: 'ws://localhost:6006',\n      name: 'Local rippled (Docker)',\n    },\n    testnet: {\n      url: 'wss://s.altnet.rippletest.net:51233',\n      name: 'XRPL Testnet',\n    },\n    devnet: {\n      url: 'wss://s.devnet.rippletest.net:51233',\n      name: 'XRPL Devnet',\n    },\n  },\n  defaultNetwork: 'local',\n};\n```\n\nAdd any custom WebSocket endpoint as a named network and use it with `--network <name>`.\n\n---\n\n## Supported Networks\n\n| Key | Endpoint | Faucet |\n|-----|----------|--------|\n| `local` | `ws://localhost:6006` | Yes (genesis wallet, no limits) |\n| `testnet` | `wss://s.altnet.rippletest.net:51233` | Yes (rate limited) |\n| `devnet` | `wss://s.devnet.rippletest.net:51233` | Yes (rate limited) |\n\n> **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-network` has ~4s consensus closes but adds persistence and snapshot support. Use testnet for final validation against real network state.\n\n---\n\n## Data Storage\n\nAccount seeds, generated configs, and snapshots are stored at:\n\n```\n~/.xrpl-up/\n  local-accounts.json         # funded account seeds (local mode)\n  testnet-accounts.json       # funded account seeds (testnet)\n  devnet-accounts.json        # funded account seeds (devnet)\n  docker-compose.yml          # generated on each start\n  rippled.cfg                 # generated on each start (or custom via --config)\n  snapshots/\n    before-amm.tar.gz         # node DB volume snapshot (--local-network mode)\n    before-amm-accounts.json  # account store at snapshot time\n    before-amm-meta.json      # snapshot metadata\n    after-setup.tar.gz\n    after-setup-accounts.json\n    after-setup-meta.json\n```\n\n`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.\n\n---\n\n## License\n\nMIT\n","readmeFilename":"README.md","_rev":"1-15c7c84263a3d73a9f5726cf454f89bb"}