Intermediate· Lesson 5 of 8· 3 min
Token-2022 extensions
Token-2022 is the Token program with optional behaviour bolted onto a mint or a token account, chosen once at creation. Here is what each extension does and what it means for the people holding the token.
There are two token programs. The original, TokenkegQfeZyiNwAJbNbGKPFXCWuBvf9Ss623VQ5DA, has a fixed 82-byte mint and 165-byte token account and does exactly one set of things. Token-2022, TokenzQdBNbLqP5VEhdkAS6EPFLC1PHnBqCXEpPxuEb, accepts the same instructions and then allows extra typed data after the base layout: extensions. A mint belongs to one program forever.
Mint extensions
| TransferFeeConfig | A fee in basis points, up to a maximum, withheld from every transfer. Collected by a fee authority. |
|---|---|
| MetadataPointer + TokenMetadata | Name, symbol, URI and key–value pairs stored in the mint. See Token metadata. |
| InterestBearingConfig | A rate that changes the displayed balance over time. The raw amount never changes; wallets scale it. |
| NonTransferable | Tokens can be minted and burned, never moved. Soulbound credentials, memberships. |
| PermanentDelegate | One key that can transfer or burn from any holder's account, without their signature. Regulatory clawback — or a rug. |
| TransferHook | A program of the issuer's choosing runs on every transfer and can reject it. Allowlists, royalties, KYC. |
| DefaultAccountState | New token accounts start frozen until the freeze authority thaws them. An allowlist by default. |
| MintCloseAuthority | Lets the mint be closed and its rent reclaimed once supply is zero. |
| ConfidentialTransfer | Balances and amounts encrypted on-chain, with the auditor key optional. |
Token account extensions
| ImmutableOwner | The account's owner can never be changed. Every associated token account has it. |
|---|---|
| MemoTransfer | Incoming transfers must carry a memo. Exchanges use it to match deposits. |
| CpiGuard | Blocks certain actions when invoked by another program rather than the wallet directly. |
| TransferFeeAmount | Where withheld fees accumulate until the fee authority harvests them. |

- PYUSD, a regulated stablecoin issued on Token-2022 from day one.
- Mint and freeze authority both live, as with USDC.
permanentDelegate: the issuer can move or burn any holder's PYUSD. Required by its regulator; a red flag on anything else.transferHook: a program runs on every transfer. Here it is the issuer's compliance check.transferFeeConfigpresent with the fee set to zero, keeping the option open.tokenMetadata: name and symbol live in the mint, no Metaplex account needed.
Transfer fees in practice
The fee is taken by the Token-2022 program itself, so no exchange or wallet can skip it. It is withheld inside the recipient's token account rather than sent anywhere; the fee authority sweeps withheld amounts out later with a separate instruction. A fee of 100 basis points is 1%; the config also carries a maximum fee per transfer in base units. How to add a transfer fee walks through creating one with Token-2022 Creator.
Choosing
- Need a fee, interest display, soulbound tokens, confidential balances or metadata in the mint: Token-2022.
- Need the widest possible support with no surprises: the original Token program. Every wallet, exchange and indexer reads it.
- Support for Token-2022 is broad in 2026 — major wallets, Jupiter, Raydium, Meteora — but a transfer hook or confidential transfers narrow it. Check the venues you care about before launch.
- The choice is permanent. Migrating means a new mint and a swap for holders.
What a holder should check
Extensions are exactly where a token can be built to take from you. Before buying a Token-2022 mint, read its extension list: a permanent delegate, a transfer fee near 100%, a transfer hook whose program you can't inspect, a default frozen state that needs the issuer to thaw you, or non-transferable when you expected to sell. Token Inspector decodes the list and flags each of these.
// a Token-2022 mint's extensions, as decoded by Token Inspector
transferFeeConfig: { transferFeeBasisPoints: 100, maximumFee: 1000000 } // 1%, capped
metadataPointer: { metadataAddress: <this mint> }
tokenMetadata: { name: "Example", symbol: "EXM", uri: "https://…" }
permanentDelegate: none // good
transferHook: none // good
defaultAccountState: initialized // not frozen — goodWhat to remember
- Token-2022 is a second token program with the same instructions plus optional extensions fixed at creation.
- Mint extensions change the token's rules for everyone: fees, hooks, delegates, frozen-by-default, soulbound.
- Transfer fees are enforced by the program and withheld in the recipient's account until harvested.
- Choose Token-2022 for a specific extension; choose the original for maximum compatibility. Neither can be changed later.
- As a holder, read the extension list. Permanent delegate and transfer hook are the ones to understand before buying.