NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3154 most downloaded on PyPI
Python bindings for Solana Rust tools
Last release 1 months ago
13 Aug 2026
Release timing varies
gaps range from 3 weeks to 8 months
Nearly every release is documented
notes for 44 of 47 stable releases
Nothing withdrawn
no release was ever pulled
4 years old
47 releases · first in 2022
One column per quarter.
solders.message.v0 and solders.message.v1 submodules, mirroring solana_message's own layout: legacy Message stays at solders.message, while the versio
solders.message.v0 and solders.message.v1 submodules, mirroring solana_message's own layout: legacy Message stays at solders.message, while the versioned types live under their version. v0 holds Message and MessageAddressTableLookup; v1 holds Message, TransactionConfig, MessageError and the format's constants (V1_PREFIX, MAX_TRANSACTION_SIZE, MAX_ADDRESSES, MAX_INSTRUCTIONS, MAX_SIGNATURES, MIN_HEAP_SIZE, MAX_HEAP_SIZE, DEFAULT_HEAP_SIZE, FIXED_HEADER_SIZE, SIGNATURE_SIZE). The flat names remain as aliases, so solders.message.MessageV0 and MessageAddressTableLookup are unchanged.solders.message.MessageV1 (alias of solders.message.v1.Message): the SIMD-0385 v1 transaction message, supporting 4KB transactions with the compute budget carried inline instead of via separate instructions (no address lookup table support). Includes try_compile, validate, size and fee_payer. Note that v1 transactions are gated behind the enable_tx_v1 feature, which is not yet active on mainnet.solders.message.TransactionConfig (alias of solders.message.v1.TransactionConfig): the inline transaction config carried by a MessageV1 (priority_fee, compute_unit_limit, loaded_accounts_data_size_limit, heap_size).solders.transaction_status.UiTransactionConfig, plus transaction_config on UiRawMessage and UiParsedMessage, following the upstream v4.1 client types.inflation_rewards_commission_bps on RpcVoteAccountInfo.Rent.minimum_balance_unchecked and Rent.try_minimum_balance.LiteSVM.get_program_accounts, returning every (address, account) pair owned by a program.LiteSVM.set_epoch_stake, LiteSVM.set_epoch_stakes, LiteSVM.epoch_stake and LiteSVM.epoch_total_stake, wrapping the epoch stake support added in litesvm 0.14. This is what programs read via the sol_get_epoch_stake syscall, so it could not previously be exercised from Python.solders.message.v1.MessageError, raised by v1.Message.validate.solders.message.CompileError is now registered on the module. It was already raised by MessageV0.try_compile but was not importable, so it could only be caught as a bare Exception.RpcPerfSample.num_non_vote_transactions: the getter was misspelled num_non_votetransactions in the bindings, so the documented (and type-stubbed) name did not exist at runtime.solders.pyi back in sync with the bindings. It had drifted in both directions: 46 from_bytes declarations named their parameter raw/raw_bytes where the binding takes data (a keyword call would type-check and then fail); ComputeBudget.max_cpi_instruction_size, RpcInflationRate.foundation_term, RpcFilterTypeFieldless.from_string/default, RpcLeaderScheduleConfig.default, GetBlockProductionResp.height, InstructionErrorFieldless.ActiveVoteAccountClose and RpcCustomErrorFieldless.Base64Zstd were declared but absent; ComputeBudget.remaining_compute_units_cost, TransactionStatus.get_confirmation_status and TransactionErrorFieldless.WouldExceedMaxVotefCostLimit used names the bindings do not export; and 39 members present at runtime were undeclared, including from_bytes on 23 RPC config types.VersionedMessage now includes MessageV1, and VersionedTransaction accepts it.VersionedMessage and VersionedTransaction are now serialized and deserialized with wincode rather than bincode. This is byte-identical for legacy and v0, and is the only encoding that supports v1. Affects bytes()/from_bytes on VersionedTransaction, to_bytes_versioned/from_bytes_versioned, and the base64 encoding used in RPC requests.solana_message::v1: solana-message and solana-transaction to 4, solana-pubkey/solana-account/solana-rent/solana-sysvar to 4, solana-stake-interface to 4, solana-reward-info to 6, spl-token-interface to 3, the client-types crates to 4.1, and litesvm to 0.15.2.LiteSVM now starts with a mainnet-like clock slot rather than 0, following litesvm 0.15.Rent no longer exposes the rent-collection API removed upstream in solana-rent 4: calculate_burn, due, due_amount, and with_slots_per_epoch, along with the DEFAULT_LAMPORTS_PER_BYTE_YEAR, DEFAULT_EXEMPTION_THRESHOLD and DEFAULT_BURN_PERCENT constants. The lamports_per_byte_year field is replaced by lamports_per_byte, and it is now the first constructor argument.ComputeBudget's simd_0339_active constructor argument, which no longer exists in solana-compute-budget 4.1.Rent.with_lamports_per_byte and the DEFAULT_LAMPORTS_PER_BYTE constant (the deprecated rent accessors are kept)
agave-feature-set/agave-precompiles, solana-compute-budget, solana-hash, solana-transaction-context to 4 and solana-system-interface to 3 (crates litesvm still pins to the v3 line, e.g. solana-message/solana-transaction/solana-account, stay there). 0.13.1 refreshes the simulated mainnet feature set to match the cluster as of 2026-06-30.solana-rpc-client-api, solana-rpc-client-types, solana-account-decoder-client-types, solana-transaction-status-client-types, and solana-reward-info to 5 (the version aligned with that set, not the newer 6.x)ComputeBudget constructor now takes simd_0268_active and simd_0339_active flags (was simd_0296_active) to match solana-compute-budget 4commission_bps on Reward and RpcInflationReward, transaction_index on RpcConfirmedTransactionStatusWithSignature, and client_id on RpcContactInfo, following the upstream v4 client typesgetStakeMinimumDelegation RPC method (GetStakeMinimumDelegation request and GetStakeMinimumDelegationResp response)ComputeBudget: getters/setters for the new solana-compute-budget 4 cost fields (alt_bn128_g2_addition_cost, alt_bn128_g2_multiplication_cost, and the bls12_381_* set)transaction_index on EncodedConfirmedTransactionWithStatusMeta, following solana-transaction-status-client-types 4solders.system_program.create_account_allow_prefund (and decode_create_account_allow_prefund / CreateAccountAllowPrefundParams), wrapping the new solana-system-interface instructionLiteSVM.with_feature_set to apply a FeatureSet to the VM (the FeatureSet type was exposed but could not previously be applied)LiteSVM.with_mainnet_features / LiteSVM.mainnet_feature_set / LiteSVM.get_sigverifyTransactionMetadata.fee and TransactionMetadata.pretty_logsFeatureSet.activate / FeatureSet.deactivateRent.with_lamports_per_byte and the DEFAULT_LAMPORTS_PER_BYTE constant (the deprecated rent accessors are kept)EpochRewards.distributeStakeHistoryEntry.with_effective / with_effective_and_activating / with_deactivatingLiteSVM.airdrop_pubkey, LiteSVM.with_feature_accounts, and LiteSVM.add_program_with_loaderUiConfirmedBlock.num_reward_partitions (the constructor already accepted it but it could not be read back)solders.system_program.upgrade_nonce_account (and decode_upgrade_nonce_account / UpgradeNonceAccountParams)Message.is_instruction_account and Message.demote_program_id, wrapping the corresponding solana-message methodsaarch64copy.deepcopy support: a __reduce__ method is now generated for all types using the common_methods family of macros (reconstructing via from_bytes(bytes(self))).copy.deepcopy support for RPC response types (via a clone-based __deepcopy__; these don't support pickle because their bincode round-trip is broken by skip_serializing_if).GetStakeActivation request: the getStakeActivation RPC method has been removed from Agave and is no longer served by validatorsi686 and armv7): the Solana v4 solana-program-runtime no longer compiles on 32-bit targetsStakeHistoryEntry: the activating and deactivating setters wrote to the effective field instead of their ownRent declared module = "solders.account" but is exported from solders.rent, which broke pickling.EncodedConfirmedTransactionWithStatusMeta now serializes its bytes via CBOR instead of bincode. Its bytes()/from_bytes were broken (bincode can't represent the #[serde(flatten)] field), which also broke pickle and deepcopy for it.Nothing published for this version
Nothing published for this version
Nothing published for this version
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
token_program_id param to get_associated_token_address (#117).https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
ring dependency (and all crates that use it) for linux-aarch64 builds.https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
Keypair.from_seed_and_derivation_path (#75)solders.token.ID)owner field (#70)https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
Transaction | VersionedTransaction in bankrun transaction methods (#62)https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
process_transaction_with_metadata to just process_transaction.
Remove process_transaction_with_preflight and the old process_transaction
which had too many footguns. The new process_transaction uses the Rust
process_transaction_with_metadata under the hood. (#60)https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
Added partial support for the SPL Token Program (#53)
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
Added bankrun.start_anchor()
Fix type hint for BanksClient.get_account
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
solders.bankrun (#47)solders.compute_budgethttps://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
Added solders.message.to_bytes_versioned and from_bytes_versioned to serialize versioned messages including the extra leading byte (#45)
transaction.Legacy no longer implicitly casts to int when checking equality. This was breaking tx version checking when tx version was returned as Legacy | int (#44)
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
solders-primitives to crates.io release flow.https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
pyo3 and pythonize dependencies (#38)https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
Rename SendTransaction to SendLegacyTransaction (#36)
Add SendVersionedTransaction (#36)
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
common_methods_core macro (#30)VersionedMessage type alias (#34)signatures writable for VersionedTransaction and Transaction (#34)from_legacy to VersionedTransaction (#34)Signer type alias (#34)max_transactions_per_entry (#34)https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
encoding param from RpcSimulateTransactionConfig (#18)https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
UiTransactionStatusMeta (#16)https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
parse_websocket_message now supports parsing an array of messages, and always returns a list (#15)RpcBlockhash (#15)https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
parse_<name>_maybe_json funcs with <name>MaybeJsonParsed classes. Also fix bugs with parsing mixed responses. [(#14)](https://github.com/kevinheavey/batch_from_json pure Rust instead of relying on the Python from_json method. (#14)https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
jsonParsed (#13)https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
Make rpc.requests.Body alias available at runtime (#6)
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
solders.rpc.requests (#4)
solders.rpc.config, solders.rpc.filter, solders.account_decoder, solders.commitment_config and solders.transaction_status.https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
from_bytes constructor to every class that supports __bytes__https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
__richcmp__ for MessageHeader.authorize_nonce_account to system_program.https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
https://github.com/kevinheavey/solders/blob/main/CHANGELOG.md
Your coding agent can read these notes before it upgrades. Set up the MCP server →