> ## Documentation Index
> Fetch the complete documentation index at: https://docs.meteora.ag/llms.txt
> Use this file to discover all available pages before exploring further.

# What is DLMM Pro?

> DLMM Pro is Meteora's tick-based concentrated liquidity AMM, with multi-range NFT positions, on-chain limit orders, scheduled and dynamic fees, and launch controls.

> [!WARNING]
>
> DLMM Pro is in beta and is subject to breaking changes.

DLMM Pro is Meteora's concentrated liquidity AMM built on ticks. LPs place liquidity in price ranges, makers place limit orders at single prices, and both live in the same tick state, so one swap fills LP liquidity and limit orders together.

A pool's tick spacing, fee schedule, fee token and optional extensions are fixed when it is created, either by a static config or by the creator of a dynamic-config or launch pool. Positions and limit orders are Token 2022 NFTs, so they can be transferred, delegated and tracked like any other token.

> [!NOTE]
>
> DLMM Pro runs on the program `dPro1D5wiqnGMH8vMDG23jh35btTHoWdyqXjqkqxe8n` on mainnet and devnet.

> [card] Ticks, Not Bins
>
> Every tick is a 0.01% price step. A pool's tick spacing (1 to 256) sets how far apart LP range edges and orders can be.

> [card] Multi-Range Positions
>
> One position NFT holds up to 45 ranges, each with its own liquidity, fees and rewards. Spot, Curve and Bid-Ask shapes are built from these ranges.

> [card] Limit Orders in the Pool
>
> Orders of up to 25 ticks sit beside LP liquidity, fill at the exact tick price and earn a share of the trading fee.

> [card] Scheduled and Dynamic Fees
>
> Fixed, time-scheduled or market-cap-scheduled base fees, plus an optional fee that rises with volatility. Fees range from 0.01% to 99%.

> [card] Launch Controls
>
> Activation rules open swaps at a set time, and deposits and withdrawals at a set time or once the price reaches a target, with a whitelisted wallet for each action.

> [card] Liquidity Mining
>
> Pools with the liquidity mining extension stream up to two reward tokens to in-range liquidity.

## How DLMM Pro Works

A pool stores the current price as a square-root price and the tick it falls in. Liquidity is recorded at ticks: each tick holds the change in LP liquidity at that price (`liquidity_net`) and the limit orders resting there. Ticks live in tick arrays, and the pool keeps a bitmap of which tick arrays hold anything, so swaps skip empty stretches of the price curve.

```mermaid theme={"system"}
%%{init: {"theme": "base", "themeVariables": {"fontFamily": "Inter, ui-sans-serif, system-ui", "fontSize": "14px", "primaryColor": "#202031", "primaryTextColor": "#F9F9FB", "primaryBorderColor": "#434360", "lineColor": "#8585A1", "textColor": "#8585A1", "edgeLabelBackground": "#202031", "clusterBkg": "#12121C", "clusterBorder": "#2A2A3C"}}}%%
flowchart TB
  config["Config<br/>static or dynamic"] --> pool["Pool<br/>price, tick, liquidity, fees"]
  pool --> reserves["Reserve X and Y"]
  pool --> oracle["Oracle"]
  pool --> arrays["Tick arrays<br/>LP liquidity and orders per tick"]
  position["Position NFT<br/>up to 45 ranges"] -- "liquidity at range edges" --> arrays
  order["Limit order NFT<br/>up to 25 ticks"] -- "amounts at ticks" --> arrays
  classDef accent fill:#F54B00,stroke:#F54B00,color:#FFFFFF
  classDef violet fill:#6E45FF,stroke:#6E45FF,color:#FFFFFF
  class pool accent
  class position,order violet
```

A swap starts at the current price and walks toward the next tick that holds liquidity. Between ticks it trades against LP liquidity, and the price moves along the curve. When it reaches a tick with resting limit orders on the other side of the trade, it fills those orders at that tick's price, then crosses the tick, applies its liquidity change and keeps going. A swap is always exact-in: it consumes the whole input or fails.

