Solana's Token-2022 program (also called Token Extensions) is the next-generation token standard on Solana. It extends the original SPL Token program with features that previously required custom programs or weren't possible at all — like built-in transfer fees, confidential balances, and non-transferable tokens.
If you're building a token, launching a project, or just trying to understand what Token-2022 means for the Solana ecosystem, this guide covers everything you need to know.
What Is Token-2022?
Token-2022 is a new on-chain program that replaces (and is backward-compatible with) the original SPL Token program. Rather than one monolithic upgrade, it introduces a modular extensions system. Token creators can enable specific extensions at mint creation time, adding features like transfer fees or metadata directly into the token's on-chain account.
The original SPL Token program was intentionally minimal — it handled minting, transferring, and burning tokens, and nothing else. This simplicity was a strength for composability but meant that common features required workaround solutions. Token-2022 brings those features into the standard.
Key Differences from SPL Token
| Aspect | SPL Token | Token-2022 |
|---|
| Transfer fees | Not supported | Built-in extension |
| Token metadata | Requires Metaplex | Native metadata extension |
| Confidential transfers | Not possible | ZK-proof based privacy |
| Interest-bearing | Not supported | Display extension |
| Non-transferable | Workarounds only | Native extension |
| Permanent delegate | Not possible | Built-in extension |
| Transfer hooks | Not possible | Custom program callbacks |
Core Extensions Explained
Transfer Fees
This is arguably the most impactful extension for token projects. Transfer fees let you collect a percentage of every token transfer automatically at the protocol level.
How it works:
When a Transfer Fee extension is configured, every transfer withholds a percentage (up to a configurable maximum) from the recipient. The withheld fees accumulate in each recipient's token account and can be harvested by the fee authority to a designated account.
Use cases:
- Revenue generation for project treasuries
- Deflationary mechanisms (collect fees and burn them)
- Redistribution to holders (collect and distribute)
- Protocol sustainability without relying on external revenue
Configuration options:
- Fee basis points (e.g., 100 = 1%)
- Maximum fee cap (prevents excessive fees on large transfers)
- Fee authority (can update fee parameters)
- Withdraw authority (can collect accumulated fees)
Important considerations:
Transfer fees affect DeFi composability. Some DEXs and protocols have added Token-2022 support, but not all. Jupiter and Raydium support Token-2022 tokens, though pools with transfer-fee tokens may have different routing behavior. Always check compatibility before building around transfer fees.
Interest-Bearing Tokens
The Interest-Bearing extension allows a token to display an interest rate that continuously adjusts the UI-displayed balance. This is a display-only feature — it doesn't actually create new tokens. The underlying raw balance stays the same, but wallets and explorers show an adjusted amount based on the configured rate and elapsed time.
How it works:
The mint stores a rate (in basis points) and a timestamp. Applications calculate the displayed balance as:
displayed_balance = raw_balance * (1 + rate * time_elapsed)
Use cases:
- Stablecoin savings products
- Yield-bearing stablecoins
- Bond-like instruments
- Any token that should reflect accrued value over time
Important: Since this is display-only, the actual token supply doesn't change. Applications must implement the interest calculation logic in their UI. Real yield distribution still requires a separate mechanism (like periodic airdrops or a claim function).
Confidential Transfers
This extension brings zero-knowledge proof-based privacy to Solana token transfers. It lets users send and receive tokens without revealing the transfer amount publicly.
How it works:
Balances and transfer amounts are encrypted using ElGamal encryption. When a transfer occurs, a zero-knowledge proof verifies that the sender has sufficient balance and the amounts are consistent — without revealing the actual numbers. Only the sender and recipient can decrypt the amounts.
What's private:
- Transfer amounts
- Account balances (the encrypted balance)
What's NOT private:
- Sender address
- Recipient address
- The fact that a transfer occurred
This is similar to how Zcash shielded transactions work, but implemented at the token level rather than the chain level. It's particularly relevant for business payments, payroll, and any use case where amount privacy matters.
Current limitations:
- Higher computational cost per transaction
- Not all wallets support confidential transfers yet
- DeFi integration is limited (AMMs need to see balances to function)
Non-Transferable Tokens (Soulbound)
This extension creates tokens that cannot be transferred after they're minted to a wallet. Once received, they stay in that wallet forever (unless burned).
Use cases:
- Achievement badges
- Proof of attendance (POAP-style)
- KYC/verification attestations
- Reputation scores
- Membership credentials
This is Solana's native implementation of what Ethereum calls "soulbound tokens" (SBTs). No custom program needed — just enable the extension at mint creation.
Permanent Delegate
The Permanent Delegate extension assigns an authority that can transfer or burn tokens from any holder's account. This sounds alarming, but it has legitimate use cases.
Use cases:
- Regulated stablecoins (compliance requirements for freezing/seizing)
- Gaming tokens (reclaim in-game currency from banned accounts)
- Subscription tokens (revoke access when subscription expires)
- DAO-controlled tokens (governance-mandated actions)
Transparency note: Since this is an on-chain extension, anyone can verify whether a token has a permanent delegate before acquiring it. Tools like Solscan display extension details on token pages.
Transfer Hooks
Transfer hooks are the most flexible extension. They allow a custom program to be called on every token transfer, enabling arbitrary logic to execute as part of the transfer instruction.
How it works:
When you configure a transfer hook, you specify a program ID. Every time the token is transferred, the Token-2022 program invokes your specified program with the transfer details. Your program can then:
- Enforce custom transfer restrictions (whitelist/blacklist)
- Collect fees in a different token
- Update on-chain state (like loyalty points)
- Log analytics data
- Implement complex compliance rules
Example use cases:
- Only allow transfers between KYC-verified wallets
- Charge fees in USDC instead of the transferred token
- Implement transfer cooldown periods
- Track transfer count for loyalty rewards
Metadata Extension
The native metadata extension stores token metadata (name, symbol, URI, additional key-value pairs) directly in the mint account. This eliminates the need for separate Metaplex metadata accounts, reducing cost and complexity.
Advantages over Metaplex metadata:
- No separate account needed (lower rent costs)
- Simpler to create and update
- No dependency on the Metaplex program
- Custom key-value fields for arbitrary data
When to still use Metaplex:
- When you need collection/verification features
- For NFTs that require the full Metaplex standard
- When interacting with marketplaces that only support Metaplex
Creating a Token-2022 Token
Here's a high-level overview of creating a token with extensions using the Solana CLI and the spl-token command:
# Create a token with transfer fee (1% fee, max 1000 tokens)
spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
--transfer-fee 100 1000
# Create a non-transferable token
spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
--enable-non-transferable
# Create with metadata
spl-token create-token --program-id TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb \
--enable-metadata
For programmatic creation using TypeScript, the @solana/spl-token library provides full Token-2022 support:
import {
createMint,
TOKEN_2022_PROGRAM_ID,
createInitializeTransferFeeConfigInstruction,
} from '@solana/spl-token';
Multiple extensions can be combined on a single mint. For example, you could create a token with both transfer fees and metadata, or one with confidential transfers and a permanent delegate.
DeFi Compatibility
Token-2022 adoption in DeFi has been gradual but steady:
- Jupiter: Supports Token-2022 swaps including tokens with transfer fees. Fee-on-transfer tokens are routed correctly.
- Raydium: Supports Token-2022 pools. CLMM and standard AMM pools both work with Token-2022 tokens.
- Orca: Whirlpools support Token-2022 tokens. Some extensions (like transfer hooks) may require additional integration work.
The main DeFi challenge with Token-2022 is that transfer fees and hooks add complexity to swap calculations. AMMs need to account for the fee when computing output amounts, and transfer hooks add computational overhead that affects transaction size limits.
When to Use Token-2022
Use Token-2022 if:
- You need transfer fees as a core mechanic
- Privacy (confidential transfers) is important for your use case
- You want soulbound/non-transferable tokens
- You need custom transfer logic (transfer hooks)
- You want on-chain metadata without Metaplex
Stick with SPL Token if:
- Maximum compatibility is the priority
- You're launching a simple memecoin or utility token
- You want the broadest DEX and wallet support
- You don't need any of the new extensions
Final Thoughts
Token-2022 represents a significant evolution in what's possible with Solana tokens. The extensions model gives creators powerful tools — from transfer fees that create sustainable revenue to confidential transfers that protect financial privacy.
The ecosystem is still catching up with full support. Wallet support varies by extension, and not every DeFi protocol handles all extensions correctly yet. But the trajectory is clear: Token-2022 is becoming the standard for new token launches that need more than basic transfer functionality.
Before building with Token-2022, check that the specific extensions you plan to use are supported by the wallets and DEXs your users will interact with. Start on devnet, test thoroughly with real DeFi protocols, and verify the user experience end-to-end.
For related topics, check out our guide on how Solana token extensions work and the SPL token creation guide.
FAQ
Are Token-2022 tokens compatible with all Solana wallets?
Most major wallets including Phantom and Solflare support basic Token-2022 tokens. However, support for specific extensions varies. Confidential transfers and transfer hooks may not display correctly in all wallets. Always test with the specific wallets your users will use.
Can I convert an existing SPL Token to Token-2022?
No, you cannot upgrade an existing token in-place. Token-2022 extensions must be set at mint creation. If you need Token-2022 features for an existing token, you'd need to create a new Token-2022 mint and implement a migration (swap old tokens for new ones). See our token migration guide for details.
Do transfer fees affect DEX trading?
Yes. When a Token-2022 token with transfer fees is traded on a DEX, the fee is applied to the transfer. DEXs like Jupiter and Raydium account for this in their swap calculations, but users should be aware that the effective received amount is reduced by the fee percentage.
What's the cost difference between SPL Token and Token-2022?
Token-2022 tokens with extensions require more account space, which means slightly higher rent costs. A basic Token-2022 mint without extensions costs about the same as an SPL Token mint. Each enabled extension adds to the account size and thus the rent. Transfer fees add roughly 0.003 SOL in additional rent; metadata varies based on content length.