{"id":29561703,"url":"https://github.com/meteoraag/meteora-invent","last_synced_at":"2026-05-20T07:35:50.463Z","repository":{"id":294669195,"uuid":"987630278","full_name":"MeteoraAg/meteora-invent","owner":"MeteoraAg","description":"Launch anything with Meteora.","archived":false,"fork":false,"pushed_at":"2025-07-11T08:49:02.000Z","size":43568,"stargazers_count":3,"open_issues_count":4,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-07-11T10:58:03.926Z","etag":null,"topics":["damm","dbc","defi","dlmm","meteora","solana"],"latest_commit_sha":null,"homepage":"https://launch.meteora.ag","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/MeteoraAg.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2025-05-21T11:02:45.000Z","updated_at":"2025-07-11T08:49:06.000Z","dependencies_parsed_at":"2025-06-25T12:35:02.908Z","dependency_job_id":null,"html_url":"https://github.com/MeteoraAg/meteora-invent","commit_stats":null,"previous_names":["meteoraag/meteora-studio","meteoraag/meteora-invent"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/MeteoraAg/meteora-invent","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeteoraAg%2Fmeteora-invent","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeteoraAg%2Fmeteora-invent/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeteoraAg%2Fmeteora-invent/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeteoraAg%2Fmeteora-invent/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/MeteoraAg","download_url":"https://codeload.github.com/MeteoraAg/meteora-invent/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/MeteoraAg%2Fmeteora-invent/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":265793684,"owners_count":23829180,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["damm","dbc","defi","dlmm","meteora","solana"],"created_at":"2025-07-18T16:39:36.421Z","updated_at":"2026-05-20T07:35:50.456Z","avatar_url":"https://github.com/MeteoraAg.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Meteora Invent\n\nA toolkit consisting of everything you need to invent innovative token launches on Meteora.\n\n## Metsumi\n\nMeet Metsumi, your personal launch assistant engineered to help you launch anything and do any\naction on Meteora programs with just a few configurations and CLI commands.\n\n![Metsumi](./assets/metsumi/metsumi-1.webp)\n\n## 📋 Table of Contents\n\n- [🚀 Getting Started](#-getting-started)\n- [📦 Workspaces](#-workspaces)\n  - [Studio](#studio-meteora-inventstudio)\n  - [Scaffolds](#scaffolds)\n- [🏗️ Structure](#%EF%B8%8F-structure)\n- [🤝 Contributing](#-contributing)\n- [📄 License](#-license)\n\n## 🚀 Getting Started\n\n### Prerequisites\n\n- Node.js \u003e= 18.0.0\n- pnpm \u003e= 10.0.0\n\n### Clone the repository\n\n```bash\ngit clone https://github.com/MeteoraAg/meteora-invent.git\n```\n\n### Installation\n\n```bash\n# Install pnpm if you haven't already\nnpm install -g pnpm\n\n# Install all dependencies\npnpm install\n```\n\n## 📦 Workspaces\n\n---\n\n### Studio (`@meteora-invent/studio`)\n\n---\n\nThe studio workspace contains all the actions for interacting with Meteora's programs.\n\n#### Setup\n\n1. Copy the `.env.example` file to `.env` and configure the environment variables.\n\n```bash\ncp studio/.env.example studio/.env\n```\n\n2. (Optional) Start a Local Test Validator\n\n_You can also run the studio actions on localnet - http://localhost:8899 with the following command_\n\n```bash\npnpm studio start-test-validator\n```\n\n3. Generate a keypair from your private key:\n\n```bash\npnpm studio generate-keypair\n\n# For devnet (airdrops 5 SOL)\npnpm studio generate-keypair --network devnet --airdrop\n\n# For localnet (airdrops 5 SOL)\n# Ensure that you have already started the local validator with pnpm start-test-validator\npnpm studio generate-keypair --network localnet --airdrop\n```\n\n4. Configure the config files in the `studio/config` directory.\n\n- Configure [DLMM](./studio/config/dlmm_config.jsonc)\n- Configure [DAMM v2](./studio/config/damm_v2_config.jsonc)\n- Configure [DAMM v1](./studio/config/damm_v1_config.jsonc)\n- Configure [DBC](./studio/config/dbc_config.jsonc)\n- Configure [Alpha Vault](./studio/config/alpha_vault_config.jsonc)\n\n**Note:** You can use the provided example configurations as a starting point. Make sure to replace\nthe placeholders with your actual values.\n\n5. (Optional) Airdrop SOL to your generated keypair if you need SOL to test on devnet or localnet:\n\n```bash\n# Airdrop 5 SOL on devnet\npnpm studio airdrop-sol --network devnet\n\n# Airdrop 5 SOL on localnet\n# Ensure that you have already started the local validator with pnpm start-test-validator\npnpm studio airdrop-sol --network localnet\n```\n\n---\n\n#### DLMM Actions\n\n##### Create a Customizable Permissionless DLMM Pool\n\nConfigure `dlmmConfig` in `dlmm_config.jsonc` file and run the following command to create the DLMM\npool.\n\n_If you don't have a base mint, you can configure `createBaseToken` in the config file and run the\nfollowing command._\n\n```bash\npnpm studio dlmm-create-pool\n```\n\n_If you already have a base mint created, you can provide it via the CLI with a `--baseMint` flag\nand run the following command._\n\n```bash\npnpm studio dlmm-create-pool --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n##### Seed Liquidity (LFG)\n\nConfigure `lfgSeedLiquidity` in `dlmm_config.jsonc` file and run the following command to seed the\nliquidity in the already deployed DLMM pool.\n\n**Note:** You need to ensure that the deployed DLMM pool is not trading yet.\n\n```bash\npnpm studio dlmm-seed-liquidity-lfg --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n##### Seed Liquidity (Single Bin)\n\nConfigure `singleBinSeedLiquidity` in `dlmm_config.jsonc` file and run the following command to seed\nthe liquidity in a single bin in the already deployed DLMM pool.\n\n**Note:** You need to ensure that the deployed DLMM pool is not trading yet.\n\n```bash\npnpm studio dlmm-seed-liquidity-single-bin --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n##### Set DLMM Pool Status\n\nConfigure `setDlmmPoolStatus` in `dlmm_config.jsonc` file and run the following command to set the\ntrading status of the DLMM pool. This command is used by the operator of the pool to either enable\nor disable trading for the DLMM pool.\n\n```bash\npnpm studio dlmm-set-pool-status --poolAddress \u003cYOUR_POOL_ADDRESS\u003e\n```\n\n---\n\n#### DAMM v2 Actions\n\n##### Create a Balanced Constant Product Pool\n\nConfigure `dammV2Config` in `damm_v2_config.jsonc` file and run the following command to create the\nDAMM v2 pool.\n\n_If you don't have a base mint, you can configure `createBaseToken` in the config file and run the\nfollowing command._\n\n```bash\npnpm studio damm-v2-create-balanced-pool\n```\n\n_If you already have a base mint, you can provide it via the CLI with a `--baseMint` flag and run\nthe following command._\n\n```bash\npnpm studio damm-v2-create-balanced-pool --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n##### Create a One-Sided Pool\n\nConfigure `dammV2Config` in `damm_v2_config.jsonc` file and run the following command to create the\nDAMM v2 one-sided pool.\n\n_If you don't have a base mint, you can configure `createBaseToken` in the config file and run the\nfollowing command._\n\n```bash\npnpm studio damm-v2-create-one-sided-pool\n```\n\n_If you already have a base mint, you can provide it via the CLI with a `--baseMint` flag and run\nthe following command._\n\n```bash\npnpm studio damm-v2-create-one-sided-pool --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n##### Split Position\n\nConfigure `splitPosition` in `damm_v2_config.jsonc` file and run the following command to split an\nexisting position in the already deployed DAMM v2 pool.\n\n```bash\npnpm studio damm-v2-split-position --poolAddress \u003cYOUR_POOL_ADDRESS\u003e\n```\n\n##### Claim Position Fee\n\nIf you already have an existing position in a DAMM v2 pool with unclaimed fees, you can run the\nfollowing command to claim the fees.\n\n```bash\npnpm studio damm-v2-claim-position-fee --poolAddress \u003cYOUR_POOL_ADDRESS\u003e\n```\n\n##### Add Liquidity\n\nConfigure `addLiquidity` in `damm_v2_config.jsonc` file and run the following command to add\nliquidity to an existing position in the already deployed DAMM v2 pool.\n\n```bash\npnpm studio damm-v2-add-liquidity --poolAddress \u003cYOUR_POOL_ADDRESS\u003e\n```\n\n##### Remove Liquidity\n\nIf you already have an existing position in a DAMM v2 pool with liquidity, you can run the following\ncommand to remove the liquidity and close the position.\n\n```bash\npnpm studio damm-v2-remove-liquidity --poolAddress \u003cYOUR_POOL_ADDRESS\u003e\n```\n\n##### Refresh Vesting\n\nIf you already have an existing position in a DAMM v2 pool with vested liquidity, you can run the\nfollowing command to refresh the vesting of the position if the vesting of the LP has already ended.\n\n```bash\npnpm studio damm-v2-refresh-vesting --poolAddress \u003cYOUR_POOL_ADDRESS\u003e\n```\n\n##### Close Position\n\nIf you already have an existing position in a DAMM v2 pool without liquidity, you can run the\nfollowing command to close the position.\n\n```bash\npnpm studio damm-v2-close-position --poolAddress \u003cYOUR_POOL_ADDRESS\u003e\n```\n\n---\n\n#### DAMM v1 Actions\n\n##### Create a Constant Product Pool\n\nConfigure `dammV1Config` in `damm_v1_config.jsonc` file and run the following command to create the\nDAMM v1 pool.\n\n_If you don't have a base mint, you can configure `createBaseToken` in the config file and run the\nfollowing command._\n\n```bash\npnpm studio damm-v1-create-pool\n```\n\n_If you already have a base mint created, you can provide it via the CLI with a `--baseMint` flag\nand run the following command._\n\n```bash\npnpm studio damm-v1-create-pool --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n##### Lock Liquidity\n\nConfigure `dammV1LockLiquidity` in `damm_v1_config.jsonc` file and run the following command to lock\nthe liquidity in the already deployed DAMM v1 pool.\n\n```bash\npnpm studio damm-v1-lock-liquidity --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n##### Create a Stake2Earn Farm\n\nConfigure `stake2EarnFarm` in `damm_v1_config.jsonc` file and run the following command to create\nthe Stake2Earn farm on top of the already deployed DAMM v1 pool.\n\n```bash\npnpm studio damm-v1-create-stake2earn-farm --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n##### Lock Liquidity (Stake2Earn)\n\nConfigure `dammV1LockLiquidity` in `damm_v1_config.jsonc` file and run the following command to lock\nthe liquidity in the already deployed DAMM v1 pool with the Stake2Earn farm.\n\n```bash\npnpm studio damm-v1-lock-liquidity-stake2earn --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n---\n\n#### DBC Actions\n\n##### Create a DBC Config\n\nConfigure `dbcConfig` in `dbc_config.jsonc` file and run the following command to create the DBC\nconfig key. This config key is used to create the DBC pool and contains all the settings for the\npre-graduation and post-graduation pools.\n\n```bash\npnpm studio dbc-create-config\n```\n\n##### Create a DBC Pool\n\nConfigure `dbcPool` in `dbc_config.jsonc` file and run the following command to create the DBC pool.\n\n_If you don't have a DBC config key, you can run the following command and the config key + pool\nwill be created together._\n\n```bash\npnpm studio dbc-create-pool\n```\n\n_If you already have an existing DBC config key, you can provide it via the CLI with a `--config`\nflag and run the following command._\n\n```bash\npnpm studio dbc-create-pool --config \u003cYOUR_DBC_CONFIG_KEY\u003e\n```\n\n##### Claim Trading Fees\n\nIf you already have an existing DBC pool with accumulated fees, you can run the following command\nwith the `--baseMint` flag to claim the fees.\n\n```bash\npnpm studio dbc-claim-trading-fee --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n##### Migrate to DAMM v1\n\nIf you already have an existing DBC pool, with `poolState.quoteReserve` \u003e\n`poolConfig.migrationQuoteThreshold` (100% bonding curve progress), you can run the following\ncommand with the `--baseMint` flag to migrate the DBC pool to DAMM v1.\n\n```bash\npnpm studio dbc-migrate-to-damm-v1 --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n##### Migrate to DAMM v2\n\nIf you already have an existing DBC pool, with `poolState.quoteReserve` \u003e\n`poolConfig.migrationQuoteThreshold` (100% bonding curve progress), you can run the following\ncommand with the `--baseMint` flag to migrate the DBC pool to DAMM v2.\n\n```bash\npnpm studio dbc-migrate-to-damm-v2 --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n##### Swap (Buy/Sell)\n\nConfigure `dbcSwap` in `dbc_config.jsonc` file and run the following command to swap in the DBC\npool.\n\n```bash\npnpm studio dbc-swap --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n##### Transfer Pool Creator\n\nConfigure `dbcTransferPoolCreator` in `dbc_config.jsonc` file and run the following command to\ntransfer the pool creator of the DBC pool.\n\n```bash\npnpm studio dbc-transfer-pool-creator --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n---\n\n#### Alpha Vault Actions\n\n##### Create an Alpha Vault\n\nConfigure `alphaVault` in `alpha_vault_config.jsonc` file and run the following command to create\nthe alpha vault with an existing DAMM v1 or DAMM v2 or DLMM pool.\n\n```bash\npnpm studio alpha-vault-create --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n---\n\n#### Presale Vault Actions\n\n##### Create a Presale Vault\n\nConfigure `presaleVault` in `presale_vault_config.jsonc` file and run the following command to\ncreate the presale vault for a specific base token.\n\n```bash\npnpm studio presale-vault-create --baseMint \u003cYOUR_BASE_MINT_ADDRESS\u003e\n```\n\n---\n\n### Scaffolds\n\n---\n\n#### Fun Launch (`@meteora-invent/scaffold-fun-launch`)\n\nA Next.js application template for creating a launchpad.\n\n#### Getting Started\n\nCopy the `.env.example` file to `.env` and configure the environment variables.\n\n```bash\ncp scaffolds/fun-launch/.env.example scaffolds/fun-launch/.env\n```\n\n#### Install Dependencies\n\n```bash\npnpm install\n```\n\n#### Running the Scaffold\n\n```bash\n# Run the fun-launch scaffold in development\npnpm --filter @meteora-invent/scaffold/fun-launch dev\n\n# Build the fun-launch scaffold\npnpm --filter @meteora-invent/scaffold/fun-launch build\n```\n\n## 🏗️ Structure\n\n```\nmeteora-invent/\n├── packages/          # Shared packages\n│   └── config/\n│       ├── eslint/\n│       ├── prettier/\n│       └── typescript/\n├── scaffolds/         # Scaffolds - production-ready frontend application templates\n│   └── fun-launch/\n└── studio/            # Studio - a collection of actions for you to innovate and create\n    ├── config\n    │   ├── alpha_vault_config.jsonc\n    │   ├── damm_v1_config.jsonc\n    │   ├── damm_v2_config.jsonc\n    │   ├── dbc_config.jsonc\n    │   └── dlmm_config.jsonc\n    ├── data\n    │   ├── image\n    │   │   └── test-token.jpg\n    │   ├── kv_proof_example.json\n    │   └── whitelist_wallet_example.csv\n    ├── LLM.txt\n    ├── package.json\n    ├── README.md\n    ├── src\n    │   ├── actions\n    │   │   ├── alpha_vault\n    │   │   │   └── create_alpha_vault.ts\n    │   │   ├── damm_v1\n    │   │   │   ├── create_pool.ts\n    │   │   │   ├── create_stake2earn_farm.ts\n    │   │   │   ├── lock_liquidity_stake2earn.ts\n    │   │   │   └── lock_liquidity.ts\n    │   │   ├── damm_v2\n    │   │   │   ├── add_liquidity.ts\n    │   │   │   ├── claim_position_fee.ts\n    │   │   │   ├── close_position.ts\n    │   │   │   ├── create_balanced_pool.ts\n    │   │   │   ├── create_one_sided_pool.ts\n    │   │   │   ├── refresh_vesting.ts\n    │   │   │   ├── remove_liquidity.ts\n    │   │   │   └── split_position.ts\n    │   │   ├── dbc\n    │   │   │   ├── claim_trading_fee.ts\n    │   │   │   ├── create_config.ts\n    │   │   │   ├── create_pool.ts\n    │   │   │   ├── migrate_damm_v1.ts\n    │   │   │   ├── migrate_damm_v2.ts\n    │   │   │   ├── swap.ts\n    │   │   │   └── transfer_pool_creator.ts\n    │   │   ├── dlmm\n    │   │   │   ├── create_pool.ts\n    │   │   │   ├── seed_liquidity_lfg.ts\n    │   │   │   ├── seed_liquidity_single_bin.ts\n    │   │   │   └── set_pool_status.ts\n    │   │   ├── presale_vault\n    │   │   │   └── create_presale_vault.ts\n    │   │   └── settings\n    │   │       ├── airdrop_sol.ts\n    │   │       └── generate_keypair.ts\n    │   ├── helpers\n    │   │   ├── accounts.ts\n    │   │   ├── cli.ts\n    │   │   ├── common.ts\n    │   │   ├── config.ts\n    │   │   ├── index.ts\n    │   │   ├── metadata.ts\n    │   │   ├── token.ts\n    │   │   ├── transaction.ts\n    │   │   ├── utils.ts\n    │   │   └── validation.ts\n    │   ├── lib\n    │   │   ├── alpha_vault\n    │   │   │   ├── merkle_tree\n    │   │   │   │   ├── balance_tree.ts\n    │   │   │   │   ├── index.ts\n    │   │   │   │   └── merkle_tree.ts\n    │   │   │   │   └── metadata.ts\n    │   │   │   ├── index.ts\n    │   │   │   └── utils.ts\n    │   │   ├── damm_v1\n    │   │   │   ├── index.ts\n    │   │   │   └── stake2earn.ts\n    │   │   ├── damm_v2\n    │   │   │   └── index.ts\n    │   │   ├── dbc\n    │   │   │   └── index.ts\n    │   │   └── dlmm\n    │   │       └── index.ts\n    │   ├── tests\n    │   │   ├── artifacts\n    │   │   │   ├── accounts\n    │   │   │   │   └── 3ifhD4Ywaa8aBZAaQSqYgN4Q1kaFArioLU8uumJMaqkE.json\n    │   │   │   ├── alpha_vault.so\n    │   │   │   ├── cp_amm.so\n    │   │   │   ├── dynamic_amm.so\n    │   │   │   ├── dynamic_bonding_curve.so\n    │   │   │   ├── dynamic_fee_sharing.so\n    │   │   │   ├── dynamic_vault.so\n    │   │   │   ├── lb_clmm.so\n    │   │   │   ├── locker.so\n    │   │   │   └── metaplex.so\n    │   │   └── keys\n    │   │       └── localnet\n    │   │           └── admin-bossj3JvwiNK7pvjr149DqdtJxf2gdygbcmEPTkb2F1.json\n    │   └── utils\n    │       ├── constants.ts\n    │       └── types.ts\n```\n\n## 🤝 Contributing\n\n1. Create a feature branch\n2. Make your changes\n3. Run `pnpm format` and `pnpm lint`\n4. Submit a pull request\n\n## 📄 License\n\nISC\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeteoraag%2Fmeteora-invent","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmeteoraag%2Fmeteora-invent","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmeteoraag%2Fmeteora-invent/lists"}