The pool account stores the two token mints and their reserve accounts, the creator, the fee settings and the dynamic fee state, the partner and protocol fee balances, the active liquidity, the initial and current square-root price, the current tick, the fee growth per unit of liquidity for each token, the inline tick array bitmap, the activation point, the pool status and the extension data. Everything else sits in separate accounts:

| Account | Holds | Created by |
| - | - | - |
| Config | Settings a static or dynamic config pool copies at creation | An operator |
| Pool | The state above | The payer of the pool creation transaction |
| Reserve X and Reserve Y | The pool's tokens, one account per mint | The payer of the pool creation transaction |
| Oracle | The tick-cumulative observations | The payer of the pool creation transaction |
| Tick array | Up to 128 usable ticks, grown and shrunk as ticks come and go | Whoever first needs it |
| Tick array bitmap extension | Bitmap bits beyond the inline window | At pool creation if needed, or by anyone later |
| Position array and NFT | Up to 45 ranges and their liquidity, fees and rewards | The position owner or payer |
| Limit order and NFT | Up to 25 order ticks | The order owner or payer |

A typical life of a pool:

1. A pool is created with a token pair, an initial price, a tick spacing, a fee schedule, a fee token and an activation type. Nothing about these can be changed afterwards.
2. LPs open positions and deposit. Each range edge creates or updates a tick, and the pool's active liquidity changes if the range contains the current tick.
3. Makers open limit orders. Each order tick stores the deposited amount on the tick.
4. A swap works out one fee rate from the pool's fee settings, then walks ticks in the direction of the trade. At each tick it fills LP liquidity, then orders, takes the fee on the step and splits it, then crosses the tick and moves on until the input is used up.
5. LPs and makers collect: LPs claim fees and rewards from a position, makers cancel an order to get their proceeds, referrals are paid inside the swap or cancel, and partners and Meteora claim their balances from the pool.
6. Positions and orders are closed, which burns the NFT and returns the rent.

A swap also needs the tick arrays it will pass through in its transaction. If they run out before the input is used up, it fails with `NotConsumingFullAmountIn`. The caller sets a minimum output, and the swap fails with `ExceededSlippage` if the output after any transfer fee is lower.

