Metadata & Metadata Pointer
Token-2022 metadata and metadata pointer extensions store name, symbol, and URI on the mint itself, or point to an external metadata account. They reduce dependence on Metaplex Token Metadata for simple fungible branding.
Recipe
spl-token create-token \
--program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
--decimals 6 \
--enable-metadata// Read parsed mint extensions from RPC jsonParsed where supported
const info = await rpc.getAccountInfo(mint, { encoding: "jsonParsed" }).send();When to reach for this:
- Branded fungible tokens without separate metadata PDA
- Wallets displaying name/symbol from mint account directly
- Pointing to off-chain JSON for icon and description
- Simpler token launches than full Metaplex pipeline
Working Example
MINT=$(spl-token create-token \
--program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
--decimals 6 \
--enable-metadata | awk '/Creating token/{print $3}')
spl-token initialize-metadata "$MINT" "My Token" "MTK" "https://example.com/meta.json" \
--program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb
spl-token display "$MINT" --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEbimport { createSolanaRpc, address } from "@solana/kit";
const rpc = createSolanaRpc("https://api.mainnet-beta.solana.com");
const mint = address("MINT_PUBKEY");
const { value } = await rpc.getAccountInfo(mint, { encoding: "jsonParsed" }).send();
// Extension fields vary by RPC parser version - fall back to manual decode
console.log(value?.data);What this demonstrates:
- Metadata lives in mint extension TLV data
- URI typically points to off-chain JSON (image, description)
- Metadata pointer extension can reference separate metadata account instead
Deep Dive
How It Works
- Token metadata extension embeds name, symbol, uri in mint account
- Metadata pointer extension stores pubkey of external metadata holder
- Update authority (if set) can change URI/name per extension rules
- DAS and explorers increasingly index Token-2022 metadata extensions
Metadata vs Metaplex
| Approach | Account model | Best for |
|---|---|---|
| Token-2022 metadata | On mint | Fungible branding |
| Metaplex Token Metadata | Separate metadata PDA | NFTs, royalties, collections |
| Metaplex Core | Single Core asset account | Modern NFTs |
TypeScript Notes
// Pair on-chain name/symbol with DAS getAsset for unified portfolio UI
// Cache URIs; validate HTTPS and content hash for securityGotchas
- Immutable name/symbol - some fields fixed at init. Fix: verify immutability flags before launch.
- HTTP metadata URIs - tamperable off-chain. Fix: prefer Arweave/IPFS; pin content.
- Wallet only reads Metaplex - may ignore Token-2022 metadata. Fix: test target wallets or submit token list.
- NFT expectations - metadata extension alone does not make NFT. Fix: supply=1 + decimals=0 + NFT standard if needed.
- Oversized URI strings - increases mint account rent. Fix: short gateway URLs to immutable storage.
Alternatives
| Alternative | Use When | Don't Use When |
|---|---|---|
| Metaplex Token Metadata | NFTs with royalties/collections | Simple fungible only |
| Metaplex Core | New NFT projects | Fungible token |
| Off-chain registry only | Fast MVP | On-chain discoverability needed |
FAQs
What is Token-2022 metadata?
On-mint extension storing name, symbol, and URI for wallet display.
What is metadata pointer?
Extension storing pubkey of another account holding metadata bytes.
Can I update URI after launch?
Depends on update authority in extension - check immutability at init.
Do NFTs use this?
Possible but Metaplex Core/Token Metadata remain dominant for NFT features.
Does DAS index Token-2022 metadata?
Major DAS providers increasingly include extension metadata in getAsset.
JSON schema for URI?
Similar to Metaplex off-chain JSON - name, symbol, image fields common.
Who can initialize metadata?
Mint authority or dedicated metadata authority per extension config.
Rent impact?
Longer name/symbol/uri strings increase mint account size and rent.
Compatible with transfer fees?
Yes - extensions compose on same mint with size/CU planning.
Should I still use Metaplex for fungible?
Token-2022 metadata is simpler when you do not need NFT collection features.
How do explorers show icon?
Fetch URI JSON off-chain; cache and validate content.
Mainnet program ID?
TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb for all Token-2022 instructions.
Related
- Token-2022 Basics - extensions intro
- Metadata & Storage - off-chain JSON
- Token Metadata - legacy NFT metadata
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.