NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3677 most downloaded on PyPI
Solana.py
Last release 2 days ago
03 Oct 2026
Release timing varies
gaps range from 1 weeks to 4 months
Most releases are documented
notes for 41 of the last 60 stable releases
Nothing withdrawn
no release was ever pulled
6 years old
94 releases · first in 2020
One column per quarter.
Bump version: 0.40.3 → 0.41.0
Bump version: 0.40.3 → 0.41.0
Bump version: 0.40.2 → 0.40.3
Bump version: 0.40.2 → 0.40.3
*_unsubscribe() helpers now also accept the request ID returned by the matching *_subscribe() helper, translating it to the server-assigned subscription ID once the subscription confirmation has been received. Server-assigned IDs are still resolved first, so passing recv()[0].result keeps working unchanged (#701).Bump version: 0.40.1 → 0.40.2
Bump version: 0.40.1 → 0.40.2
mainnet-beta cluster to mainnet. Cluster is now Literal["devnet", "testnet", "mainnet"] and cluster_api_url returns https://api.mainnet.solana.com/, so cluster_api_url("mainnet-beta") no longer type-checks — use cluster_api_url("mainnet") instead (#699).get_priority_fee_estimate cookbook page (#697).Bump version: 0.40.0 → 0.40.1
Bump version: 0.40.0 → 0.40.1
by_alias=True by default, so field aliases are used on the wire even when model_dump_json is called without arguments (#693).GetStakeActivation handling from solana.rpc.core — the API was removed in solders 0.28.0 (#688).django-solana-payments (#689).solana.models and spl.token.models (#690).BREAKING : Remove deprecated Client (sync RPC client) — use solana.rpc.async_api.AsyncClient instead.
AsyncClient.send_rpc_request(...) for custom JSON-RPC methods backed by Pydantic request serializers, result models, and an optional custom JSON-RPC error parser hook.transaction_details, rewards, and commitment parameters to AsyncClient.get_block (#684).exclude_non_circulating_accounts_list parameter to AsyncClient.get_supply (#684).Client (sync RPC client) — use solana.rpc.async_api.AsyncClient instead.Token (sync SPL Token client) and AsyncToken (async SPL Token client) — use AsyncClient with spl.token.instructions directly instead._TokenCore, AccountInfo, and MintInfo from spl.token.core — use spl.token.models instead.solana.rpc.providers.http.HTTPProvider) and sync base provider (solana.rpc.providers.base.BaseProvider) — use solana.rpc.providers.async_http.AsyncHTTPProvider instead.NamedTuple compatibility types from solana.rpc.types, solana.vote_program, spl.memo.instructions, and spl.token.instructions. Use model types from solana.rpc.models, solana.models, spl.memo.models, and spl.token.models.PydanticModel.from_namedtuple and all API boundary coercion paths. RPC and instruction helpers now accept only the Pydantic model params/options types.asyncio.gather when needed.test_http_client.py and unit test test_client.py.docs/rpc/api.md, docs/spl/token/client.md, docs/spl/token/async_client.md, docs/spl/token/core.md).docs/rpc/types.md.random_funded_keypair fixture to be async.AsyncClient RPC plumbing by removing unnecessary internal abstractions while preserving the existing solders request/response path for built-in RPC methods.test_spl_token.py to use AsyncClient with spl.token.instructions directly instead of the removed Token/AsyncToken classes.test_spl_memo.py to use AsyncClient with spl.memo.instructions directly instead of the removed Client class.README.md code examples to use AsyncClient.mkdocs.yml navigation to remove deleted doc pages.docs/cookbook/token-operations/get-token-mint.md to import from spl.token.models instead of spl.token.core.Client to AsyncClient migration guide and fix local docs serving (#683).Full Changelog: https://github.com/michaelhly/solana-py/blob/master/CHANGELOG.md
Thanks to @kingsznhone for driving the bulk of this release.
BREAKING : Remove deprecated commitment constants Max , Root , Single , and Recent . These values were never valid on the current Solana wire protocol…
Commitment from NewType("Commitment", str) to StrEnum. The valid values are now Commitment.PROCESSED, Commitment.CONFIRMED, and Commitment.FINALIZED. Module-level aliases (Processed, Confirmed, Finalized) are preserved for backward compatibility.Max, Root, Single, and Recent. These values were never valid on the current Solana wire protocol and have emitted deprecation warnings since earlier versions.Client, Token, and AsyncTokenget_commitment_score(commitment) helper to rank commitment levels (0–2).commitment_comparator(a, b) helper to compare two commitment levels.make_batch_request, make_batch_request_unparsed, and all batch-related type aliases from solana.rpc.providers. Use individual requests with asyncio.gather (async) or sequential calls (sync) instead.Full Changelog: https://github.com/michaelhly/solana-py/blob/master/CHANGELOG.md
This release replaces the library's deprecated NamedTuple types with Pydantic models. The deprecated types still work, so most code keeps running unch…
This release replaces the library's deprecated NamedTuple types with Pydantic models. The deprecated types still work, so most code keeps running unchanged — see the migration notes below for the two cases that need attention.
NamedTuple, under the same names in new models modules (solana.rpc.models, solana.models, spl.token.models, spl.memo.models). They keep the same field names, defaults, and descriptions, so migrating is just an import-path change (#656).PydanticModel.from_namedtuple, a helper that coerces a deprecated NamedTuple (or an existing model) into the new Pydantic model to ease migration at API boundaries (#656).NamedTuple classes (params/options/info types in solana and spl). They now emit a DeprecationWarning pointing to the new models module and are flagged by type checkers, but remain fully functional for backwards compatibility (#655).NamedTuple and the new Pydantic model for their params/options arguments, so existing call sites keep working (#659), (#660), (#662), (#664), (#666), (#667).NamedTuple instances now return the new Pydantic models at runtime. This affects all decode_* instruction helpers in spl.token.instructions and spl.memo.instructions, and Token.get_mint_info() / Token.get_account_info() (sync and async). Pydantic models are not tuples, so code relying on tuple behavior — positional unpacking (a, b = decode_transfer(ix)), integer indexing (info[0]), or isinstance(x, tuple) — will break. Access fields by name instead (#660), (#666).NamedTuple types to the new Pydantic models (#668).rate_limit parameter to AsyncClient and AsyncHTTPProvider to cap outgoing requests per second. Defaults to 0 (disabled), so existing behavior is unchanged (#653).Transaction / Message support from the client API. Client.send_transaction / AsyncClient.send_transaction and simulate_transaction now accept only VersionedTransaction (no longer Union[Transaction, VersionedTransaction]), and get_fee_for_message now takes MessageV0 instead of VersionedMessage. The SimulateLegacyTransaction request path was removed, so passing a legacy Transaction to simulate_transaction no longer works at runtime. Use MessageV0 / VersionedTransaction instead (#669).aiolimiter (>=1.1.0) for AsyncClient rate limiting (#653).Full Changelog: https://github.com/michaelhly/solana-py/blob/master/CHANGELOG.md
Mark make_batch_request as deprecated
get_recent_prioritization_fees) (#633)min_context_slot parameter to get_signatures_for_address (#632)get_vote_accounts to support all RPC parameters (#580)getSlotLeaders (#551)httpx2 librarymake_batch_request as deprecated (#648)new_keypair as a signer when constructing an SPL create_wrapped_native_account transaction (#493)UnboundLocalError for resp when last_valid_block_height has already expired (#631)create_associated_token_account for TOKEN_2022_PROGRAM_ID (#518)gh-deploy by adding mkdocstrings-python dependencysend_transaction example (#539)solders (0.23.0 → 0.27.1) (#515), (#520), (#604)websockets (13.1 → 15.0.1) (#510), (#521), (#541)construct-typing (0.5.2 → 0.7.0) (#559), (#600)typing-extensions, mypy, pytest, and other dev/CI dependencies (various)Full Changelog: https://github.com/michaelhly/solana-py/blob/master/CHANGELOG.md
Bump version: 0.36.11 → 0.36.12
Bump version: 0.36.11 → 0.36.12
Bump version: 0.36.10 → 0.36.11
Bump version: 0.36.10 → 0.36.11
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Update CI and devtools @dbast in https://github.com/michaelhly/solana-py/pull/462, https://github.com/michaelhly/solana-py/pull/465
Full Changelog: https://github.com/michaelhly/solana-py/compare/v0.35.1...v0.36.0
solders 0.23.0 and remove GetStakeActivationResp RPC (#459)http.py (#475)websockets to 12.0 (#469)Deprecate transaction module by @kevinheavey in https://github.com/michaelhly/solana-py/pull/442
/health for is_connected by @mp-freatic in https://github.com/michaelhly/solana-py/pull/460Full Changelog: https://github.com/michaelhly/solana-py/compare/v0.34.0...v0.35.1
NATIVE_DECIMALS & solana constants (#436)CreateIdempotent instruction (#449)token_program_id parameter to associated token endpoints (#456)Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix: added getInflationReward method by @kubanemil in https://github.com/michaelhly/solana-py/pull/413
Full Changelog: https://github.com/michaelhly/solana-py/compare/v0.33.0...v0.34.0
Remove experimental and flawed BlockhashCache (#408). This was a footgun because it broke a lot.
### Changed - Upgrade to Solders 0.20
Update to latest Solders version
- Use latest Solders
See the CHANGELOG for more.
See the CHANGELOG for more.
See the CHANGELOG for more.
### Changed Relaxed websockets dependency
Relaxed websockets dependency (#347)
Fix accidentally ignoring tx_opts in send_transaction methods
Fix accidentally ignoring tx_opts in send_transaction methods (#343)
See the CHANGELOG for more.
See the CHANGELOG for more.
send_transaction and simulate_transaction methods (#334)get_fee_for_message methods (#337)PublicKey, in favour of solders.pubkey.Pubkey.AccountMeta in favour of solders.instruction.AccountMeta.TransactionInstruction in favour of solders.instruction.Instruction.Keypair in favour of solders.keypair.Keypair. Your code will need to change as follows:
my_keypair.public_key -> my_keypair.pubkey()my_keypair.secret_key -> bytes(my_keypair)my_keypair.seed -> my_keypair.secret()my_keypair.sign(msg) -> my_keypair.sign_message(msg)Keypair.from_secret_key(key) -> Keypair.from_bytes(key)Message in favour of solders.message.Message.system_program in favour of solders.system_program. Note: where previously a params object like AssignParams called a field program_id, it now calls it owner.sysvar in favour of solders.sysvar. The constants in solders.sysvar have short names, so instead of solana.sysvar.SYSVAR_RENT_PUBKEY you'll use solders.sysvar.RENT.solana.blockhash.Blockhash in favour of solders.hash.Hash. Note: Blockhash(my_str) -> Hash.from_str(my_str).solana.transaction.TransactionSignature newtype. This was unused - solana-py is already using solders.signature.Signature.solana.transaction.SIG_LENGTH in favour of solders.signature.Signature.LENGTH.solana.transaction.SigPubkeyPair.solders.rpc.requests.SendRawTransaction in send_raw_transaction methods (#332)Fix conversion of MemcmpOpts in get_program_accounts methods
Fix conversion of MemcmpOpts in get_program_accounts methods (#328)
See the CHANGELOG for more.
See the CHANGELOG for more.
solders. Note that the parsed fields of jsonParsed responses are now dicts rather than strings. (#318)requests dependency (#315)### Changed - Use latest solders
solders (#312)Fix incorrect encoding arg in _simulate_transaction_body
encoding arg in _simulate_transaction_body (#311)Replace SubscriptionError.code with SubscriptionError.type
Breaking change: Every RPC method now returns a strongly typed object instead of a dictionary. For example, client.get_balance returns GetBalanceResp.
(Async)HTTPProvider.make_batch_request(_unparsed) (#304)make_request_unparsed to (Async)HTTPProvider (#304)Use solders for parsing RPC requests (#302):
client.get_balance returns GetBalanceResp.RPCException if the RPC returns an error result.
Previously only the transaction sending methods did this.jsonParsed data now have their own dedicated Python
method you should use. For example, instead of client.get_account_info(..., encoding="jsonParsed")
you should do client.get_account_info_json_parsed(...). This is done for the sake of static typing.get_accounts method on the SPL Token client has been split into four separate methods:
get_accounts_by_delegate, get_accounts_by_owner, get_accounts_by_delegate_json_parsed, and get_accounts_by_owner_json_parsed.solana.rpc.responses has been removed and supplanted by solders.rpc.responses.Remove unused deps: apischema, based58, jsonrpcclient, jsonrpcserver.
Use Solders for building RPC requests:
str signature param now expect a solders.signature.Signature.send_raw_transaction now defaults to the client's commitment level if preflight_commitment is not otherwise specified.Nothing published for this version
See the CHANGELOG for more.
See the CHANGELOG for more.
get_latest_blockhash RPC Call. (#254).get_fee_for_message RPC Call. (#254).asyncio_mode = auto in pytest.ini. (#248).verify_signature bool when transaction.serialize() is called (#249).See the CHANGELOG for more.
See the CHANGELOG for more.
Account entirely (#238).Message (#239).Token client (#242).Transaction (#241). BREAKING CHANGES:
Transaction.__init__ no longer accepts a signatures argument. If you want to construct a transaction with certain signatures, you can still use Transaction.populate.Transaction.add_signer has been removed (it was removed from web3.js in September 2020).signatures attribute of Transaction has been changed to a read-only property.bytes, it is now expected to be a solders.signature.Signature.
This affects the following properties and functions: Transaction.signature, Transacton.signatures, Transaction.add_signature, Transaction.populatekeypairs in Transaction.sign_partial are now only allowed to be Keypair objects. Previously Union[PublicKey, Keypair] was allowed..signatures property of an unsigned transaction is now a list of solders.signature.Signature.default() instead
of an empty list.client.commmitment as a property like in web3.js (#242).See the CHANGELOG for more.
See the CHANGELOG for more.
Relax typing-extensions contraint
See the CHANGELOG for more.
See the CHANGELOG for more.
jsonrpcserver dependency (#205)See the CHANGELOG for more.
See the CHANGELOG for more.
See the CHANGELOG for more.
See the CHANGELOG for more.
See the CHANGELOG for more.
See the CHANGELOG for more.
program_ids list deterministic in compile_message (#164)See the CHANGELOG for more.
See the CHANGELOG for more.
Custom solana-py RPC error handling
See the CHANGELOG for more.
See the CHANGELOG for more.
See the CHANGELOG for more.
create_program_address
(#128)until parameter to get_signatures_for_address (#133)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Deprecate Account and replace with Keypair
.send_transaction and dependent fns, and introduce an opt-in blockhash cache (#102)Account and replace with Keypair (#105)solana.system_program similar to solana-web3: create_account_with_seed, decode_create_account_with_seed (#101)solana.rpc.api methods get_token_largest_accounts, get_token_supply (#104)Your coding agent can read these notes before it upgrades. Set up the MCP server →