# Changelog (Carbon 2.0)

> Carbon's release history, from 0.3.0 to 2.0.0, with the breaking changes and migration notes for each version.

What changed in each Carbon release. 2.0.0 comes from [`CHANGELOG.md`](https://github.com/sevenlabs-hq/carbon/blob/v2.0.0/CHANGELOG.md) at the `v2.0.0` tag; earlier versions come from the [GitHub release notes](https://github.com/sevenlabs-hq/carbon/releases), which are the only record for them. Numbers like (#587) are pull requests in [sevenlabs-hq/carbon](https://github.com/sevenlabs-hq/carbon/pulls). To upgrade from Carbon 1, follow [Migrate to 2.0](https://carbon.sevenlabs.org/guides/migrate-to-v2.md).

## 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::AccountDeletion` consistently while preserving the final `Account` state.
- 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/carbon-cli` and `@sevenlabs-hq/carbon-codama-renderer` to depend on Carbon 2 crates.
- 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.

> **Note: CLI version number.** `CHANGELOG.md` and the `packages/*/package.json` files at the tag call the companion npm packages 0.13. They were published to npm as **2.0.0** (on 2026-09-10); there is no 0.13 release. Use `@sevenlabs-hq/carbon-cli@2.0.0`.

### Also in this release

- `carbon-token-program-decoder` decodes accounts with the SPL `Pack` layout (#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-datasource` uses 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.

```rust
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:

```rust
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_update()` so every zero-lamport account is normalized at the same boundary.

The former `account_deletions_tracked` constructor argument and fields were removed. Remove that argument when constructing:

- `HeliusWebsocket`
- `LaserStreamGeyserClient`
- `YellowstoneGrpcGeyserClient`
- `StreamMessageClient`

If you construct `AccountDeletion` directly, provide its new `account` field.

#### Datasource configuration changes

- `LaserStreamClientConfig::new` has a new trailing `from_slot: Option<u64>` argument. Pass `None` to preserve the previous starting behavior, or use `LaserStreamClientConfig::default()` and set the field.
- Yellowstone tonic client reconnection is disabled by default. Opt in with `YellowstoneGrpcClientConfig::with_reconnect(ReconnectConfig)` when the upstream supports replay appropriate for your pipeline.

#### SPL Token account helpers

The `Mint::decode`, `Multisig::decode` and `Token::decode` convenience methods in `carbon-token-program-decoder` were removed. Direct callers should unpack with `solana_program_pack::Pack` and convert the result:

```rust
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](https://carbon.sevenlabs.org/guides/migrate-to-v2.md).

### 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](https://github.com/sevenlabs-hq/carbon/releases/tag/v1.0.0).

### Core

- Atomic metrics (#531) and datasource-level metrics flushing (#538).
- Filtering redesign (#534).
- Versioned decoders (#535).
- Transaction pipe refactor (#537) and performance updates (#532).
- `ArrangeAccounts` refactor (#529).
- CPI events support (#550).
- Transaction index field on `TransactionUpdate` and `TransactionMetadata` (#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 `Pubkey` fields 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 `OptionBool` deserialization (#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 `base64` dependency and made `serde-big-array` conditional (#523).
- New examples (#544, #558).
- Corrected path typos in `workspace.dependencies` (#557).

## 0.12.0 (2025-11-27)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.12.0).

- Upgraded the Solana crates (#435, #470, #482) and other outdated dependencies (#474).
- Added the `instruction_decoder_collection_fast` macro (#447).
- Fixed the filter in `decode_log_events()` (#448).
- New decoders: Bonkswap (#450), PancakeSwap (#462), DFlow aggregator v4 (#480), Swig (#483).
- Pump.fun: `create_v2` (#465) and `buy_exact_sol_in` (#467) instructions. PumpSwap: `buy_exact_quote_in` (#466, #473) and the `is_mayhem_mode` pool field (#472).
- Updated Meteora DAMM v2 (#457) and fixed the Token-2022 decoder with extensions (#479).
- CLI: code generation enhancements and fixes (#453, #458, #460), `BorshDeserialize` instead of `CarbonDeserialize` in generated code (#485), README (#451).

## 0.11.0 (2025-10-18)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.11.0).

- New Codama renderer and a new Carbon CLI (#386).
- Helius LaserStream datasource with replay (#433).
- Circle CCTP decoders (#444).
- Raydium AMM v4 `SwapBaseInV2` and `SwapBaseOutV2` (#441); Jupiter swap decoder update (#438).
- Rust tuple structs in IDLs; `track_volume` field type updated in Pump.fun and PumpSwap (#442).
- Attributes required by `instruction_decoder_collection` (#439).
- Associated Token Account decoder accepts empty data as `Create` (#437).

## 0.10.0 (2025-09-16)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.10.0).

- 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: `m` and `d` shortcuts for mainnet-beta and devnet (#431).

## 0.9.1 (2025-07-18)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.9.1).

- 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)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.9.0).

- The `Filter` trait and `DatasourceFilter` (#355).
- The pipeline stops automatically after all datasources complete (#317).
- Configurable channel sizes (#340).
- `InstructionMetadata::absolute_path` (#293).
- 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-ix` for 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_LOG` from the environment (#335); `rand` no longer required for `solana-signature` and `solana-pubkey` (#310).

## 0.8.1 (2025-05-12)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.8.1).

- GraphQL server (#284).
- Postgres support in the Token program decoder (#229).
- `block_hash` on transactions for fork detection (#278).
- Block-only subscriptions (#283).
- `Serialize` for `DecodedInstruction` (#252); `IntoIter` for `NestedInstructions` (#289).
- Nested instructions parsed inside `TransactionPipe` (#267); faster `extract_instructions_with_metadata` (#273) and gRPC transaction metadata handling (#261).
- Lenient deserialization that warns about remaining bytes (#291).
- Vendored Jito protos (#253); Jito ShredStream deduplication (#257) and `is_vote: false` (#254).
- Fixed a duplicate WebSocket connection (#270), account meta `is_signer` (#274) and the `log` export 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_rs` crypto provider in an example to stop a startup panic (#260).

## 0.8.0 (2025-04-18)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.8.0).

- 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).
- `serde` `Serialize` and `Deserialize` derived for generated accounts (#238), with `BigArray` support (#239).
- Raydium Launchpad decoder (#250); Pump.fun account layouts and instructions updated (#236).

## 0.7.0 (2025-03-30)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.7.0).

- 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-sdk` to direct dependencies (#226).
- Fixes to the Associated Token Account and System program decoders (#204).

## 0.6.2 (2025-03-21)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.6.2).

- 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)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.6.1).

- 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)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.6.0).

- `block_time` on `TransactionUpdate` and `TransactionMetadata` (#181).
- `carbon-test-utils` crate (#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)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.5.1).

- 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)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.5.0).

- 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)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.4.1).

- Reconnection logic for datasources and a cluster option for the Atlas WebSocket datasource (#112).
- Conventional `From` traits 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)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.4.0).

- Access to the transaction's `VersionedMessage` on transaction metadata (#106).

## 0.3.1 (2024-12-02)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.3.1).

- 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)

[Release notes](https://github.com/sevenlabs-hq/carbon/releases/tag/v0.3.0).

### Added

- A `solana_transaction_status::TransactionStatusMeta` field on `TransactionMetadata` (#92).
- The transaction pipe processor type includes `Vec<DecodedInstruction>` in its instruction type (#95).
- Type aliases for processor input types: `AccountProcessorInputType`, `InstructionProcessorInputType`, `TransactionProcessorInputType` (#95).
- `carbon-kamino-lending-decoder` and `carbon-kamino-vault-decoder`.

### Changed

- Schemas are optional inside transaction pipes (#95).
- Pipeline-level `updates_process_time` is measured in both milliseconds and nanoseconds (#96).
- The RPC block subscribe, RPC program subscribe, Yellowstone gRPC and Helius Atlas WebSocket datasources measure time in nanoseconds instead of milliseconds (#96).
- `ArrangeAccounts::arrange_accounts` is a static function on instruction data structs (#97).

### Fixed

- `carbon-raydium-amm-v4-decoder` uses the right instruction discriminators and size matching for accounts (#82).
- System program decoder structs have public fields (#84).
- Inner instructions are schema-matched (#89).

---

Carbon 2.0.0 documentation · Web: https://carbon.sevenlabs.org/changelog · Last updated 2026-11-09 · Index of all pages: https://carbon.sevenlabs.org/llms.txt
