CoinMaker is a web application that lets you create a Solana SPL token with full on-chain metadata (name, symbol, logo, social links) in just a few clicks. It uploads your logo and metadata to IPFS (via Pinata), mints the full supply to your wallet, attaches Metaplex metadata, and revokes the mint authority so the supply is fixed.
β οΈ Liquidity Pool creation is currently DISABLED. The "Create Raydium Liquidity Pool" option exists in the code but is turned off. Tokens are created without an automated liquidity pool. You can still add liquidity later manually using Raydium, Pump.fun, or Jupiter (see Adding Liquidity Manually).
- Create a Solana SPL token with a custom name, symbol, decimals, and supply.
- Upload a logo (PNG/JPG/GIF/WEBP/SVG) to IPFS so it shows in Phantom, Solscan, and Jupiter.
- Attach Metaplex on-chain metadata (logo, description, website, Twitter, Telegram, Discord).
- Mint the full supply directly to your connected wallet.
- Revoke mint authority automatically β fixed supply, appears as trusted on explorers.
- Cost calculator that shows the exact SOL (and USD) needed before you launch.
- Pre-flight checklist and server-side validation before any transaction is sent.
- Local token history saved in your browser (
localStorage). - Works on Mainnet and Devnet (Devnet is free for testing).
- Node.js 16+ (Node 18+ recommended)
- npm (comes with Node) or yarn
- A Solana wallet with SOL balance:
- For the UI wallet connection: a browser extension wallet such as Phantom or Solflare.
- For the server-side signing: a base58 secret key (the app prompts you to paste it when connecting).
- A Pinata account (free) to get a
PINATA_JWTfor IPFS uploads. - (Optional but recommended) A dedicated Solana RPC endpoint (Helius, QuickNode, Alchemy) because public RPCs are rate-limited.
CoinMaker/
βββ server/
β βββ index.js # Express API server (cost calc, validation, token creation)
β βββ ipfs.js # IPFS / Pinata upload integration
βββ src/
β βββ App.jsx # Main React app, state, API calls
β βββ main.jsx # React entry point
β βββ index.css # Styles
β βββ components/
β βββ CreateToken.jsx # Launch button + pre-flight checklist
β βββ TokenForm.jsx # Token details form (name, symbol, logo, pool)
β βββ CostBreakdown.jsx # Cost / pool preview
β βββ PoolHelp.jsx # Manual liquidity guide (pool feature disabled)
β βββ TokenHistory.jsx # Created-token history
β βββ WalletConnect.jsx # Wallet connect UI
βββ scripts/
β βββ test-rpc.js # Test RPC endpoint speed/reachability
β βββ test-ipfs-upload.js# Test Pinata/IPFS upload
β βββ test-api.js # Test the API end-to-end
β βββ check-token.js # Inspect a token's on-chain metadata
β βββ check-tx.js # Inspect a transaction
β βββ analyze-token.js # Analyze a token (metadata + pool)
β βββ switch-network.js # Switch default network (devnet/mainnet)
βββ .env.example # Template for your .env
βββ vite.config.js
βββ package.json
Open a terminal in the project folder and install everything:
npm installThis installs both the React frontend dependencies and the Node server dependencies.
-
Copy the example file to create your real
.env:copy .env.example .env
(On macOS/Linux use
cp .env.example .env.) -
Open
.envin a text editor (e.g.notepad .env) and fill in at least:# Required β Pinata JWT for IPFS uploads (logo & metadata) PINATA_JWT=your_pinata_jwt_token_here # Optional β custom IPFS gateway (default works fine) PINATA_GATEWAY=https://gateway.pinata.cloud/ipfs # Required β Solana RPC endpoint SOLANA_RPC=https://solana-mainnet.rpc.extrnode.com
- Go to https://app.pinata.cloud/developers/api-keys (create a free account if needed).
- Click New Key β create an API Key (it returns a JWT string).
- Copy the JWT and paste it as
PINATA_JWTin your.env.
Without
PINATA_JWT, logo upload will fail and your token will not show a logo in wallets.
Public RPCs (api.mainnet-beta.solana.com) are heavily rate-limited and often cause
fetch failed errors. For reliable results use a free/premium RPC:
- Helius (recommended): https://helius.dev
- QuickNode: https://quicknode.com
- Alchemy: https://alchemy.com
- Ankr / Extrnode (free):
https://solana.public-rpc.com,https://solana-mainnet.rpc.extrnode.com
For free testing without spending real SOL, set:
SOLANA_RPC=https://api.devnet.solana.comBefore launching the app, verify that IPFS and RPC are working:
# Test IPFS / Pinata upload
npm run test:ipfs
# Test RPC endpoint speed & reachability
npm run test:rpcBoth should finish with a β
success message. If either fails, fix the corresponding
value in .env and re-run.
You need two terminal windows (the API server and the Vite UI run separately).
Terminal 1 β start the API server:
npm run serverYou should see the server listening (default port 3001).
Terminal 2 β start the UI:
npm run devVite will print a local URL. Open it in your browser:
http://localhost:5173
Keep both terminals running while you use the app.
-
Connect your wallet
- Click Connect Wallet in the top-right.
- The app will ask for your wallet's base58 secret key (from Phantom/Solflare export). Paste it to allow the server to sign the token-creation transactions.
- Make sure the connected wallet has enough SOL (see Costs).
-
Fill in token details
- Name β e.g.
My Coin - Symbol β e.g.
MYC - Decimals β usually
6or9(standard is9) - Supply β total number of tokens, e.g.
1000000000 - Target Price β informational only (used for pool math; pool is disabled)
- Name β e.g.
-
Add a logo
- Click the logo box and choose a PNG/JPG/GIF/WEBP/SVG file (< 5 MB), or paste an image URL.
- A preview should appear.
-
β οΈ Upload metadata to IPFS (important!)- Click Upload Metadata to IPFS.
- Wait until the IPFS URI appears (you'll see "β Metadata on IPFS ready").
- This uploads your logo + name + symbol to IPFS so wallets can display them.
-
(Optional) Add social/extra metadata
- Fill Description, Website, Twitter, Telegram, Discord if you want them on-chain.
-
Calculate cost
- Click Calculate Cost.
- The cost breakdown shows the exact SOL (and β USD) required.
-
Launch
- Review the pre-flight checklist (wallet connected, name & symbol, logo, metadata, balance).
- Click π Launch Token.
- Wait β the app will:
- Create the token mint & associated token account (ATA)
- Mint the full supply to your wallet
- Upload metadata to IPFS (if not already done)
- Attach on-chain Metaplex metadata pointing to IPFS
- Revoke mint authority (fixed supply)
- On success you'll get a toast with the duration and be taken to the History tab.
Check your new token from the terminal using its mint address:
npm run check:token YOUR_MINT_ADDRESSOr inspect the creation transaction by its signature:
npm run check:tx YOUR_TX_SIGNATUREYou can also view it on an explorer:
- Solscan: https://solscan.io/token/YOUR_MINT
- Solana Explorer: https://explorer.solana.com/address/YOUR_MINT
Logo and name may take 24β48 hours to appear in some wallets due to caching. If it shows correctly on Solscan, the wallet will catch up.
Automatic pool creation is disabled in this build. To make your token tradable, add liquidity yourself using one of these services:
- Go to https://raydium.io/liquidity/create/
- Connect your wallet
- Enter your token mint address, pair with SOL
- Set the liquidity amount and create the pool
- Cost: ~0.5β2 SOL (OpenBook market + pool)
- Go to https://pump.fun
- Import your existing token
- Add SOL to create liquidity (automated pricing)
- Go to https://jup.ag/
- Use the liquidity / create-pool flow (CPMM pool)
| Script | Description |
|---|---|
npm run dev |
Start the Vite UI dev server (http://localhost:5173) |
npm run server |
Start the Express API server (default port 3001) |
npm run build |
Build the production frontend |
npm run preview |
Preview the production build |
npm run test:ipfs |
Test Pinata/IPFS upload configuration |
npm run test:rpc |
Test RPC endpoint speed & reachability |
npm run check:token <mint> |
Inspect a token's on-chain metadata |
npm run check:tx <sig> |
Inspect a transaction |
npm run test:api |
End-to-end API test |
npm run switch:devnet |
Switch default network to Devnet |
npm run switch:mainnet |
Switch default network to Mainnet |
- Metadata was not uploaded, or RPC was disconnected.
- Run
npm run check:token YOUR_MINTβ if you see "No metadata account found", the metadata step was skipped. - Make sure you clicked Upload Metadata to IPFS and got the URI before launching.
- Your RPC endpoint is slow or rate-limited.
- Run
npm run test:rpcand try a differentSOLANA_RPCin.env(see Step 2).
- Wait 24β48h (explorer/wallet cache).
- Confirm it appears on Solscan; if yes, the wallet will update soon.
- Ensure
PINATA_JWTis set and metadata was uploaded.
- Expected β pool creation is disabled in this build. Add liquidity manually (see above).
- Mainnet: ~0.02β0.05 SOL
- Devnet: free (for testing)
Includes: rent exemption, mint account, ATA creation, minting, metadata creation, mint-authority revoke.
- Mainnet: ~0.5β2 SOL (OpenBook market + pool setup)
- Done manually via Raydium / Pump.fun / Jupiter (see Adding Liquidity Manually).
To test for free without real SOL, switch to Devnet:
npm run switch:devnetThen set SOLANA_RPC=https://api.devnet.solana.com in .env and use a Devnet-funded wallet
(get free SOL from https://faucet.solana.com).
Switch back to Mainnet with:
npm run switch:mainnet- Pinata (IPFS): https://app.pinata.cloud/developers/api-keys
- Solana RPC options: Helius Β· QuickNode Β· Alchemy
- Explorers: Solscan Β· Solana Explorer
- Liquidity: Raydium Β· Pump.fun Β· Jupiter
- Devnet faucet: https://faucet.solana.com
- The liquidity-pool UI option is present but disabled (
addPooldefaults tofalseand the checkbox is disabled). All related code remains in the project for future re-enablement. - Your token history is stored locally in the browser and is cleared via the Clear History button in the History tab.
MIT
If you find this project useful, consider supporting its development:
| Network | Address |
|---|---|
| TON | UQBW_LoEhcYPIzZL_dzp-OMsqI5uAwv8p6dXy8wzzkPU-CQQ |
| BNB / USDT (BEP-20) | 0x951acaf8d4b61a000d3b5c697abcabf52973d0cf |
| TRX | TL4Kej6DjJmT9gQ5ghmQcvsEUHPdnNNPyj |
| SOL | 45kAfGyh13bcyYTdbNLkVfBGtMgq4WMijLgdBK9G9ugN |