SPL Token vs Token-2022: How to Choose a Solana Token Program
Solana has two official token programs in common use: the original Token Program and Token-2022. They share the familiar mint, token account, authority, and instruction model, but they have different program IDs. Token-2022 adds opt-in extensions for behavior and metadata. The practical choice depends less on novelty and more on which exact features every wallet, exchange, pool, indexer, and program in the intended path can process.
Editorial research by Coinatio, checked against the primary documentation cited below. Educational content only.

- Use the original Token Program when broad compatibility matters and no Token-2022 extension is required.
- Choose Token-2022 extensions before initializing the mint or affected accounts.
- Test each selected extension across the complete integration path, not only in the issuer's client.
- Pass and validate the token program ID explicitly in onchain programs and transaction builders.
What remains the same
Both programs represent a fungible asset with a mint account and user holdings with token accounts. A mint records supply, decimals, mint authority, and freeze authority. Associated token accounts can be derived for either program when clients use the correct token program ID. Familiar operations such as minting, transferring, burning, approving delegates, and closing accounts remain recognizable.
The programs are not interchangeable at runtime. An account is owned by one program, and instructions must target that program. A client that hardcodes the legacy program ID may derive the wrong associated account or reject a Token-2022 mint. An onchain program should check account ownership and accepted program IDs rather than infer compatibility from account shape alone.
What Token-2022 adds
Token-2022 keeps the original instruction layouts for the shared instruction range and adds extensions using type-length-value data after the base account fields. Extensions include transfer fees, transfer hooks, confidential transfers, non-transferable tokens, permanent delegates, metadata pointers, token metadata, interest-bearing configuration, default account state, and several authority controls. Each extension changes operational assumptions and some require extra accounts or instructions during transfer.
Extensions generally must be allocated and initialized in the required order before the mint or token account is initialized. Required account size depends on the selected extensions, affecting rent and transaction construction. Some mint extensions imply account extensions for holders. Use official sizing helpers rather than manually adding byte lengths, and model authorities for each extension separately.
Compatibility is feature-specific
A product stating that it supports Token-2022 may support plain transfers but not transfer hooks, confidential balances, withheld fees, or metadata discovery. Inventory the actual transaction path: wallet creation, token-account creation, swaps, liquidity deposits, custody, payments, bridges, explorers, tax exports, and indexing. Ask each integration which program IDs and extensions it accepts, then reproduce the flow on devnet or a local validator.
Raydium documents Token-2022 support with restrictions that vary by pool program and extension. Other protocols can have different allowlists or user-interface coverage. Transfer-fee tokens also require applications to distinguish the requested amount, fee, received amount, and any withheld fee. A generic successful transfer test is not enough to validate downstream accounting.
Decision and launch checklist
Start with required behavior, not a preferred program. If standard minting and transfers satisfy the specification, the original program reduces integration variables. If a Token-2022 extension is essential, keep the extension set as small as possible and document its authorities and lifecycle.
- List required extensions, their initialization order, account-size impact, and controlling authorities.
- Confirm wallet, custodian, exchange, pool, explorer, indexer, and custom-program support for every extension.
- Use the correct program ID in mint creation, associated token account derivation, instructions, and account validation.
- Test minting, checked transfers, fees, hooks, burns, freezes, authority rotation, and account closure where applicable.
- Record mint address, program ID, extension state, metadata method, authorities, and immutable settings.
- Repeat production-shaped transactions with the exact client and program versions intended for launch.
Scope and limitations
This comparison addresses technical program selection, not whether a feature is suitable for a business model. Support changes over time and can differ between a protocol's contracts, SDK, and interface. Confidential extensions have additional cryptographic and operational requirements. Transfer hooks introduce external program dependencies. Permanent delegates and default-frozen accounts materially alter holder expectations. Review the current official extension documentation and each integration's current policy immediately before deployment.
Sources
This article explains technical and market-data concepts. It is not financial, legal, tax, or investment advice. Verify current chain state and primary documentation independently.


