Skip to main content
Before getting started building on DLMM, you should read the following resource to get a better understanding of how Meteora’s DLMM works:

What's DLMM?

DLMM is one of Meteora’s highly sophisticated product that allows you to provide concentrated liquidity to a pool and earn dynamic fees that increases or decreases based on the market volatility.

Token 2022 Extensions

DLMM supports Token 2022 tokens with a variety of extensions, enabling tokens with enhanced functionality to be easily integrated into DLMM pools. Check out the list of extensions that DLMM supports here.

DLMM Program

At Meteora, we’ve developed a Node.js <> Typescript SDK and Rust CPI Examples to make deploying and managing your DLMM liquidity pool easier. The following sections includes information on installing and using the SDKs and Rust CPIs. It also covers where to find the latest code, and how to contribute to these repositories. We also outline a list of unofficial community SDKs made by our wonderful community.

Program Details

DLMM IDL

Meteora DLMM Program IDL
NetworkProgram ID
MainnetLBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo
DevnetLBUZKhRxPF3XUpBCjp4YzTKgLccjZhTSDM9YuVaPwxo

Pool Types

DLMM supports four pool types:
Pool TypeDescription
PermissionlessStandard open pool, no special requirements.
PermissionlessV2Latest pool type with Token 2022 support, extended config parameters, and function_type setting. Created via initialize_lb_pair2.
PermissionAdmin-controlled pool for token launches with activation point, pre-activation duration, and lock duration settings.
CustomizablePermissionlessOpen pool with creator-controlled on/off switch, customizable base fee, activation point, and Alpha Vault support.
PermissionlessV2 pools no longer enforce SOL/USDC quote token constraints — any token pair is supported.

Function Type

When creating a PermissionlessV2 pool, a function_type parameter is required:
Function TypeDescription
LiquidityMining (0)Pool supports farming rewards via initialize_reward.
The initialize_reward instruction only works on pools with function_type = LiquidityMining. Pools created without this function type cannot have farming rewards added later.

Dynamic Positions

DLMM supports PositionV2, which supports up to 1,400 bins per position — a significant increase from the previous 70-bin limit. This is achieved through extended byte data attached to the position account, which is allocated on demand as the position grows.

Position Resize

Positions can be resized dynamically without closing and reopening:
InstructionDescription
increase_position_length / increase_position_length2Expand the position’s bin range.
decrease_position_lengthShrink the position from the lower or upper end.

Rebalance Liquidity

The rebalance_liquidity instruction allows position owners to combine multiple liquidity operations (add, remove, shift) and resize the position in a single instruction. It supports a shrink_mode parameter:
Shrink ModeDescription
ShrinkBothShrink empty bins on both sides.
NoShrinkLeftKeep left (lower) bins, shrink right only.
NoShrinkRightKeep right (upper) bins, shrink left only.
NoShrinkBothDo not shrink on either side.

Additional Position Instructions

InstructionDescription
initialize_position2Creates a position, succeeding silently if it already exists (idempotent).
close_position_if_emptyCloses a position only if it has no liquidity; otherwise does nothing.
migrate_positionMigrates a v1 position to v2 format.

Bin Array Initialization

Breaking change: The initialize_bin_array instruction now sets all bin prices during initialization and consumes approximately 250,000 compute units. Integrations should allocate additional CU for this instruction. The instruction is idempotent — re-initializing an existing bin array does not return an error.

Token 2022 Support

DLMM supports Token 2022 tokens with the following permissionless extensions:
  • TransferFeeConfig / TransferFeeAmount
  • TokenMetadata / MetadataPointer
  • ConfidentialTransferMint / ConfidentialTransferFeeConfig
Extensions like PermanentDelegate, TransferHook, and MintCloseAuthority require a Token Badge to be initialized by the program admin before they can be used in DLMM pools.
Transfer hook mints are supported permissionlessly if both the transfer hook program and transfer hook authority have been revoked.

Official SDKs

Typescript SDK

Official Meteora DLMM Typescript SDK

Rust CPI Examples

Official Meteora DLMM Rust CPI Examples

Community SDKs

These SDKs are not officially maintained by our team — only the Node.js <> Typescript SDK and Rust CPI Examples are.

Python SDK

Unofficial Python SDK for DLMM built by the community