Skip to main content
This is the documentation’s changelog — the record of updates to these pages from the project go-live onward. Each release below links to its own entry; open one for the full summary, affected chapters, and verified-date. For the protocol’s own historical timeline, see introduction/history-and-milestones.

Releases

CLMM: Anchor 1.0, excess-lamports recovery, and fixed fee owners
CLMM moves to Anchor 1.0.2 on Agave 3.1.10, the same move CPMM and LaunchLab made on 2026-09-09. Both public CPI crates now pin =1.0.2, so a single program can CPI into CPMM and CLMM. A new admin CollectExcessLamports returns rent freed by SIMD-0437. It sweeps one pool per call: the PoolState PDA signs for its own vaults and reward vaults, wSOL vaults go through the SyncNative / UnwrapLamports round-trip, and any CLMM-owned account in remaining_accounts is debited down to its rent minimum. CreateAmmConfig now writes hardcoded protocol_fee_owner and fund_fee_owner keys instead of the signer. On mainnet these are the keys already stored on all 21 configs, and existing configs are not rewritten. 6052 appended. No user-facing instruction or account layout changed.Read the full entry →
CPMM: the protocol takes a share of the creator fee
CPMM can now retain part of the creator fee. The split is applied when the fee is collected, not when it is charged: a swap still accrues the whole creator fee to creator_fees_token*, and CollectCreatorFee / CollectCreatorFeePermissionless then move a share into the pool’s existing protocol_fees_token* counters and pay the creator the rest — rounding down, so dust stays with the creator. The rate comes from a new AmmConfig.creator_fee_share_rate (carved from padding; the account is still 236 bytes, but the old padding[0] is now a live field) or from a per-creator CreatorFeeShare PDA that overrides it, managed by the new admin CreateCreatorFeeShare / CloseCreatorFeeShare. Breaking for creator-fee clients: both collection instructions take new accounts appended at the end of their lists — existing accounts keep their positions, but the new ones are mandatory, so a pre-upgrade transaction is rejected for missing accounts. UpdateAmmConfig gains param = 8. PoolState, swap math and the k check are untouched, and no error code was added. Riding along: a two-pass ordering fix in CollectExcessLamports.Read the full entry →
LaunchLab: Anchor 1.0, excess-lamports recovery, and the end of the transition gates
LaunchLab moves to Anchor 1.0.2 on Agave 3.1.10 and retires its transition scaffolding. The deprecated Initialize now fails unconditionally with NotApproved. MigrateToAmm is hard-breaking for the migration wallet: all three arguments and nine OpenBook accounts are gone, following AMM v4’s own OpenBook removal, and the program no longer initializes the market by CPI. The get_upgrade_timestamp clock gate is deleted, so the three trade remaining_accounts are unconditionally required (with the system_program slot now validated), MigrateToCpswap always takes the permissioned CPMM path, and InitializeWithToken2022 drops its amm_fee_on restriction. A new admin CollectExcessLamports returns rent freed by SIMD-0437 — mind that source accounts must be grouped by which of the three vault authority PDAs owns them. Three MigrateToCpswap address constraints moved into the instruction body, changing 2012 to 2502. 6031 appended. No account layout, trade instruction or fee behaviour changed.Read the full entry →
CPMM: Anchor 1.0, excess-lamports recovery, and fixed fee owners
CPMM moves to Anchor 1.0.2 on Agave 3.1.10 and adds an admin CollectExcessLamports that returns rent freed by SIMD-0437 from vaults, LP mints and PDAs — wrapped-SOL vaults included, via a SyncNative / UnwrapLamports round-trip that leaves the wrapped balance untouched. Three behavioural changes ride along: CreateAmmConfig now writes hardcoded protocol_fee_owner and fund_fee_owner keys instead of the signer (existing configs are not migrated — read the fields), the hardcoded four-address Token-2022 MINT_WHITELIST is removed so the SupportMintAssociated registry PDA is the only remaining bypass, and ClosePermissionPda now accepts the dedicated grant authority. 6015 appended. No user-facing instruction or account layout changed.Read the full entry →
AMM v4: Solana 3.0 dependencies and excess-lamports recovery
AMM v4 rebuilds against solana-program 3.0.0, spl-token 9.0.0, spl-associated-token-account 8.0.0 and the new solana-system-interface crate, and adds an admin-only WithdrawExcessLamports (tag 18) that returns rent freed by SIMD-0437. Every trader- and LP-facing instruction keeps its accounts, arguments and math, and nothing in the release is breaking: CreateConfigAccount stopped reading its trailing rent sysvar but still accepts the old five-account list. AmmError gains code 60 (it numbers from 0, not 6000).Read the full entry →
LaunchLab: platform curve rules replace the curve-parameter whitelist
Launch-parameter restrictions move off PlatformConfig into per-config PlatformCurveRule accounts. A rule holds up to 10 check groups of up to 25 (field, op, value) constraints over 19 launch parameters, with Eq / Gte / Lte / Neq — so a platform can finally express a value band, alternative tiers, a graduation-valuation cap, a migration floor, token-type gating, or a group that switches over on a date, none of which the equality-only whitelist could. PlatformConfig keeps its 944-byte size: restrict_curve_param, curve_rule_manager, and the removed vec’s length prefix all come out of the padding. Decoders must drop the trailing Vec<PlatformCurveParam>, and launch builders must append the rule PDA to remaining_accounts while the flag is on. Two instructions removed, four added, two UpdatePlatformConfig variants added, 6024–6030 appended. IDL refresh required. The SDK ships two pure off-chain checks so a creator never has to learn a rule from a reverted transaction, and the entry documents a devnet rehearsal before enabling the flag on mainnet.Read the full entry →
LaunchLab: platform holds the withdraw-withheld authority from mint creation
InitializeWithToken2022 now writes PlatformConfig.transfer_fee_extension_auth into the new base mint’s withdraw_withheld_authority instead of the launch authority PDA, so a platform can sweep withheld transfer fees during the bonding-curve phase rather than waiting for graduation — the program itself has no withdraw-withheld instruction. MigrateToCpswap reassigns that authority only when the PDA still holds it, which keeps graduation working for mints of both generations. transfer_fee_config_authority still moves at graduation only, so rotating transfer_fee_extension_auth mid-launch silently leaves the two authorities on different keys. No account layout, instruction, argument, or error code changed.Read the full entry →
LaunchLab: platform fee rate cap raised to 500 bps
The platform fee_rate ceiling moves to 50000 (500 bps) on both paths that validate it. CreatePlatformConfig was capped at 10000 (100 bps) since the program’s first release; UpdatePlatformConfig was capped at 25000 (250 bps) since 2026-01-27. The two checks now agree, so a platform created at any permitted rate can also be updated at it — including through the AllInfo bulk variant, which re-validates fee_rate while rewriting every other field. The two paths still raise different errors (InvalidInput on create, InvalidPlatformInfo on update). No account layout, instruction, or error code changed, and no existing platform or launch reprices. GlobalConfig.max_share_fee_rate stays at 100 bps and bounds only the per-transaction referral share_fee_rate.Read the full entry →
LaunchLab: Token-2022 quote mints
A launch can now be quoted in a Token-2022 mint. CreateConfig, InitializeV2, InitializeWithToken2022, the four swap instructions, and every fee claim accept either token program in their quote-program slot; the deprecated Initialize stays legacy-only. Swap slippage bounds are now compared against what the payer actually pays or receives, net of the quote mint’s transfer fee. PoolState.token_program_flag bit1 becomes meaningful, so decoders that test the whole byte against 0 misread a legacy base mint as Token-2022. MigrateToCpswap renames its two token-program accounts to token_program / token_program_2022, and 6023 is reused for CalculateOverflow.Read the full entry →
LaunchLab: CPMM-only launches and platform config controls
New launch initialization now requires CPMM while legacy AMM v4-bound state remains migratable. Before this release, creator_scale produced a creator-owned Fee Key; CPMM migrations executed after the upgrade instead consolidate platform_scale + creator_scale into one platform-owned Fee Key share. Platforms can also restrict launches with their own PlatformAllowConfig PDAs, and migration builders must append both CPMM support-mint PDAs.Read the full entry →
CLMM: restricted-issuer position NFT freezing
New CLMM position NFT mints use their pool as freeze authority, but their token accounts remain unfrozen by default. Freezing occurs only on OpenPositionV2 or OpenPositionWithToken22Nft when either underlying vault mint’s freeze authority matches the restricted-issuer list. A matching position cannot transfer or change owner but can still manage liquidity. Its ClosePosition call must append the pool so CLMM can thaw, burn, and close atomically. Existing positions remain unchanged.Read the full entry →
CPMM: permissionless creator-fee collection
An additive CollectCreatorFeePermissionless instruction lets any payer sweep all accrued creator fees, while constraining the beneficiary and both token destinations to PoolState.pool_creator and the creator’s canonical ATAs. The original creator-signed path remains unchanged. CreatePermissionPda also accepts a dedicated grant authority, while ClosePermissionPda stays admin-only.Read the full entry →
CLMM: permissioned multi-pools and limit-order frozen-account guard
Two additive, backwards-compatible CLMM program updates. CreatePermissionedPool folds a client-supplied non-zero seed_index into the pool PDA seeds, letting a whitelisted operator (one holding a Permission PDA) create multiple pools per (config, mint0, mint1) — so a pool ID is no longer canonical for a pair. New admin instructions CreatePermissionPda / ClosePermissionPda manage those grants, and PoolState gains a seed_index field (carved from padding, no size change). Separately, OpenLimitOrder now takes the output-side accounts and rejects orders whose input or output token account is frozen (NotApproved).Read the full entry →
AMM v4: remove OpenBook / Serum dependency
AMM v4 removes its long-dormant OpenBook/Serum dependency, all order-book CPIs, and the dead market-making instructions. SwapBaseIn / SwapBaseOut, Deposit, and Withdraw keep their layouts (removed market accounts are now ignored, not validated); a hard-breaking WithdrawPnl (17 → 10, no compatibility) and SetParams (reduced accounts + renumbered param); and Initialize, PreInitialize, MonitorStep, MigrateToOpenBook, WithdrawSrm, SimulateInfo, AdminCancelOrders are no longer callable. On-chain account layouts and error codes stay stable; migrate swaps to the V2 entrypoints.Read the full entry →
Stable AMM: remove dead OpenBook (market) code
Stable AMM removes its long-dormant OpenBook market-making accounts and code. Smaller SwapBaseIn / SwapBaseOut (18 → 9), Deposit (14 → 12), and Withdraw (21/22 → 12) layouts (old layouts still compatible); a hard-breaking WithdrawPnl change (16 → 10, no compatibility); the referral fee retired; and a simplified vault-only pool-asset formula. Most other Stable instructions are no longer callable.Read the full entry →
CLMM: limit orders, single-sided fee, dynamic fee
Three opt-in, backwards-compatible CLMM capabilities: first-class limit orders (with a limit_order_admin settle keeper), single-sided fee collection (CollectFeeOn), and a volatility-tracking dynamic fee. Adds CreateCustomizablePool, a PoolState reshape (indexer breaking change), new TickState fields, eleven new error codes (with a numeric shift), and matching SDK / API additions.Read the full entry →
Initial publication
First public release of the Raydium documentation set, verified against live mainnet-beta deployments and @raydium-io/raydium-sdk-v2@0.2.42-alpha.Read the full entry →

Documentation conventions

  • Versioning: this documentation uses calendar-based versioning (YYYY-MM-DD). Each update adds a new entry page and a new row at the top of the timeline above.
  • One page per release: every release summary lives on its own page under reference/changelog/, so this index stays short and each entry is independently linkable.
  • Verified date: every entry records when the content was last cross-checked against on-chain / API state and the program source. If not stated, assume the entry’s main date.
  • Breaking changes: called out in a boxed warning on affected pages and tagged in the entry.
  • Coverage: this changelog covers the documentation set itself. The protocol’s own historical timeline lives in introduction/history-and-milestones and is the source of truth for “when did X happen on Raydium”.

Corrections

If you find an error in this documentation, please open an issue or pull request on the documentation repository. Corrections are logged as changelog entries.

Pointers