@metaplex-foundation/genesis
v0.27.0
Published
The Metaplex Genesis Program
Keywords
Readme
JavaScript client for Genesis
A Umi-compatible JavaScript library for the project.
Getting started
- First, if you're not already using Umi, follow these instructions to install the Umi framework.
- Next, install this library using the package manager of your choice.
npm install @metaplex-foundation/genesis - Finally, register the library with your Umi instance like so.
import { genesis } from '@metaplex-foundation/genesis'; umi.use(genesis());
API Client
The API client provides three levels of control for creating and registering launches.
Setup
All examples below assume the following shared setup:
import {
createAndRegisterLaunch,
createLaunch,
registerLaunch,
} from '@metaplex-foundation/genesis';
const config = {}; // uses default API URL; set { baseUrl: '...' } to override
const input = {
wallet: umi.identity.publicKey,
launchType: 'project' as const,
token: {
name: 'My Token',
symbol: 'MTK',
image: 'https://gateway.irys.xyz/...',
},
launch: {
launchpool: {
tokenAllocation: 500_000_000,
depositStartTime: new Date('2026-03-01T00:00:00Z'),
raiseGoal: 200,
raydiumLiquidityBps: 5000,
fundsRecipient: 'RecipientWallet...',
},
},
};Basic — createAndRegisterLaunch
The simplest approach. The SDK creates the launch, signs and sends all transactions via Umi, then registers the launch — all in one call.
const result = await createAndRegisterLaunch(umi, config, input);
console.log(`Mint: ${result.mintAddress}`);
console.log(`Launch: ${result.launch.link}`);Custom transaction sender — createAndRegisterLaunch with txSender
If you need control over how transactions are signed and sent (e.g. using a custom wallet adapter), pass a txSender callback. The SDK still handles the create and register steps for you.
const result = await createAndRegisterLaunch(umi, config, input, {
txSender: async (transactions) => {
const signatures: Uint8Array[] = [];
for (const tx of transactions) {
const signed = await myCustomWallet.signTransaction(tx);
const sig = await myCustomRpc.sendTransaction(signed);
signatures.push(sig);
}
return signatures;
},
});
console.log(`Launch: ${result.launch.link}`);Full control — createLaunch + registerLaunch
For complete control over the transaction lifecycle, call createLaunch and registerLaunch separately. You are responsible for signing, sending, and confirming the transactions yourself.
// Step 1: Create the launch (returns unsigned transactions)
const createResult = await createLaunch(umi, config, input);
// Step 2: Sign and send each transaction yourself
for (const tx of createResult.transactions) {
const signed = await umi.identity.signTransaction(tx);
await umi.rpc.sendTransaction(signed);
}
// Step 3: Register the launch after transactions are confirmed on-chain
const registerResult = await registerLaunch(umi, config, {
genesisAccount: createResult.genesisAccount,
createLaunchInput: input,
});
console.log(`Launch: ${registerResult.launch.link}`);