Skip to content
Reference

CLI

The CLI runs the same dispatcher as the desktop app, in-process. Anything the GUI does, the CLI can script. Run via pnpm cli <command> from the repo, or the built reley binary.

Environment

RELAY_PROJECT_ROOT selects the workspace directory. Defaults to ~/.relay-cli-project. RELAY_RPC_URL overrides the resolved RPC endpoint for all commands.

Raw clone & run

Stateless commands. No project, no session - just clone bytes or execute one tx in a throwaway SVM sandbox. Useful for scripting and CI.

clone-program
pnpm cli clone-program <programId> \
  --rpc <url> --out <dir> \
  [--network <name>] [--slot <n>] [--cache <dir>]
clone-account
pnpm cli clone-account <address> \
  --rpc <url> --out <dir> \
  [--network <name>] [--slot <n>] [--cache <dir>]
run
pnpm cli run \
  --program <programId>:<elfPath> [--program ...] \
  [--account <pubkey>:<blobPath> ...] \
  [--payer <secretKeyPath>] \
  --ix <hex> --ix-program <pubkey> \
  [--ix-account <pubkey>:<isSigner>:<isWritable> ...] \
  [--compute-units <n>]

# OR pass a fully-serialized versioned tx:
pnpm cli run --program <pid>:<elf> --tx <base64>

project

commands
pnpm cli project create <name> --rpc <url-or-id> \
  [--network mainnet-beta|devnet|testnet|custom] [--description <text>]
pnpm cli project list
pnpm cli project open <id>
pnpm cli project delete <id>

session

A session is one SVM sandbox instance hydrated with the project's programs and accounts. Reset to discard mutations and re-hydrate.

commands
pnpm cli session create <name> --project <id>
pnpm cli session list [--project <id>]
pnpm cli session reset <id>
pnpm cli session delete <id>

program

Project-scoped program catalog. Clones the Program + IDL on add.

commands
pnpm cli program add <programId> --project <id> \
  [--rpc-url <url>] [--slot <n>]
pnpm cli program list   --project <id>
pnpm cli program remove <programId> --project <id>

account

Cloned accounts (PDAs, mints, vaults) grouped under a program.

commands
pnpm cli account add <address> \
  --project <id> --program <programId> \
  [--label <text>] [--rpc-url <url>] [--slot <n>]

pnpm cli account list   --project <id> [--program <programId>]
pnpm cli account remove <address> --project <id>

tx

send
pnpm cli tx send --session <id> \
  --program <programId> --data <hex> \
  [--account <pubkey>:<isSigner>:<isWritable> ...] \
  [--payer <keypair.json>] \
  [--airdrop <lamports>]  # default 10_000_000_000 (10 SOL)
  [--compute-units <n>]
history
pnpm cli tx history --session <id>
replay
pnpm cli tx replay <signature> \
  [--session <id>] [--rpc-url <archive-url>]
caveat
Replay reads cloned account state at slot - 1 to reconstruct pre-tx state. The default public RPC drops historical reads - point at an archive RPC (Helius, Triton, QuickNode) via --rpc-url.