Sending SOL & Transactions
Send native SOL, confirm signatures, and inspect transaction outcomes from the terminal.
Search across all documentation pages
Send native SOL, confirm signatures, and inspect transaction outcomes from the terminal.
Quick-reference recipe card - copy-paste ready.
solana transfer <RECIPIENT> 0.5
solana transfer <RECIPIENT> 0.5 --allow-unfunded-recipient
solana confirm <SIGNATURE>
solana transaction <SIGNATURE>When to reach for this:
solana config set --url devnet
solana airdrop 2
RECIPIENT="<RECIPIENT_PUBKEY>"
SIG=$(solana transfer "$RECIPIENT" 0.25 --allow-unfunded-recipient --fee-payer ~/.config/solana/id.json)
solana confirm -v "$SIG"
solana balance "$RECIPIENT"
solana transaction "$SIG" --output json-compact | jq '.transaction.message'What this demonstrates:
transfer builds, signs, and submits a system transfer instruction.--allow-unfunded-recipient creates the recipient system account if missing.confirm -v prints commitment-level status and error logs on failure.transaction fetches the decoded transaction for post-mortems.--fee-payer overrides.| Flag | Effect |
|---|---|
--allow-unfunded-recipient | Create recipient system account |
--fee-payer <KEYPAIR> | Separate payer for fees |
--with-memo <TEXT> | Attach memo program instruction |
--no-wait | Return signature without confirming |
# Dry-run style check: fund then verify decrease
BEFORE=$(solana balance)
solana transfer <RECIPIENT> 0.1
AFTER=$(solana balance)
echo "sent: $(echo "$BEFORE - $AFTER" | bc)"solana balance and leave fee headroom.confirmed. Fix: pass --commitment finalized for treasury payouts.spl-token transfer instead.| Alternative | Use When | Don't Use When |
|---|---|---|
@solana/kit client | App-integrated sends with custom instructions | One-off CLI payments |
spl-token transfer | Moving fungible tokens | Native SOL only |
| Durable nonce transactions | Long-lived signing sessions | Simple one-shot CLI transfers |
| Jito bundles | Latency-sensitive mainnet landing | Devnet testing |
Base fee is 5,000 lamports per signature unless you add priority fees via separate compute budget instructions (not added by default CLI transfer).
Yes - amounts support decimal SOL like 0.0001.
Returns the signature immediately without polling confirmation - useful in scripts that confirm separately.
Use --from <KEYPAIR> to sign the transfer with a non-default keypair file.
Run solana confirm -v for logs, then solana transaction for full meta. Common causes: insufficient funds, blockhash expiry, or account locks.
Yes: solana transfer <ADDR> 0.1 --with-memo "invoice-123".
confirmed is usually sub-second on healthy RPC. finalized takes one to two epochs - minutes on mainnet.
Yes - point config at local validator and ensure both accounts have lamports.
The CLI transfer command sends one recipient per invocation. Batch with a custom transaction or script for multiples.
solana transaction <SIG> --output json-compact > tx.json captures meta, logs, and balances.
Stack versions: This page was written for Agave 4.1.1, Solana CLI 3.0.10, Anchor 0.32.1, anchor-lang 0.32.1, Rust 1.91.1, @solana/kit 7.0.0, Surfpool 0.12.0, and LiteSVM 0.6.x.
Reviewed by Chris St. John·Last updated Jul 16, 2026