SOLSTACKBlog
← All guides

Token Creation & Minting

Non-Transferable (Soulbound) Tokens on Solana

How Token-2022's NonTransferable extension enforces "can never be moved" at the protocol level, what it's actually useful for, and where it fits alongside the rest of the Token-2022 extensions.

2026-09-21·5 min read·Verified against mainnet-beta

Most tokens exist to be traded. Occasionally you want the opposite — a token that proves something (attendance, a credential, a completed action) precisely because it can't be sold or transferred to someone who didn't earn it. Token-2022's NonTransferable extension makes that a protocol-enforced guarantee rather than a social convention.

What "soulbound" means here

The term comes from the idea of an item bound to a specific character rather than tradeable — applied to tokens, it means the token can be minted into a wallet and later burned by that wallet, but it can never move to a different address. Not "discouraged by the app UI." Not "the marketplace won't list it." The Token-2022 program itself rejects any transfer instruction against a mint with NonTransferable set, unconditionally, for every wallet, forever.

This is the same enforcement model as a transfer fee or a freeze — a rule baked into the mint that every application talking to the token program has to respect, because there's no way around it at the protocol level.

What it's actually good for

  • Proof of attendance / participation. A token minted to everyone who showed up to an event, that can't later be bought by someone who wasn't there.
  • Credentials and completions. A course certificate, a verified milestone — value comes specifically from it being non-transferable, the way a diploma isn't meant to be sellable.
  • Reputation and identity signals. A badge that's supposed to represent your history, not whoever currently holds the token.

None of these work as regular tradeable tokens — the entire point evaporates the moment resale is possible. NonTransferable is the difference between "please don't sell this" and "this cannot be sold."

What it isn't good for

If any part of your token's value model depends on secondary trading — a community token, anything meant to appreciate or be swapped — NonTransferable is the wrong extension entirely; it would make the token unsellable by design. It's a narrow, purpose-built tool, not a general trust or safety feature.

Interaction with other extensions

NonTransferable can combine with other Token-2022 extensions — a non-transferable token can still carry on-mint metadata (name, symbol, image via MetadataPointer/TokenMetadata), for instance, so a soulbound credential can still display properly in a wallet. It generally doesn't make sense alongside a transfer fee, since a fee has nothing to tax if transfers are blocked entirely.

A note on tooling support

Not every Token-2022 creator tool builds every extension the spec defines — NonTransferable is one of the less commonly exposed ones, since it's a narrower use case than a transfer fee or interest-bearing balance. Solstack's Token-2022 Creator currently builds transfer-fee and interest-bearing mints; if you need NonTransferable specifically, confirm your creator tool of choice actually sets that extension before relying on it — the mint program itself supports it, but not every UI wraps it yet.

Broader background on how Token-2022's extension model works is in Token-2022 metadata extensions and the Token-2022 concepts doc.