solana_kit_token_2022 0.9.0 copy "solana_kit_token_2022: ^0.9.0" to clipboard
solana_kit_token_2022: ^0.9.0 copied to clipboard

SPL Token 2022 and Associated Token Account client for the Solana Kit Dart SDK. Generated from the upstream Codama IDL with focused ergonomic helpers.

Changelog #

All notable changes to this project will be documented in this file.

This changelog is managed by monochange.

solana_kit_token_2022 0.4.0 (2026-05-30) #

πŸ’₯ Breaking Change #

New package available

SPL Token 2022 and Associated Token Account client for the Solana Kit Dart SDK. Generated from the upstream Codama IDL with focused ergonomic helpers for Token 2022 extensions and operations.

Owner: Ifiok Jr. Β· Introduced in: fccec7f Β· Last updated in: 93b3cd3

πŸš€ Feature #

Add generated Token-2022 package

Add a generated solana_kit_token_2022 package from the…

Add a generated solana_kit_token_2022 package from the upstream Token-2022 Codama IDL, with focused helpers for mint/token sizing and pre-initialize mint extension instructions.

Also fix Dart Codama renderer support for Token-2022 by handling constant hidden affixes, bytes discriminators, robust enum/discriminated-union generation, zero-field enum/struct cases, and non-const instruction discriminator defaults.

Owner: Ifiok Jr. Β· Introduced in: 4663211 Β· Last updated in: 0ee3d60

Add associated token account package

Add a handwritten solana_kit_associated_token_account…

Add a handwritten solana_kit_associated_token_account package and switch solana_kit_token / solana_kit_token_2022 to share its ATA PDA helpers and instruction builders.

Owner: Ifiok Jr. Β· Introduced in: 0e6a808 Β· Last updated in: 0ee3d60

solana_kit_token_2022 0.5.0 (2026-06-01) #

πŸ’₯ Breaking Change #

Raise minimum Dart SDK to 3.12

Raise the minimum supported Dart SDK constraint to ^3.12.0 across public Dart packages.

This is a breaking change because consumers must use Dart 3.12 or newer. Flutter consumers must use a Flutter SDK that bundles Dart 3.12 or newer.

environment:
  sdk: ^3.12.0

Owner: Ifiok Jr. Β· Introduced in: 32d5d36

πŸ› Fixed #

Add well-known program, sysvar, SPL, Metaplex, and token mint address constants

Add centralized address constants to solana_kit_addresses so that any package can reference well-known on-chain addresses without importing the full domain package or hardcoding strings.

New exports:

  • program_addresses.dart β€” All Agave/Solana native program addresses (system, ALT, BPF loaders, compute budget, config, stake, vote, etc.)
  • sysvar_addresses.dart β€” All sysvar addresses (clock, rent, recentBlockhashes, fees, rewards, etc.) plus the sysvar owner address
  • spl_addresses.dart β€” SPL program addresses (Token, Token-2022, ATA, Memo, Memo Legacy)
  • metaplex_addresses.dart β€” Metaplex program addresses (Token Metadata, Bubblegum, Auth Rules, Core, SPL Account Compression, Noop)
  • well_known_addresses.dart β€” Well-known token mint addresses (Wrapped SOL, USDC, USDT)

Also re-exports from solana_kit_address (Address type, codecs, comparator, PublicKey) and solana_kit_address_constants (well-known address constants).

Owner: Ifiok Jr. Β· Introduced in: 3f596ef Β· Last updated in: 4643648

solana_kit_token_2022 0.5.1 (2026-06-03) #

Changed #

  • No package-specific changes were recorded; solana_kit_token_2022 was updated to 0.5.1.

solana_kit_token_2022 0.5.2 (2026-08-12) #

πŸš€ Feature #

Token-2022: regenerate from js@v0.12.0

Regenerates the Token-2022 generated code from upstream IDL js@v0.12.0 (was js@v0.9.0). Adds 9 new instructions:

  • configureConfidentialTransferAccountWithRegistry
  • initializeConfidentialMintBurn
  • rotateSupplyElgamalPubkey
  • updateConfidentialMintBurnDecryptableSupply
  • confidentialMint
  • confidentialBurn
  • applyConfidentialPendingBurn
  • permissionedConfidentialBurn
  • batch

Updates existing instructions with changed account lists and arguments (auditor ciphertext args on confidential transfers, removed record accounts, syncNative rent account, withdrawExcessLamports account renames, initializeConfidentialTransferFee pubkey type change).

