spl-token CLI
Create SPL Token mints, associated token accounts (ATAs), mint tokens, and transfer balances from the terminal.
Search across all documentation pages
Create SPL Token mints, associated token accounts (ATAs), mint tokens, and transfer balances from the terminal.
Quick-reference recipe card - copy-paste ready.
spl-token create-token
spl-token create-account <MINT>
spl-token mint <MINT> 1000
spl-token transfer <MINT> 50 <RECIPIENT_TOKEN_ACCOUNT>When to reach for this:
solana config set --url devnet
solana airdrop 2
# Create mint with 6 decimals (common for fungible tokens)
MINT=$(spl-token create-token --decimals 6 | grep "Creating token" | awk '{print $3}')
echo "Mint: $MINT"
# Create ATA for your wallet
spl-token create-account "$MINT"
ATA=$(spl-token accounts --token "$MINT" | grep -v "Token accounts" | awk '{print $1}')
echo "ATA: $ATA"
# Mint 1.0 token. The CLI takes UI amounts and scales by the mint's decimals,
# so this is `1`, NOT 1000000. Passing 1000000 here would mint a million tokens.
spl-token mint "$MINT" 1
spl-token balance "$MINT"
spl-token supply "$MINT"What this demonstrates:
create-token initializes a new mint with chosen decimals.create-account creates the ATA owned by your wallet for that mint.mint increases supply when your keypair holds mint authority.spl-token CLI are UI amounts - it applies the mint's decimals for you. Raw base units appear only in instruction data.| Command | Action |
|---|---|
create-token | New mint account |
create-account | ATA for configured owner |
mint | Increase supply (mint authority) |
transfer | Move tokens between token accounts |
authorize | Change or revoke mint/freeze authority |
display | Human-readable mint/account info |
# Transfer to wallet pubkey (CLI resolves ATA)
spl-token transfer "$MINT" 100 <RECIPIENT_WALLET_PUBKEY> --fund-recipient
# Revoke mint authority (fixed supply)
spl-token authorize "$MINT" mint --disablespl-token mint <MINT> 1000 mints 1000 tokens, not 0.001. The CLI takes UI amounts. Fix: pass the human amount directly; never pre-multiply by 10^decimals for the CLI. Multiply only when building instruction data yourself.--fund-recipient or create-account first.spl-token display to see authorities.spl-token transfer.display.| Alternative | Use When | Don't Use When |
|---|---|---|
Anchor anchor_spl | Programmatic minting in on-chain code | Quick manual devnet setup |
@solana/kit + Token program | dApp client integrations | One-off CLI experiments |
| Token-2022 extensions | Transfer fees, metadata pointers | Simple fungible MVP |
mucho scaffolds | Full-stack token launch templates | Learning raw SPL layout |
6 or 9 are common (mirroring USDC or SOL divisibility). Decimals are immutable after mint creation.
Mint defines the token type and supply; token accounts hold balances per owner per mint.
Yes with spl-token transfer <MINT> <AMOUNT> <WALLET_PUBKEY> --fund-recipient - the CLI derives or creates the ATA.
spl-token accounts lists ATAs for the configured wallet.
spl-token burn <TOKEN_ACCOUNT> <AMOUNT> reduces supply if permitted.
Yes - installed alongside solana from the Agave release bundle.
spl-token authorize <MINT> mint --disable after minting the intended supply.
Pays to create the recipient ATA if missing, charged to your fee payer.
Use spl-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb for Token-2022 program ID.
spl-token display <MINT> shows decimals, supply, and authorities.
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