Deprecation of Rate Limiter
Mainnet deployment for Release 0.2.3 is planned for August 20, 2026, at 11:00 AM UTC+8 (Thursday).
Release summary
What We Shipped
- Deprecation of Rate Limiter
- Remove stranded
DEAD_LIQUIDITYreward
What To Do
| Integrators | What Changed | What To Do |
|---|---|---|
| Partners |
|
|
Program: cp-amm 0.2.3
Program ID (mainnet and devnet): cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGGProgram PR #219Deprecated
- Deprecated
BaseFeeMode::RateLimiter. New configs and new pools can no longer be created withBaseFeeMode::RateLimiter. Existing configs withBaseFeeMode::RateLimitercan no longer be used to create new pools. - Existing pools with
BaseFeeMode::RateLimiterare unaffected. Operators can still callfix_pool_fee_params,fix_config_fee_paramsandupdate_pool_feeson existing pools and configs withBaseFeeMode::RateLimiter.
Removed
- Removed deprecated endpoints
claim_protocol_feeandzap_protocol_fee.
Fixed
- In
CollectFeeMode::Compoundingpools, the claiming fee generated by theDEAD_LIQUIDITYshare is no longer stranded in the vault. It is settled intoPool.protocol_b_feeon everyclaim_protocol_fee2, tracked by the newPool.dead_liquidity_fee_checkpointfield. Only the claiming fee (the10_000 - compounding_fee_bpsportion of the trading fee) accrues to the protocol, whereas theDEAD_LIQUIDITYshare of compounding fees intentionally remains in the reserve, benefiting LPs and traders.PoolMetrics.total_lp_b_feeandPoolMetrics.total_protocol_b_feeare left untouched since they are monotonically increasing counters. Note: actual protocol receipts = total_protocol_b_fee + settled dead-liquidity fee
TypeScript SDK: @meteora-ag/cp-amm-sdk 1.4.6
SDK PR #108Changed
- Synced the IDL and bankrun program fixture to cp_amm 0.2.3.
- Breaking:
getBaseFeeParamsno longer takestokenBDecimaloractivationType. Those arguments were only used to encode RateLimiter params, which this helper now rejects.
Deprecated
- Deprecated
BaseFeeMode.RateLimiterfor new configs and new pools.getBaseFeeParams,validatePoolFees,createCustomPool,createCustomPoolWithDynamicConfig, andcreatePoolreject RateLimiter. Existing RateLimiter pools still quote and swap.getRateLimiterParamsand the rate-limiter encode/decode helpers remain for those pools.
Position Delegate
Mainnet deployment for Release 0.2.2 is planned for June 26, 2026, at 11:00 AM UTC+8 (Friday).
Release summary
What We Shipped
- Position Delegate
- Withdraw Dead Liquidity (Compounding Pools Only)
What To Do
| Integrators | What Changed | What To Do |
|---|---|---|
| Partners |
|
|
Program: cp-amm 0.2.2
Program ID (mainnet and devnet): cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGGProgram PR #210Added
- Added support for NFT delegates to manage positions. The following endpoints can now be signed by a delegate if the owner has granted them permission:
claim_position_fee,claim_reward,add_liquidity,remove_liquidity,remove_all_liquidity,lock_position,lock_inner_position,permanent_lock_position. Note: theclose_position,split_position, andsplit_position2endpoints remain callable by the owner only. - Added new endpoint
update_delegate_permissionto set the permission bitmask onPosition.delegate_permission. Passpermission = 0to clear all permissions. Callers are responsible for managing the SPL token delegate via SPLApprove/Revokeseparately. The bitmask supports 8 permissions:AddLiquidity,RemoveLiquidity,RemoveLiquidityToOwner,ClaimPositionFee,ClaimPositionFeeToOwner,ClaimReward,ClaimRewardToOwner,LockPosition. - Added new endpoint
withdraw_dead_liquidity_rewardallowing the funder to recover the unownedDEAD_LIQUIDITYreward share of aCollectFeeMode::Compoundingpool at any time, without waiting for the reward campaign to end. This share is tracked by the newdead_liquidity_reward_checkpointfield in the PoolRewardInfo.
Changed
- Renamed the signer account from
ownertosigner, now that the signer may be a delegate, in the following endpoints:claim_position_fee,claim_reward,add_liquidity,remove_liquidity,remove_all_liquidity,lock_position,lock_inner_position,permanent_lock_position.
Breaking Changes
- The following endpoints previously rejected unauthorized signers with Anchor’s
ConstraintTokenOwner(2015) and now reject withPoolError::InvalidAuthority(6053),PoolError::InvalidPermission(6054), orPoolError::DelegatedAmountNonZero(6070):claim_position_fee,claim_reward,add_liquidity,remove_liquidity,remove_all_liquidity,lock_position,lock_inner_position,permanent_lock_position.
TypeScript SDK: @meteora-ag/cp-amm-sdk 1.4.4
SDK PR #105Added
- Added
updateDelegatePermissionendpoint to grant or revoke delegate permissions on a position. It SPL-approves the delegate on the position NFT account and sets the on-chain delegate permission bitmask in a single transaction. - Added
withdrawDeadLiquidityRewardendpoint to withdraw the reward share attributable to a compounding pool’s permanent dead liquidity. Only valid forCollectFeeMode.Compoundingpools. - Added
PositionDelegatePermissionenum andencodeDelegatePermissionshelper to build the delegate permission bitmask. - Added
UpdateDelegatePermissionParamsandWithdrawDeadLiquidityRewardParamstypes.
Changed
- Bumped the IDL and program fixture: the signer account on position instructions (
addLiquidity,removeLiquidity,removeAllLiquidity,claimPositionFee,claimReward,lockPosition,lockInnerPositionandpermanentLockPosition) was renamed fromownertosignerso a delegate can sign. SDK parameter interfaces are unchanged.
Compounding Liquidity
Mainnet deployment for Release 0.2.0 is planned for March 13, 2026, at 11:00 AM UTC+8 (Friday).
Release summary
What We Shipped
- Compounding Liquidity
What To Do
| Integrators | What Changed | What To Do |
|---|---|---|
| Swap Routers |
|
|
| Trading Terminals |
|
|
| Partners |
|
|
Program: cp-amm 0.2.0
Program ID (mainnet and devnet): cpamdpZCGKUy5JxQXB4dcpGPiikHawvSWAd6mEn1sGGProgram PR #187Added
- Pool now will track reserves balances
(token_a_amount, token_b_amount)ifpool.layout_version == 1. For pool layout_version 0, operator can call the new endpointfix_pool_layout_versionto pump pool version. - Add a new
collect_fee_mode (Compounding), in the new collect fee mode, fee will be collected in quote token, and a percentage of fee (configurable) will be added in reserves for compounding. In the new collect fee mode, the pool doesn’t have concentrated price range, instead following constant-product formulatoken_a_amount * token_b_amount = constant. - Endpoints
create_config,initialize_customizable_poolandinitialize_pool_with_dynamic_configwill allow user to create pool withcollect_fee_mode == Compounding, and config forcompounding_fee_bps.
Changed
- Related to event
EvtSwap2, inswap_resultfield,partner_feewill be replaced bycompounding_fee, now total_trading_fee will be calculated asswap_result.claiming_fee + swap_result.compounding_fee
Removed
- Removed
partnerfield from Pool struct - Removed unused
partner_feefeature and theclaim_partner_feeendpoint
Breaking Changes
- Quote function will be changed by the new fee mode
TypeScript SDK: @meteora-ag/cp-amm-sdk 1.3.7
SDK PR #101Added
- Added new
CollectFeeMode.Compoundingmode — a constant-product (x * y = k) liquidity mode where a configurable percentage of trading fees are compounded back into pool liquidity (as token B), with the remaining fees available for claiming. Pools with compounding mode do not use price ranges. - Added
LiquidityHandlerinterface and two implementations:CompoundingLiquidityHandlerandConcentratedLiquidityHandler, with agetLiquidityHandlerfactory function that dispatches based oncollectFeeMode. - Added
compoundingFeeBpsfield toPoolFeesParamsfor configuring the compounding fee split. - Added
collectFeeModeparameter togetLiquidityDelta,getDepositQuote,getWithdrawQuote, andpreparePoolCreationParams. - Added
tokenAAmount,tokenBAmount, andliquidityparameters togetDepositQuoteandgetWithdrawQuotefor compounding liquidity calculations.
Changed
- Rewrote
swapQuote.tsto useLiquidityHandlerabstraction, supporting both concentrated and compounding liquidity modes. - Fee structure:
tradingFeesplit intoclaimingFee+compoundingFeeinSwapResult2,FeeOnAmountResult, andSplitFeestypes. - Renamed
PoolVersionenum toLayoutVersion. PoolFeesParams.paddingchanged fromnumber[]tonumber.splitFeesandgetFeeOnAmountno longer accepthasPartnerparameter.getQuotetotalFeenow computed asclaimingFee + compoundingFee + protocolFee + referralFee.getQuote2return type:tradingFeeandpartnerFeereplaced withclaimingFeeandcompoundingFee.collectFeeModecomment updated:0: BothToken, 1: OnlyB, 2: Compounding.- Liquidity delta and amount functions (
getLiquidityDeltaFromAmountA,getLiquidityDeltaFromAmountB,getAmountAFromLiquidityDelta,getAmountBFromLiquidityDelta) now acceptcollectFeeModeand dispatch to the appropriate handler.
Removed
- Removed
claimPartnerFeeendpoint andClaimPartnerFeeParamstype. - Removed
partnerFeefrom fee result types (FeeOnAmountResult,SplitFees,SwapResult2). - Removed
hasPartnerhelper function. - Removed
FEE_PADDINGconstant.