Adds confidentialMintBurn and permissionedBurn to the ExtensionType enum.

Owner: @ifiokjr Β· Review: PR #195

πŸ“– Documentation #

Centralize package version documentation

Centralize package version metadata in versions.json and render package installation snippets from the shared MDT data source. Published package behavior is unchanged.

Owner: @ifiokjr Β· Review: PR #188

Point package README website badges at package docs

Updated package README website badges to link directly to each package's docs catalog entry and added missing package entries to the documentation website catalog/index.

Owner: @ifiokjr Β· Review: PR #192

πŸ”– None #

Format workflow lint follow-up files

Apply formatting-only changes discovered while adding the GitHub Actions workflow lint gate.

Owner: @ifiokjr Β· Review: PR #185

solana_kit_token_2022 0.7.0 (2026-08-18) #

πŸ’₯ Breaking Change #

Regenerated program packages from upstream v7 IDLs

Regenerated all 8 generated program packages from their latest upstream Codama IDLs:

  • solana_kit_system: js@v0.12.2 β†’ v0.13.0
  • solana_kit_token: js@v0.14.0 β†’ v0.15.0
  • solana_kit_token_2022: js@v0.12.0 β†’ v0.14.1
  • solana_kit_address_lookup_table: js@v0.12.1 β†’ v0.13.0
  • solana_kit_memo: js@v0.11.2 β†’ v0.12.0
  • solana_kit_compute_budget: js@v0.16.0 β†’ v0.17.0
  • solana_kit_stake: js@v0.7.2 β†’ v0.8.0; applied the upstream Stake Codama preprocessing before rendering so generated defined-type imports resolve to Dart files
  • solana_kit_loader: loader-v3 js@v0.4.0 β†’ v0.5.0; migrated planning helpers to the generated v0.5 API and retained the handwritten Loader v3 account codecs and Loader v4 client surface

Generated using node scripts/generate_program_packages.mjs β€” a new generator script that runs the Codama renderer against upstream IDLs.

// Generated clients now match newer upstream IDLs, e.g. the system program:
final instruction = getCreateAccountInstruction(
  payer: payer.address,
  newAccount: newAccount.address,
  lamports: lamports,
  space: space,
  owner: owner,
);

Owner: @ifiokjr Β· Review: PR #204

solana_kit_token_2022 0.7.1 (2026-08-19) #

Changed #

  • No package-specific changes were recorded; solana_kit_token_2022 was updated to 0.7.1.

solana_kit_token_2022 0.8.0 (2026-08-30) #

πŸ› Fixed #

