To create a Solana token (SPL token), you'll need to use the Solana CLI tools and the SPL Token program. Here's a step-by-step guide with code examples:
Prerequisites

Install Solana CLI: https://docs.solana.com/cli/install-solana-cli-tools
Install Node.js (for JavaScript examples)
Have some SOL in your wallet for transaction fees
Method 1: Using Solana CLI
# 1. Set your Solana cluster (devnet for testing) solana config set --url https://api.devnet.solana.com # 2. Create a keypair if you don't have one solana-keygen new --outfile ~/.config/solana/devnet.json # 3. Set this keypair as default solana config set --keypair ~/.config/solana/devnet.json # 4. Airdrop some SOL (only works on devnet/testnet) solana airdrop 1 # 5. Create a new token spl-token create-token # This will output your new token mint address # Example: Creating token AQoKYV7tYpTrFZN6P5oUufbQKAUr9mNYGe1TTJC9wajM
Method 2: Using JavaScript with @solana/web3.js
const {
Connection,
clusterApiUrl,
Keypair,
LAMPORTS_PER_SOL,
} = require('@solana/web3.js');
const {
createMint,
getOrCreateAssociatedTokenAccount,
mintTo,
} = require('@solana/spl-token');
async function createNewToken() {
// Connect to cluster
const connection = new Connection(clusterApiUrl('devnet'), 'confirmed');
// Generate a new wallet keypair
const payer = Keypair.generate();
// Airdrop SOL to the payer
const airdropSignature = await connection.requestAirdrop(
payer.publicKey,
LAMPORTS_PER_SOL
);
await connection.confirmTransaction(airdropSignature);
// Create a new token mint
const mint = await createMint(
connection,
payer, // Payer of the transaction
payer.publicKey, // Account that will control the mint
null, // Optional account that can freeze tokens
9 // Decimals
);
console.log('Token mint address:', mint.toBase58());
// Create associated token account for the payer
const tokenAccount = await getOrCreateAssociatedTokenAccount(
connection,
payer,
mint,
payer.publicKey
);
console.log('Token account address:', tokenAccount.address.toBase58());
// Mint 1000 tokens to the payer's account
const mintSignature = await mintTo(
connection,
payer,
mint,
tokenAccount.address,
payer,
1000 * 10 ** 9 // Amount accounting for decimals
);
console.log('Mint transaction signature:', mintSignature);
}
createNewToken();Method 3: Using TypeScript with Anchor
Here's a more advanced example using the Anchor framework:
import * as anchor from '@project-serum/anchor';
import { Program } from '@project-serum/anchor';
import { Token } from '@solana/spl-token';
import { PublicKey } from '@solana/web3.js';
async function createToken() {
// Configure the client to use the local cluster
const provider = anchor.Provider.env();
anchor.setProvider(provider);
// Generate a new mint keypair
const mintKeypair = anchor.web3.Keypair.generate();
// Create the mint
const token = new Token(
provider.connection,
mintKeypair.publicKey,
Token.programId,
provider.wallet.payer
);
// Create the mint account
await token.createMint(
9, // Decimals
provider.wallet.publicKey, // Mint authority
provider.wallet.publicKey // Freeze authority (optional)
);
console.log('Token mint created:', mintKeypair.publicKey.toString());
// Create associated token account for the wallet
const associatedTokenAccount = await token.createAssociatedTokenAccount(
provider.wallet.publicKey
);
// Mint tokens
await token.mintTo(
associatedTokenAccount,
provider.wallet.payer,
[],
1000 * 10 ** 9 // Amount accounting for decimals
);
console.log('Tokens minted to:', associatedTokenAccount.toString());
}
createToken();Important Notes:
On mainnet, you'll need real SOL for transaction fees
The token metadata (name, symbol, etc.) is separate from the mint creation
For a full token with metadata, you'll need to create a metadata account following the Metaplex Token Metadata standard
Always test on devnet before deploying to mainnet
