How to Create a Token with Metadata

To add metadata (name, symbol, image) to a standard SPL Token, you need to use the Metaplex Token Metadata Program. This creates a metadata account that is linked to your token mint via a Program Derived Address (PDA).

This guide covers metadata for standard SPL Tokens (Token Program) and is also applicable for Token-2022. If you want to use the Metadata Extension for Token-2022, see the Metadata Extension guide.

Kit
import { createClient, generateKeyPairSigner, lamports } from "@solana/kit";
import { rpcAirdrop, solanaRpc } from "@solana/kit-plugin-rpc";
import { airdropPayer, payer as kitPayer } from "@solana/kit-plugin-signer";
import {
getCreateV1InstructionAsync,
fetchMetadataFromSeeds,
TokenStandard,
} from "@metaplex-foundation/mpl-token-metadata-kit";
const payer = await generateKeyPairSigner();
const mint = await generateKeyPairSigner();
const client = await createClient()
.use(kitPayer(payer))
.use(
solanaRpc({
rpcUrl: "http://localhost:8899",
rpcSubscriptionsUrl: "ws://localhost:8900",
}),
)
.use(rpcAirdrop())
.use(airdropPayer(lamports(1_000_000_000n)));
// Create token with metadata
const createInstruction = await getCreateV1InstructionAsync({
mint,
authority: payer,
payer,
name: "My Token",
symbol: "MTK",
uri: "https://example.com/token-metadata.json",
sellerFeeBasisPoints: 0, // 0% royalty (use 500 for 5%)
tokenStandard: TokenStandard.Fungible,
});
const { context } = await client.sendTransaction([createInstruction]);
console.log("Transaction Signature:", context.signature);
// Verify metadata was created
const metadata = await fetchMetadataFromSeeds(client.rpc, {
mint: mint.address,
});
console.log("Mint Address:", mint.address);
console.log("Token Name:", metadata.data.name);
console.log("Token Symbol:", metadata.data.symbol);
console.log("Metadata URI:", metadata.data.uri);
Console
Click to execute the code.

Is this page helpful?

How to Create a Token with Metadata | Solana