The official TypeScript SDK for deploying tokens using Clanker.
npm install clanker-sdk viem
# or
yarn add clanker-sdk viem
# or
pnpm add clanker-sdk viemThe Clanker SDK ships a CLI for deploying and managing tokens directly from your terminal.
npm install -g clanker-sdkThen run commands with:
clanker-sdk deploy --name "MyToken" --symbol "MTK" --chain base
clanker-sdk rewards claim --token 0x...
clanker-sdk vault claim --token 0x...npx clanker-sdk deploy --name "MyToken" --symbol "MTK" --chain base| Command | Description |
|---|---|
setup |
Save default wallet & chain config |
deploy |
Deploy a new token (V3 or V4) |
rewards |
Claim rewards, update recipients/admins |
vault |
Claim vaulted tokens |
| airdrop | Generate Merkle trees, register & claim airdrops |
| token | Update token image & metadata |
--chain <name> Target chain (base, base-sepolia, bsc, etc.)
--rpc <url> Custom RPC URL
--private-key <key> Wallet private key (or set PRIVATE_KEY env)
--json Output machine-readable JSON
--dry-run Simulate transaction without sending
Run clanker-sdk <command> --help for details on any command.
- Create a
.envfile with your configuration:
PRIVATE_KEY=<your_private_key_here>- Create a deployment script:
// deploy-script.ts
import { Clanker } from 'clanker-sdk';
import { createPublicClient, createWalletClient, http, PublicClient } from 'viem';
import { privateKeyToAccount } from 'viem/accounts';
import { base } from 'viem/chains';
// Validate environment variables
const PRIVATE_KEY = process.env.PRIVATE_KEY as `0x${string}`;
if (!PRIVATE_KEY) {
throw new Error("Missing PRIVATE_KEY environment variable.");
}
// Initialize wallet with private key
const account = privateKeyToAccount(PRIVATE_KEY);
const publicClient = createPublicClient({
chain: base,
transport: http(),
}) as PublicClient;
const wallet = createWalletClient({
account,
chain: base,
transport: http(),
});
// Initialize Clanker SDK
const clanker = new Clanker({
wallet,
publicClient,
});
async function deployToken() {
console.log("\n🚀 Deploying Token\n");
// Deploy the token with full configuration
const tokenConfig = {
name: "My Token",
symbol: "TKN",
image: "ipfs://bafybeigdyrzt5sfp7udm7hu76uh7y26nf3efuylqabf3oclgtqy55fbzdi",
metadata: {
description: "Token with custom configuration including vesting and rewards",
socialMediaUrls: [
{ platform: "x", url: "https://twitter.com/mytoken" },
{ platform: "telegram", url: "https://t.me/mytoken" },
],
auditUrls: ["https://example.com/audit"],
},
context: {
interface: "Clanker SDK",
platform: "Clanker",
messageId: "Deploy Example",
id: "TKN-1",
},
pool: {
quoteToken: "0x4200000000000000000000000000000000000006", // WETH on Base
initialMarketCap: "10", // 10 ETH initial market cap
},
vault: {
percentage: 10, // 10% of tokens vested
durationInDays: 30, // 30-day vesting period
},
devBuy: {
ethAmount: 0, // No initial buy
},
rewardsConfig: {
creatorReward: 75, // 75% creator reward
creatorAdmin: account.address,
creatorRewardRecipient: account.address,
interfaceAdmin: "0x1eaf444ebDf6495C57aD52A04C61521bBf564ace",
interfaceRewardRecipient: "0x1eaf444ebDf6495C57aD52A04C61521bBf564ace",
},
};
try {
const tokenAddress = await clanker.deployToken(tokenConfig);
console.log("Token deployed successfully!");
console.log("Token address:", tokenAddress);
console.log("View on BaseScan:", `https://basescan.org/token/${tokenAddress}`);
} catch (error) {
if (error instanceof Error) {
console.error("Deployment failed:", error.message);
} else {
console.error("Deployment failed with unknown error");
}
process.exit(1);
}
}
deployToken().catch(console.error);- Run the deployment script:
bun deploy-script.tsname: Token namesymbol: Token symbolimage: IPFS URI for token imagemetadata: Token metadata (description, social links, etc.)context: Deployment context information (interface, platform, etc.)
pool.quoteToken: Quote token address (defaults to WETH on Base)pool.initialMarketCap: Initial market cap in quote token units
devBuy.ethAmount: Amount of ETH for initial buy
vault.percentage: Percentage of tokens to be vested (0-30%)vault.durationInDays: Duration of the vesting period in days
rewardsConfig.creatorReward: Creator reward percentage (0-80)rewardsConfig.creatorAdmin: Creator admin addressrewardsConfig.creatorRewardRecipient: Creator reward recipient addressrewardsConfig.interfaceAdmin: Interface admin addressrewardsConfig.interfaceRewardRecipient: Interface reward recipient address
See the examples directory for more deployment scenarios:
deploy-token-simple.ts: Basic token deploymentdeploy-token.ts: Advanced token deployment with all optionsdeploy-full-sdk.ts: Full SDK usage example
The SDK uses bun for development. Install bun following their instructions here: https://bun.sh.
Once bun is installed, the project is ready for development
# Install dependencies
bun i
# Run Examples
# bun <path_to_example>
bun examples/v4/availableRewards.ts
# Run Tests
bun test
# Check coverage
bun test --coverage
# Lint
bun lintPublishing the package
# Log into npm
bunx npm login
# Dry run publishing
bun publish-package --dry-run
# Publish
bun publish-packageMIT