Refresh upstream reference pins for solana-program/* and mpl-bubblegum

  • Tracks the latest upstream references in config/reference-repos.json: solana-program/system js@v0.14.0 (was js@v0.13.0), solana-program/token js@v0.16.0 (was js@v0.15.0), solana-program/token-2022 js@v0.16.0 (was js@v0.14.1), solana-program/address-lookup-table js@v0.14.0 (was js@v0.13.0), solana-program/memo js@v0.13.0 (was js@v0.12.0), solana-program/compute-budget js@v0.18.0 (was js@v0.17.0), solana-program/stake js@v0.9.0 (was js@v0.8.0), solana-program/loader-v3 js@v0.6.0 (was js@v0.5.0), solana-program/loader-v4 commit 4f62fb2e (was commit 1d6335be), and mpl-bubblegum commit 6a6a77e3 (was commit 68e4bc20).
  • All of the js releases are @solana/kit ^7 β†’ ^8 dependency bumps with no instructions, accounts, types, or wire-format changes; the IDL additions are Codama display metadata, which the Dart renderer does not render. Regenerating every affected client from the old and new pins produced byte-identical Dart output, so the generated clients are unchanged. The mpl-bubblegum new commit only re-exports the JS mintV2 helpers and the loader-v4 new commit only bumps its JS client to @solana/kit v8; both IDLs are unchanged. The token-2022 pin supersedes the stale PR #222 (js@v0.15.0).
  • solana-program/stake restructured its IDL to the Codama v1.8.0 format (program metadata block, lockupParams argument links renamed from lockupArgs, IDL program node renamed from solanaStakeInterface to stake). scripts/generate_program_packages.mjs now maps both argument link names and keeps the solanaStakeInterface renderer-facing program name, so the generated APIs (flattened setLockup/setLockupChecked/authorizeWithSeed argument fields, SolanaStakeInterface identifiers) stay stable. No generated Dart code changed.
  • Package READMEs now cite the refreshed upstream versions they mirror.

Owner: @ifiokjr Β· Review: PR #226 Β· Related issues: #222, #225

πŸ“– Documentation #

Unslop package docs and code comments

Rewrote every package README from a reader's perspective with verified, compilable examples, removed AI-tell phrasing from docs and code comments, and added a test that analyzes every Dart block in Markdown so examples cannot drift from the API.

Owner: @ifiokjr Β· Review: PR #223

solana_kit_token_2022 0.8.1 (2026-08-30) #

Changed #

  • No package-specific changes were recorded; solana_kit_token_2022 was updated to 0.8.1.

solana_kit_token_2022 0.8.2 (2026-09-06) #

Changed #

  • No package-specific changes were recorded; solana_kit_token_2022 was updated to 0.8.2.

solana_kit_token_2022 0.8.3 (2026-09-12) #

Changed #

  • No package-specific changes were recorded; solana_kit_token_2022 was updated to 0.8.3.

solana_kit_token_2022 0.9.0 (2026-09-21) #

Breaking changes #

Raise the Dart and Flutter baseline

The workspace now builds against Dart 3.13.3 and Flutter 3.47.4, and every package declares that floor instead of the previous Dart 3.12 range. Consumers on older SDKs can no longer resolve these packages, so this release is breaking even though no Dart API changed.

The Flutter floor rises from 3.44 to 3.47 for solana_kit_mobile_wallet_adapter, solana_kit_mobile_wallet_adapter_protocol, and solana_kit_wallet_adapter, matching the floor solana_kit_wallet_ui already required. solana_kit_lints ships the raised floor to consumers, so it carries the same breaking bump. Every other package raises only the Dart SDK floor.

Raising the language version also switches dart format to the tall style, so 83 files across library, test, script, and Codama-generated trees are reflowed. The renderer pipes generated output through dart format, so regenerating stays consistent.

Align your own SDK constraint with the workspace:

environment:
  sdk: ^3.13.0
  # Omit for pure Dart packages; required for the Flutter packages above.
  flutter: ">=3.47.0"

Owner: Ifiok Jr. Β· Introduced in: 5f5fe01 Β· Last updated in: 19932db

Track Token-2022 js@v0.18.0

solana_kit_token_2022 follows solana-program/token-2022 to js@v0.18.0, up from js@v0.16.1. The pin had been held back because the migration needed handwritten-layer work; that work is now done.

The generated extension union renames its variants to the renderer's current convention, prefixing each with the union name: TransferFeeConfig becomes ExtensionTransferFeeConfig, MetadataPointer becomes ExtensionMetadataPointer, and so on for all twenty-nine variants. The prefix keeps variants readable at the call site and stops them from colliding with same-named generated types. Update pattern matches and constructors:

final instructions = getPreInitializeInstructionsForMintExtensions(
  mint: mintAddress,
  extensions: [
    ExtensionTransferFeeConfig(
      transferFeeConfigAuthority: authority,
      withdrawWithheldAuthority: authority,
      withheldAmount: BigInt.zero,
      olderTransferFee: olderFee,
      newerTransferFee: newerFee,
    ),
  ],
);

Mint and token accounts now decode their TLV extension region the way the program reads it. The previous codec decoded the region as a remainder array, which had to consume every trailing byte as an entry, so an account allocated with unused space either threw or reported the padding as a spurious Uninitialized extension. The new codec walks entries until it meets an Uninitialized (type 0) header or fewer than two bytes remain, and ignores whatever follows, matching the program and @solana/spl-token:

final account = getMintDecoder().decode(bytesWithTwoBytesOfPadding);
// extensions now holds only the real entries, never the padding.

solana_kit_address_constants-style address handling is unchanged; getMintSize and getTokenSize keep their existing signatures and results, and now share the same encoder the accounts use, so a size computed from a list of extensions always matches what the encoder writes.

codama-renderers-dart gains linkOverrides, which lets an IDL link be backed by a hand-written Dart codec while the wrappers around it (Option, HiddenPrefix, …) still come from the IDL. That is what the Token-2022 extension region uses, and it is the extension point for any future type Codama cannot express. The renderer also stops requiring an account to match its size discriminator exactly: a size discriminator describes an account's fixed prefix, so accounts with variable trailing fields are legitimately longer. Instruction sizes are still matched exactly, since there the size identifies the whole payload.

Owner: Ifiok Jr. Β· Introduced in: 9dcb59a