Read [Ticks and Liquidity](https://docs.meteora.ag/core-products/dlmm-pro/ticks-and-liquidity.md) for the price grid and [Limit Orders](https://docs.meteora.ag/core-products/dlmm-pro/limit-orders.md) for how orders at one tick are filled.

## DLMM Pro and DLMM

DLMM Pro is a separate program from [DLMM](https://docs.meteora.ag/core-products/dlmm/what-is-dlmm), and pools on one cannot be used from the other. The main differences:

| | DLMM | DLMM Pro |
| - | - | - |
| Price grid | Bins, spaced by the pool's bin step | Ticks of 0.01%, with usable ticks set by the tick spacing |
| Liquidity inside a step | Constant sum: one price per bin | Concentrated constant product between ticks; limit orders fill at the tick price |
| Position | One account, one contiguous bin range | One NFT, up to 45 ranges that can overlap |
| Limit orders | Only on pools in limit-order mode | On every pool |
| Liquidity mining | Only on pools in liquidity-mining mode | Optional extension; limit orders still work |
| Base fee | Bin step and base factor | Fixed, time scheduler or market cap scheduler |
| Fee token | `InputOnly` or `OnlyY` | `OutputToken` or `OnlyY` |
| Price step | Set per pool, with a bin step of up to 400 basis points | Fixed at 0.01% per tick, with the tick spacing choosing how many ticks apart usable ticks are |
| Storage unit | Bin arrays of 70 bins | Tick arrays of 128 usable ticks that grow and shrink |
| Position size | A 70 bin default layout, and up to 1,400 bins with a dynamic position | 1 to 45 ranges of any width |

The DLMM column comes from the [DLMM overview](https://docs.meteora.ag/core-products/dlmm/what-is-dlmm) and its [collect fee mode](https://docs.meteora.ag/core-products/dlmm/collect-fee-mode.md) page. Limit orders on DLMM Pro are not a pool mode, so they work together with liquidity mining, and a position can overlap its own ranges to build a shape with fewer slots.

### Limits at a Glance

| Item | Value |
| - | - |
| Tick range | `-443636` to `443636`, prices from about `2^-64` to `2^64` |
| Tick spacing | 1 to 256 |
| Tick array | 128 usable ticks |
| Inline tick array bitmap | Indexes `-512` to `511`, with the extension to `-3584` and `3583` |
| Ranges per position | 1 to 45 |
| Liquidity weight in a shaped deposit | 1 to 255 |
| Ticks per limit order | 1 to 25, all on one side |
| Trading fee | 0.01% to 99% |
| Protocol share of the LP fee | 10%, or 20% on launch pools |
| Protocol share of the limit-order fee | 50% |
| Host fee, as a share of the protocol fee | 20% |
| Limit order referral, as a share of the maker's fee | 20% |
| Partner fee, as a share of the protocol fee after the host fee | 0% to 50% |
| Oracle observations | 1 to 500, one new sample every 15 seconds at most |
| Dynamic fee periods | Filter below decay, decay at most 1 hour |
| Reward slots | 2, each emission from 1 day to 1 year, starting at most 30 days ahead |
| Vesting schedule | At most 10 years from the lock |
| Activation points | At most 30 days ahead of creation |

## Who DLMM Pro Is For

> [accordion] Liquidity providers
>
> Build a position from several ranges instead of one, shape it with Spot, Curve or Bid-Ask weights, and adjust it without closing it. Locked and vesting liquidity keeps earning fees and rewards.

> [accordion] Traders and market makers
>
> Place bids and asks at exact prices inside the pool. Filled orders earn half of the fee charged on the volume they fill, and relative orders protect you if the price moves before the transaction lands.

> [accordion] Token teams and launchpads
>
> Start a pool with a high fee that falls over time or as the price rises, open trading at a set time, keep deposits and withdrawals closed to the public until a set time or a price milestone, and run a reward campaign from the pool itself.

> [accordion] Aggregators and integrators
>
> The TypeScript SDK and the Rust commons crate quote exact-in swaps with the same math as the program, including limit-order fills and Token 2022 transfer fees.

## Explore DLMM Pro

> [card] [Ticks and Liquidity](https://docs.meteora.ag/core-products/dlmm-pro/ticks-and-liquidity.md)
>
> Tick prices, tick spacing, ranges, tick arrays and how a swap moves through them.

> [card] [Positions](https://docs.meteora.ag/core-products/dlmm-pro/positions.md)
>
> Multi-range NFT positions, liquidity shapes, fees, locks and delegates.

> [card] [Limit Orders](https://docs.meteora.ag/core-products/dlmm-pro/limit-orders.md)
>
> Asks and bids at single ticks, fill order, maker fees and the order lifecycle.

> [card] [Fees](https://docs.meteora.ag/core-products/dlmm-pro/fees.md)
>
> Base fee modes, the dynamic fee, the fee token, and where each part of a fee goes.

> [card] [Pool Creation and Activation](https://docs.meteora.ag/core-products/dlmm-pro/pool-creation-and-activation.md)
>
> Static configs, dynamic configs, launch pools and activation rules.

> [card] [Liquidity Mining](https://docs.meteora.ag/core-products/dlmm-pro/liquidity-mining.md)
>
> Reward slots, emission schedules and rewards emitted while no liquidity is in range.

> [card] [Token 2022 Support](https://docs.meteora.ag/core-products/dlmm-pro/token-2022-support.md)
>
> Which mints work without review, token badges, transfer fees and transfer hooks.

> [card] [Formulas](https://docs.meteora.ag/core-products/dlmm-pro/formulas.md)
>
> The math behind prices, liquidity amounts, fees, fee schedules and rewards.

> [!WARNING]
>
> Concentrated liquidity earns fees only while the price is inside your ranges. If the price leaves every range of a position, that position stops earning trading fees until the price returns or you move the liquidity.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.