> For the complete documentation index, see [llms.txt](https://docs.j.tools/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.j.tools/tools/launch/token2022-creator.md).

# Token-2022 Creator: Mint With Extensions

[Token2022 Creator](https://j.tools/en/tools/token2022-creator) mints a token on Solana's Token Extensions program (Token-2022) and lets you switch on extensions a classic SPL token does not support: transfer fee, interest-bearing, default-frozen, permanent delegate, and non-transferable. You configure the token, the flow writes on-chain metadata through the metadata pointer extension, and everything mints in one signed flow: a single transaction most of the time, two when the extension set is large, and three in the rare case where the post-mint instructions still do not fit one transaction. Reach for it when a plain SPL token is not enough, and you need behavior baked into the mint itself.

## What it is

Solana has two token programs. The original SPL Token program mints the plain tokens most launches use. Token-2022, also called Token Extensions, is a newer program with the same core behavior plus optional extensions that change how a token behaves at the protocol level. A transfer fee, interest accrual, a permanent delegate, and a non-transferable (soulbound) flag are all extensions. They live on the mint and the token accounts, enforced by the program, not by a contract you have to deploy.

This tool builds and sends the creation transaction for a Token-2022 mint. You pick the basics (name, symbol, decimals, supply), turn on the extensions you want, set authorities, and sign. The result is a real mint on Solana mainnet, owned by your wallet, with the extensions you chose locked in from block one. If the split between the two programs is new to you, the [SPL vs Token-2022](/concepts/spl-vs-token2022.md) concept page lays it out, and the [Glossary](/getting-started/glossary.md) covers the terms used below.

## Why use this tool

The hard part of Token-2022 is not the idea, it is the ordering. Extensions have to be initialized on the mint account **before** the mint is initialized, and the mint account has to be sized for exactly the extensions you plan to add. Get the account size wrong and the transaction fails. Initialize the mint before the extensions and they are gone for good, because you cannot bolt an extension onto a live mint. Doing this by hand means computing extension byte lengths, allocating the right rent, ordering a stack of instructions correctly, and writing metadata through a pointer that has to agree with the mint address. One wrong offset and you either waste rent or burn a keypair.

This tool does that arithmetic and ordering for you, validates the combinations that are illegal (Transfer Fee and Non-Transferable cannot coexist), and shows the real total before you sign. It is for token launchers who actually need an extension: a project that wants a built-in transfer tax routed to a treasury, a rewards token that accrues interest, a credential or membership token that should never move (soulbound), or a controlled distribution where accounts start frozen.

## How it works (under the hood)

The whole creation happens in one to three transactions that you sign in your own wallet. Here is the actual sequence.

**1. Metadata is prepared off-chain.** If you uploaded an image, it is pinned to IPFS, then a small JSON metadata file (name, symbol, description, image URI, socials) is pinned too. You end up with a stable metadata URI that the mint will point at.

**2. A mint keypair is generated in your browser.** The new token needs its own address. By default a random keypair is generated client-side. If you chose a custom or vanity address, that keypair is ground locally in the browser instead. The mint keypair's secret never leaves the page; it only co-signs the creation transaction to prove ownership of the new address.

**3. The transaction is assembled in the right order.** This is the part that matters for Token-2022. The app builds a single transaction that:

* Creates the mint account with `SystemProgram.createAccount`, sized for the exact set of extensions you turned on, and funded with the rent that size requires.
* Initializes each extension you selected, on the still-uninitialized mint, in the order the program expects. Transfer fee config, interest-bearing config, default account state (frozen), permanent delegate, non-transferable, and the metadata pointer each get their own initialize instruction here.
* Initializes the mint itself with `InitializeMint`, setting decimals and the mint, freeze, and update authorities.
* Writes the token metadata (name, symbol, URI) into the mint through the Token Metadata extension, so the pointer resolves to data stored on the mint itself with no separate Metaplex account.
* Creates your associated token account and mints the initial supply to your wallet. If Default Frozen is on, your own account is thawed first so the supply can land.
* Appends any authority revocations you asked for (mint, freeze, update).

All token instructions target the Token-2022 program ID, not the classic SPL Token program. That program ID difference is exactly why venue support varies (more on that below).

**4. The platform fee is attached as a plain transfer.** A flat SOL fee instruction to the J Tools fee wallet is added to the same transaction. It is part of what you sign and what you see in the fee box, so there is no hidden charge and nothing to claim later. Add-ons (each authority revoke, a custom or vanity address) add their own amount to that total.

**5. Simulate, sign, broadcast.** The app simulates the transaction first to catch failures before they cost you anything. Then your wallet signs first, the mint keypair co-signs, and the app broadcasts to the network. If the extension and revoke instructions are too large to fit in one transaction, the flow splits a second transaction off, simulates it, has you sign it, and confirms it automatically. If that second transaction is still over the 900-byte size limit, it is split once more, so a heavy extension set can ask for a third signature.

## When to use it

Use it when:

* Your launch needs an extension a standard SPL token cannot do: a transfer fee, interest accrual, frozen-by-default accounts, a permanent delegate, or a non-transferable (soulbound) mint.
* You want on-chain metadata through the metadata pointer extension instead of a separate Metaplex account.
* You want extension-aware validation and the real total in front of you before you sign.

Skip it when:

* You only need a normal token. The [Token Creator](/tools/launch/token-creator.md) is simpler and has broader wallet and DEX support.
* You plan to list on a venue that does not support your chosen extension. Token-2022 support is uneven, and some extensions (transfer fee especially) are rejected or mishandled by pools and aggregators that have not added handling for them. Confirm support first: [Token-2022 extensions and DEX compatibility](/concepts/token2022-dex-compatibility.md) maps each extension against pool support.

## Before you start

* A connected wallet. A standard adapter (Phantom, Solflare, Backpack) works, or an imported private-key signer through the wallet source selector.
* Mainnet SOL for the platform fee, the Solana network fee, and the mint and account rent. Token-2022 rent runs higher than classic SPL because extensions take up account space, so the app warns you when it is significant. The flow rejects a zero-balance wallet and runs a balance pre-check before it sends anything.
* Your token details ready: name (2 to 32 characters), symbol (2 to 10), decimals (0 to 9), and a positive initial supply up to 1,000,000,000,000.
* If you plan to charge a transfer fee, a valid fee recipient wallet address in base58.

{% hint style="warning" %}
This is a live mainnet tool that moves funds. The platform fee plus the network fee and Token-2022 mint rent leave your wallet inside the signing transaction. Add-ons stack on top of the base fee: each authority revoke, a custom mint address, and a vanity address each add their own amount. The right-hand fee box shows the full total, the platform fee plus the Solana network fee, before you confirm.
{% endhint %}

## Step by step

{% stepper %}
{% step %}

### Connect and open the form

Connect your wallet through the source selector at the top of the page. The form sits on the left; a live preview of extensions, authorities, and the mint address sits on the right alongside the fee box.
{% endstep %}

{% step %}

### Enter the token basics

Fill in the name, symbol, decimals, and initial supply. Add a description and a logo if you have them (PNG, JPG, GIF, or WEBP upload, or a URL) plus any social links. The image and metadata are uploaded to IPFS before minting and written on-chain through the metadata pointer.
{% endstep %}

{% step %}

### Pick your extensions

Open **Transfer Fee Settings** to set a fee percentage, a max fee cap per transfer, and the required recipient wallet. Open **Advanced Extension Settings** for interest-bearing, default-frozen, non-transferable, and permanent delegate. Remember the rule: extensions initialize at creation and cannot be added later, so turn on everything you need now. Transfer Fee and Non-Transferable cannot both be on.
{% endstep %}

{% step %}

### Choose authority and address options

Decide whether to revoke the mint, freeze, or update authority. If you are unsure what each one controls, the [Mint, freeze, and update authorities](/concepts/authorities.md) page explains them. Each revoke adds to the fee and is permanent once signed. You can also generate a custom mint address or grind a vanity prefix or suffix locally. Custom and vanity are mutually exclusive.
{% endstep %}

{% step %}

### Review the fee box and preview

Check the total in the fee box, the platform fee plus the Solana network fee, and confirm the live preview shows the extensions, authorities, and mint address you expect.
{% endstep %}

{% step %}

### Create and sign

Click **Create Token**. The flow uploads the image and metadata, builds the Token-2022 mint transaction, and simulates it. Your wallet signs first, the mint keypair signs after, and the app broadcasts. If the revoke or post-mint instructions are too large for one transaction, a second transaction is split off, simulated, signed, and confirmed automatically. A very heavy extension set can need one more signature after that.
{% endstep %}
{% endstepper %}

[**Open Token2022 Creator in the app →**](https://j.tools/en/tools/token2022-creator)

{% hint style="info" %}
**About wallet warnings.** Some tools bundle several instructions into one transaction, for example creating a token and its metadata together. Phantom can show a caution banner for these transactions. The banner is expected here and does not mean something is wrong. Read what you are signing, then approve.
{% endhint %}

When the mint confirms, a success modal and an explorer link appear, and the commission and tool run are recorded on the server.

## The options, explained

* **Name / Symbol / Decimals / Initial supply:** Core identity. Name 2 to 32, symbol 2 to 10, decimals 0 to 9, supply 1 up to 1,000,000,000,000. Supply is minted to your wallet at creation.
* **Description / Image / Socials:** Stored in the token metadata. Image takes a PNG, JPG, GIF, or WEBP upload or a URL, and is pinned to IPFS before minting.
* **Transfer Fee:** Token-2022 transfer fee config. Set a percentage (converted to basis points), a max fee cap per transfer, and a required base58 recipient. The recipient wallet is set as the authority allowed to withdraw the withheld fees. Conflicts with Non-Transferable.
* **Interest Bearing:** Sets an interest rate, stored as basis points on the mint. The form accepts 0 to 100 percent. The rate is a display/accounting figure on the mint, it does not move real tokens.
* **Default Frozen:** New token accounts start frozen. The flow thaws your own associated token account before minting to it, and forces freeze-authority revocation when this is on.
* **Permanent Delegate:** A base58 wallet that can move or burn tokens from any account. Validated as base58 when enabled.
* **Non-Transferable:** Mints a soulbound token that cannot be transferred. Conflicts with Transfer Fee.
* **Metadata Pointer:** Always on. The mint points at itself, with name, symbol, and URI written through the token metadata extension.
* **Revoke Mint / Freeze / Update:** Each revoke removes that authority in the same flow. Permanent once signed. Each adds to the fee.
* **Custom Mint Address:** Generates a random mint keypair in your browser and uses it as the mint. Turning the block on adds 0.05 SOL; clicking **Generate address** adds a further 0.1 SOL, the same surcharge a vanity address carries, so a generated custom mint address costs 0.15 SOL in total. The fee box total is what you pay. Mutually exclusive with Vanity.
* **Vanity Address:** Grinds a mint keypair with your chosen prefix or suffix locally in the browser. Adds the vanity fee. Mutually exclusive with Custom Mint.

{% hint style="info" %}
The metadata pointer extension is always added for you, so your Token-2022 mint carries on-chain metadata without a separate Metaplex account. There is no toggle to turn it off.
{% endhint %}

## Fees and costs

{% hint style="warning" %}
**About fees.** Every action has two costs: the Solana **network fee** paid to validators, and the **J Tools platform fee**. The platform fee always shows in the app before you confirm, and nothing is charged until you sign. Fees can change over time, so trust the in-app summary rather than a number you saw once.
{% endhint %}

**Current platform fee: 0.15 SOL base.**

| Cost                        | Amount                                                                                                                                                  |
| --------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------- |
| J Tools platform fee (base) | 0.15 SOL                                                                                                                                                |
| Solana network fee          | a small amount paid to validators, plus rent for any new on-chain accounts                                                                              |
| Add-ons                     | +0.05 SOL per revoked authority (mint, freeze, update), +0.15 SOL for a generated custom mint address, +0.1 SOL for a vanity address. Ceiling 0.45 SOL. |

Three separate things come out of your wallet, and they are different in kind.

* **Solana network fee.** The base cost of landing a transaction, a few thousand lamports (a tiny fraction of a cent). It goes to validators, not to J Tools. Each split transaction pays it again, so a heavy extension set costs it two or three times.
* **Account rent.** SOL locked into the new mint account and your associated token account so they can exist on-chain. Token-2022 rent is **higher than classic SPL** because every extension you enable adds bytes to the mint account, and rent scales with size. This SOL is not a charge, it is held by the account. It becomes refundable if the account is ever closed. The more extensions you turn on, the more rent you lock.
* **Platform fee.** A flat SOL fee for the tool, shown in the fee box and attached to the same transaction you sign. Add-ons stack on the base fee: each authority revoke, a custom mint address, and a vanity address each add a fixed amount.

For the current per-action amounts, see the [fee schedule](/reference/fee-schedule.md).

## Common mistakes and troubleshooting

* **Extension conflict.** Transfer Fee and Non-Transferable cannot both be on. Turning one on while the other is active triggers the conflict guard (and a shake on the form). Pick one.
* **Trying to add an extension after launch.** You cannot. Extensions initialize at creation only. If you forgot one, you mint a new token. Decide on the full extension set before you sign.
* **Token will not trade or list.** The venue may not support Token-2022, or it may not handle the specific extension you enabled (transfer fee is the usual sticking point). Confirm support before you commit liquidity.

For the full list, see the [Error codes reference](/reference/error-codes.md).

## Advanced tips

* **Transfer fee plus treasury.** The recipient wallet you set becomes the authority allowed to withdraw the withheld fees. Fees accumulate on holders' token accounts as withheld amounts, so your treasury has to withdraw them actively; nothing arrives on its own. The fee also applies to every transfer, including your own market-making and LP wallets, because Token-2022 has no exemption list.
* **Default Frozen locks everyone but you, permanently.** When this is on, the flow thaws your own token account so the supply can land, then revokes the freeze authority in the same run. With no freeze authority left, every other token account starts frozen and can never be thawed, so the token cannot be distributed. Controlled distribution with later thawing is not possible through this tool. Read [Mint, freeze, and update authorities](/concepts/authorities.md) before turning it on.
* **Finalize the mint after launch.** Once metadata and supply are correct, make the mint immutable with [Make Immutable](/tools/secure/make-immutable.md). If you need to change name, symbol, or image before locking, use [Update Metadata](/tools/token/update-metadata.md). To distribute supply afterward, [Multi-Sender](/tools/wallets/multi-sender.md) handles the airdrop.

## Related tools

{% content-ref url="/pages/9r2rW9r83CsCoJpYE8gL" %}
[Solana Token Creator](/tools/launch/token-creator.md)
{% endcontent-ref %}

{% content-ref url="/pages/gbx1RbByQOVKZzt0PQkP" %}
[Make a Token Immutable](/tools/secure/make-immutable.md)
{% endcontent-ref %}

{% content-ref url="/pages/gclVFAjMJFchUipqQNOZ" %}
[Update Token Metadata](/tools/token/update-metadata.md)
{% endcontent-ref %}

{% content-ref url="/pages/ABVX2mBQDoCv7DEdVmKp" %}
[Multi Sender and Airdrop](/tools/wallets/multi-sender.md)
{% endcontent-ref %}

{% content-ref url="/pages/QjZonbkyi16SFPO78cT8" %}
[SPL vs Token-2022](/concepts/spl-vs-token2022.md)
{% endcontent-ref %}

{% hint style="success" %}
**J Tools is non-custodial.** We never store or transmit your private keys and never ask for your seed phrase. Every transaction is signed in your own browser, and nothing about a key ever reaches our servers. A few multi-wallet tools do let you paste private keys for throwaway hot wallets, which stay in your browser tab and are used only to sign locally. Never paste a key tied to long-term holdings, and if a page ever asks for your seed phrase, stop and close it.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter, and the optional `goal` query parameter:

```
GET https://docs.j.tools/tools/launch/token2022-creator.md?ask=<question>&goal=<endgoal>
```

`ask` is the immediate question: it should be specific, self-contained, and written in natural language.
`goal` is optional and describes the broader end goal you are ultimately trying to accomplish on behalf of the user. GitBook uses it to tailor the answer towards what is most useful for that goal.

The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
