Changelog
Carbon's release history, from 0.3.0 to 2.0.0, with the breaking changes and migration notes for each version.
On this page
- 2.
0. 0 (2026-09-04) - Highlights
- Also in this release
- Migration from Carbon 1
- Carbon 2 datasource set
- 1.
0. 0 (2026-06-04) - Core
- Datasources
- Decoders
- CLI and tooling
- 0.
12. 0 (2025-11-27) - 0.
11. 0 (2025-10-18) - 0.
10. 0 (2025-09-16) - 0.
9. 1 (2025-07-18) - 0.
9. 0 (2025-07-06) - 0.
8. 1 (2025-05-12) - 0.
8. 0 (2025-04-18) - 0.
7. 0 (2025-03-30) - 0.
6. 2 (2025-03-21) - 0.
6. 1 (2025-03-17) - 0.
6. 0 (2025-03-12) - 0.
5. 1 (2025-02-22) - 0.
5. 0 (2025-02-20) - 0.
4. 1 (2025-02-18) - 0.
4. 0 (2024-12-19) - 0.
3. 1 (2024-12-02) - 0.
3. 0 (2024-11-21) - Added
- Changed
- Fixed
What changed in each Carbon release. 2.0.0 comes from CHANGELOG. at the v2.0.0 tag; earlier versions come from the GitHub release notes, which are the only record for them. Numbers like (#587) are pull requests in sevenlabs-hq/carbon. To upgrade from Carbon 1, follow Migrate to 2.0.
2.0.0 (2026-09-04)#
Carbon 2.0 is the Agave 4 compatibility release. It upgrades the supported Solana dependency cohort, adds end-to-end Transaction V1 handling, and standardizes account-closure delivery without introducing the larger datasource and pipeline redesign planned for Carbon 3.
Highlights#
- Upgraded the workspace to the Agave 4.2-compatible Solana crates and Rust 1.96.1 (#587).
- Added Transaction V1 conversion and instruction traversal, including runtime inner instructions and V1 account metadata.
- Added strict Yellowstone protobuf conversion for legacy, V0 and V1 transactions.
- Classified zero-lamport account updates as
Update::consistently while preserving the finalAccountDeletion Accountstate. - Added an optional starting slot to Helius LaserStream (#585) and opt-in tonic client reconnection to Yellowstone (#589).
- Added native Codama event rendering (#575, #578), event-CPI discriminator exports (#583), encoded discriminator handling, and base58 instruction-metadata serialization (#576).
- Hardened instruction handling for short log events (#582) and invalid CPI stack heights (#584), and sanitized exported Prometheus metric names (#570).
- Updated projects generated by
@sevenlabs-hq/andcarbon-cli @sevenlabs-hq/to depend on Carbon 2 crates.carbon-codama-renderer - Corrected the CLI package's ESM and CommonJS export paths.
- Made the CLI reject GraphQL scaffolds without the Postgres storage layer they require.
- Fixed template lookup through the renderer's CommonJS entry point.
- Raised the npm packages' runtime requirement to Node.js 20.18.0.
Also in this release#
carbon-token-program-decoderdecodes accounts with the SPLPacklayout (#569).- Yellowstone gRPC datasource: accepts a ping as the first event after a disconnect (#573), backs off between failed subscribe attempts (#581), and keeps the subscription filters on the ping resubscribe (#588).
carbon-helius-atlas-ws-datasourceuses the latest published Helius SDK crate (#567).
Migration from Carbon 1#
Toolchain and dependencies#
Carbon 2 requires Rust 1.96.1. The companion CLI, renderer and version-registry packages require Node.js 20.18.0 or newer. Update every directly declared Carbon crate to 2.0.0 and keep direct Solana dependencies compatible with the Agave 4.2 cohort. Do not mix Carbon 2 with Carbon 1 datasource or decoder crates in one dependency graph.
If Carbon types appear in your public API, update imports and fix type mismatches after resolving the new Solana crates. A single version of each Solana type crate should resolve in the final graph.
Transaction source configuration#
Caller-owned RPC block configurations must opt into Transaction V1 and request a binary transaction encoding. Carbon cannot reconstruct the original transaction from Json or JsonParsed payloads.
RpcBlockSubscribeConfig {
encoding: Some(UiTransactionEncoding::Base64),
transaction_details: Some(TransactionDetails::Full),
max_supported_transaction_version: Some(1),
..RpcBlockSubscribeConfig::default()
}Use the equivalent fields on RpcBlockConfig when constructing RpcBlockCrawler. Carbon's RPC transaction crawler and Helius GTFA datasource set V1 and Base64 internally.
For Helius Atlas transaction subscriptions, override the SDK's JSON-parsed default and keep V1 enabled:
TransactionSubscribeOptions {
encoding: Some(UiEnhancedTransactionEncoding::Base64),
max_supported_transaction_version: Some(1),
..TransactionSubscribeOptions::default()
}Account deletions#
AccountDeletion now contains the source's final account: Account. Custom datasources should construct an AccountUpdate and call into_ so every zero-lamport account is normalized at the same boundary.
The former account_ constructor argument and fields were removed. Remove that argument when constructing:
HeliusWebsocketLaserStreamGeyserClientYellowstoneGrpcGeyserClientStreamMessageClient
If you construct AccountDeletion directly, provide its new account field.
Datasource configuration changes#
LaserStreamClientConfig::has a new trailingnew from_argument. Passslot: Option< u64> Noneto preserve the previous starting behavior, or useLaserStreamClientConfig::and set the field.default() - Yellowstone tonic client reconnection is disabled by default. Opt in with
YellowstoneGrpcClientConfig::when the upstream supports replay appropriate for your pipeline.with_ reconnect(ReconnectConfig)
SPL Token account helpers#
The Mint::, Multisig:: and Token:: convenience methods in carbon-token-program-decoder were removed. Direct callers should unpack with solana_ and convert the result:
let token = spl_token_interface::state::Account::unpack(data)
.ok()
.map(carbon_token_program_decoder::accounts::token::Token::from);Normal decoding through TokenProgramDecoder requires no special migration.
The step-by-step version of this section, with before-and-after code, is Migrate to 2.0.
Carbon 2 datasource set#
The Carbon 2 publication contains these twelve datasource crates:
- Helius Atlas WS, GPA V2, GTFA and LaserStream
- RPC block crawler, block subscribe, GPA, program subscribe and transaction crawler
- Stream message
- Validator snapshot
- Yellowstone gRPC
carbon-jito-shredstream-grpc-datasource and carbon-jetstreamer-datasource are not published on the 2.0 line. Jito ShredStream does not yet support Transaction V1, while Jetstreamer does not yet support the Solana v4 stack. Existing versions remain available, but they must not be selected as Carbon 2 dependencies.
1.0.0 (2026-06-04)#
The first stable release: a core refactor with atomic metrics, a filtering redesign, versioned decoders and CPI events, four new datasources, and regenerated decoders. Release notes.
Core#
- Atomic metrics (#531) and datasource-level metrics flushing (#538).
- Filtering redesign (#534).
- Versioned decoders (#535).
- Transaction pipe refactor (#537) and performance updates (#532).
ArrangeAccountsrefactor (#529).- CPI events support (#550).
- Transaction index field on
TransactionUpdateandTransactionMetadata(#503). - Datasource disconnection tracking with gap detection (#471).
- Better identification of writable accounts (#542).
- Precompile offsets handled in instruction log extraction (#526).
- Consistency pass and workspace doc comments (#562).
- Rust toolchain 1.88.0 (#488).
Datasources#
- New: Jetstreamer (#487), RPC GPA (#492), Helius GPA v2 (#493), Helius GTFA (#505) and validator snapshot (#497).
- Helius WebSocket: configurable timeouts and reconnection on idle transaction streams (#507).
Decoders#
- New: Onchain Labs DEX router v1 (#518) and v2 (#519), Jupiter Lend Liquidity (#524).
- Optional base58 serialization for
Pubkeyfields in decoder structs (#514). - All decoders regenerated with the new generator (#540) and updated from the latest IDLs (#564).
- Fixes: Token-2022 accounts without extensions (#510) and an extensions panic (#513); Pump.fun, PumpSwap and Pump fees decoders (#517, #545), including
OptionBooldeserialization (#555, #556); program ID validation in the Meteora DBC decoder (#516); Meteora DAMM v2 from the latest IDL (#522); Orca Whirlpool event discriminator (#547); Jupiter swap (#490); bugs found in a decoder survey (#565).
CLI and tooling#
- The CLI generates workspace decoders (#539) and passes clippy on generated decoders (#536); CI fixes for generated decoders and indexers (#489).
- Packages: removed an unused
base64dependency and madeserde-big-arrayconditional (#523). - New examples (#544, #558).
- Corrected path typos in
workspace.(#557).dependencies
0.12.0 (2025-11-27)#
- Upgraded the Solana crates (#435, #470, #482) and other outdated dependencies (#474).
- Added the
instruction_macro (#447).decoder_ collection_ fast - Fixed the filter in
decode_(#448).log_ events() - New decoders: Bonkswap (#450), PancakeSwap (#462), DFlow aggregator v4 (#480), Swig (#483).
- Pump.fun:
create_v2(#465) andbuy_(#467) instructions. PumpSwap:exact_ sol_ in buy_(#466, #473) and theexact_ quote_ in is_pool field (#472).mayhem_ mode - Updated Meteora DAMM v2 (#457) and fixed the Token-2022 decoder with extensions (#479).
- CLI: code generation enhancements and fixes (#453, #458, #460),
BorshDeserializeinstead ofCarbonDeserializein generated code (#485), README (#451).
0.11.0 (2025-10-18)#
- New Codama renderer and a new Carbon CLI (#386).
- Helius LaserStream datasource with replay (#433).
- Circle CCTP decoders (#444).
- Raydium AMM v4
SwapBaseInV2andSwapBaseOutV2(#441); Jupiter swap decoder update (#438). - Rust tuple structs in IDLs;
track_field type updated in Pump.fun and PumpSwap (#442).volume - Attributes required by
instruction_(#439).decoder_ collection - Associated Token Account decoder accepts empty data as
Create(#437).
0.10.0 (2025-09-16)#
- Generic stream message datasource (#372).
- Log events extraction (#413).
- Optional accounts in decoders (#370).
- Account updates carry the transaction signature (#398).
- Configurable Yellowstone gRPC client (#371, #405).
- RPC transaction crawler fix for newly sent transactions (#380).
- New decoders: WaveBreak (#390), Bubblegum (#393), Meteora DBC (#407, #409, #410, #424), Heaven (#414), Meteora Vault (#415), Vertigo (#418), Pump fees (#420).
- Updated decoders: PumpSwap (#385, #389, #430), Pump.fun (#392), Raydium CPMM (#403), Raydium Launchpad (#404), Orca Whirlpool (#406, #408, #416), Token-2022 Scaled UI Amount and Pausable extensions (#382), System program legacy accounts (#401), Metaplex Token Metadata account discriminators (#426).
- CLI:
manddshortcuts for mainnet-beta and devnet (#431).
0.9.1 (2025-07-18)#
- The "not all bytes read" warning is now logged at debug level (#361).
- Discriminators are exported from decoders (#374).
- Missing derives on Raydium AMM v4 accounts and other types (#373, #379).
- Boop decoder update (#364).
- Solana crates locked to
~2.2(#381).
0.9.0 (2025-07-06)#
- The
Filtertrait andDatasourceFilter(#355). - The pipeline stops automatically after all datasources complete (#317).
- Configurable channel sizes (#340).
InstructionMetadata::(#293).absolute_ path - Raw account and instructions returned to processors (#330).
- Retries in the RPC transaction crawler (#337).
- Configurable Prometheus metrics port (#350).
- Yellowstone gRPC block filters (#324) and pipeline cancellation fix (#348).
- Shutdown clean-up (#341).
carbon-fetch-ixfor generating transaction fixtures (#305); fixtures and tests for Raydium CLMM, Meteora DLMM and Orca Whirlpool (#303, #297, #347).- New decoders: Meteora DAMM v2 (#327, #329), Gavel (#318), Raydium stable swap (#351).
- Decoder updates and fixes: Pump.fun IDL (#301), Meteora DLMM 0.9.0 (#308), Meteora virtual curve events (#328), PumpSwap owner check (#333), Raydium CPMM
PoolState(#339). - Linting and a pre-commit hook (#306); examples read
RUST_LOGfrom the environment (#335);randno longer required forsolana-signatureandsolana-pubkey(#310).
0.8.1 (2025-05-12)#
- GraphQL server (#284).
- Postgres support in the Token program decoder (#229).
block_hashon transactions for fork detection (#278).- Block-only subscriptions (#283).
SerializeforDecodedInstruction(#252);IntoIterforNestedInstructions(#289).- Nested instructions parsed inside
TransactionPipe(#267); fasterextract_(#273) and gRPC transaction metadata handling (#261).instructions_ with_ metadata - Lenient deserialization that warns about remaining bytes (#291).
- Vendored Jito protos (#253); Jito ShredStream deduplication (#257) and
is_(#254).vote: false - Fixed a duplicate WebSocket connection (#270), account meta
is_signer(#274) and thelogexport used by the proc macro (#292). - New decoders: Meteora virtual curve (#256), Boop (#280), Address Lookup Table (#290).
- Fixes: Jupiter nested empty instructions (#268), Raydium CLMM event discriminators (#294), Meteora DLMM
addLiquidityByStrategy2(#295), doc tests (#281). - Pinned rustls 0.23 with the
aws_lc_rscrypto provider in an example to stop a startup panic (#260).
0.8.0 (2025-04-18)#
- Jito ShredStream gRPC datasource (#249).
- The RPC transaction crawler discovers newly sent transactions (#248).
- CPI instructions parsed (#221), including the third depth level (#242).
- Direct Solana crates instead of
solana-sdk(#233, #245). serdeSerializeandDeserializederived for generated accounts (#238), withBigArraysupport (#239).- Raydium Launchpad decoder (#250); Pump.fun account layouts and instructions updated (#236).
0.7.0 (2025-03-30)#
- Bounded update channel (#219), default size 1,000 (#220).
- RPC block crawler datasource (#222).
- Meteora Pools (#224) and Virtuals (#225) decoders.
- Started the move from
solana-sdkto direct dependencies (#226). - Fixes to the Associated Token Account and System program decoders (#204).
0.6.2 (2025-03-21)#
- Instruction index in instruction metadata (#216).
- PumpSwap decoder (#214).
- Project scaffolding in the CLI (#197).
- Corrected Raydium CLMM program address (#206).
0.6.1 (2025-03-17)#
- Interactive CLI (#184).
- Datasource cancellation token on the pipeline (#198).
- Program IDs exported from decoders (#203).
- Several new program decoders (#199); Fluxbeam (#192) and Pump.fun (#195) fixes; Jupiter DCA fixtures and tests (#191).
0.6.0 (2025-03-12)#
block_timeonTransactionUpdateandTransactionMetadata(#181).carbon-test-utilscrate (#167).- New decoders: Associated Token Account (#178), OKX DEX (#183), Stake program (#186).
- Corrected the Jupiter Limit Order 2 program address (#177).
- A README for every crate (#182), crate keywords and categories (#188), release scripts (#189), Lifinity fixtures and tests (#190).
0.5.1 (2025-02-22)#
- Decoders pre-filter by program ID (#175) and check accounts (#176).
- New decoders: Zeta (#168), Phoenix v1 (#169), Lifinity AMM v2 (#170), Stabble stable swap (#171) and weighted swap (#172), Raydium liquidity locking (#173).
0.5.0 (2025-02-20)#
- Performance optimizations (#120).
- Codama IDL parsing in the CLI (#136).
- Dependency fixes, Yellowstone bump and pinned Solana crates (#144, #166).
- New decoders: Moonshot (#148), Name Service (#151), Token-2022 (#150), Raydium CPMM (#154), Jupiter Perpetuals (#158), Fluxbeam (#159), Drift v2 (#160).
- Fixes to slice handling and extra remaining-account fields for swaps (#152).
- Workspace dependencies, lints and formatting (#156).
0.4.1 (2025-02-18)#
- Reconnection logic for datasources and a cluster option for the Atlas WebSocket datasource (#112).
- Conventional
Fromtraits for instruction extraction (#114). - Removed the "pipes against update types" checks (#135).
- Anchor PDA IDL parsing in the CLI (#124).
- New decoders: Raydium CLMM (#118), OpenBook v2 (#140); Sharky decoders moved into the repository (#131).
- Fixes: regenerated Meteora DLMM decoders (#130), Raydium AMM account parsing (#134), mint account in
TransferChecked(#138).
0.4.0 (2024-12-19)#
- Access to the transaction's
VersionedMessageon transaction metadata (#106).
0.3.1 (2024-12-02)#
- CLI code generation for IDLs of native Rust programs (#101).
- Helius Atlas WebSocket datasource on Helius SDK 0.2.2 (#104).
- Metaplex decoders regenerated with the fixed CLI for non-Anchor programs (#103).
0.3.0 (2024-11-21)#
Added#
- A
solana_field ontransaction_ status:: TransactionStatusMeta TransactionMetadata(#92). - The transaction pipe processor type includes
Vec<in its instruction type (#95).DecodedInstruction> - Type aliases for processor input types:
AccountProcessorInputType,InstructionProcessorInputType,TransactionProcessorInputType(#95). carbon-kamino-lending-decoderandcarbon-kamino-vault-decoder.
Changed#
- Schemas are optional inside transaction pipes (#95).
- Pipeline-level
updates_is measured in both milliseconds and nanoseconds (#96).process_ time - The RPC block subscribe, RPC program subscribe, Yellowstone gRPC and Helius Atlas WebSocket datasources measure time in nanoseconds instead of milliseconds (#96).
ArrangeAccounts::is a static function on instruction data structs (#97).arrange_ accounts
Fixed#
carbon-raydium-amm-v4-decoderuses the right instruction discriminators and size matching for accounts (#82).- System program decoder structs have public fields (#84).
- Inner instructions are schema-matched (#89).