Releases: anza-xyz/kit
v6.1.0
@solana/kit
v6.1.0 (2026-02-16)
Minor Changes
-
[
@solana/codecs-data-structures] #136370b1ed8Thanks @mcintyre94! - Adds new functionsgetPredicateEncoder,getPredicateDecoderandgetPredicateCodec.These can be used to write an encoder that switches between two encoders based on the value being encoded, or a decoder that switches between two decoders based on the byte array being decoded.
-
[
@solana/codecs-data-structures] #13697ce7545Thanks @mcintyre94! - Allow passing a description to array and tuple encoders and codecs- The
ArrayCodecConfigis extended with an optional description - The tuple encoder and codec now have an optional second argument, which is a new config object
TupleCodecConfigwith an optional description - If either throws a
SOLANA_ERROR__CODECS__INVALID_NUMBER_OF_ITEMSwhen encoding, thecodecDescriptionfield will be the description passed in the config. If no description is included then they will continue to default toarrayandtuplerespectively.
- The
-
[
@solana/instruction-plans] #13341f6cd4bThanks @lorisleiva! - AddparseInstructionOrTransactionPlanInputhelper that converts flexible inputs (instruction plan input or transaction plan input) into anInstructionPlanorTransactionPlan -
[
@solana/instruction-plans] #133250010b5Thanks @lorisleiva! - AddparseInstructionPlanInputhelper that converts flexible inputs (single instruction, instruction plan, or array) into anInstructionPlan -
[
@solana/instruction-plans] #133333234f5Thanks @lorisleiva! - AddparseTransactionPlanInputhelper that converts flexible inputs (single transaction message, transaction plan, or array) into anTransactionPlan -
[
@solana/kit] #1356da61429Thanks @lorisleiva! - Add@solana/kit/program-client-coreas a subpath export for@solana/program-client-corewithout changing root@solana/kitexports. -
[
@solana/plugin-interfaces] #1339ee558a1Thanks @lorisleiva! - Add@solana/plugin-interfacespackage with TypeScript interfaces for building pluggable Solana clients. IncludesClientWithPayer,ClientWithAirdrop,ClientWithRpc,ClientWithRpcSubscriptions,ClientWithTransactionPlanning, andClientWithTransactionSendinginterfaces. -
[
@solana/program-client-core] #1345d3314a6Thanks @lorisleiva! - Add new@solana/program-client-corepackage containing types and utilities for building Solana program clients. This is mainly used by the JavaScript Codama renderer to generate Kit-compatible program clients.
Patch Changes
-
[
@solana/errors] #13443f711e1Thanks @lorisleiva! - Add new error codes for program clients:SOLANA_ERROR__PROGRAM_CLIENTS__INSUFFICIENT_ACCOUNT_METAS,SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_INSTRUCTION_TYPE,SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_INSTRUCTION,SOLANA_ERROR__PROGRAM_CLIENTS__UNEXPECTED_RESOLVED_INSTRUCTION_INPUT_TYPE, andSOLANA_ERROR__PROGRAM_CLIENTS__RESOLVED_INSTRUCTION_INPUT_MUST_BE_NON_NULL. -
[
@solana/errors] #1366215027cThanks @lorisleiva! - Add two newSolanaErrorcodes for program clients:SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_ACCOUNT_TYPEandSOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_ACCOUNT.
v6.0.1
@solana/kit
v6.0.1 (2026-02-05)
Patch Changes
-
[
@solana/kit,@solana/signers,@solana/transaction-messages] #13212d3296fThanks @mcintyre94! - Fix a bug in the type ofTransactionMessageWithSigners -
[
@solana/transaction-messages] #1318a8a57ceThanks @mcintyre94! - Fix bugs in types ofsetTransactionMessageLifetimeUsingBlockhashandsetTransactionMessageLifetimeUsingDurableNonce
v6.0.0
@solana/kit
v6.0.0 (2026-02-04)
Major Changes
-
[
@solana/instruction-plans] #13025f12df2Thanks @lorisleiva! - TheexecuteTransactionMessagecallback increateTransactionPlanExecutornow receives a mutable context object as its first argument. This context can be incrementally populated during execution (e.g. with the latest transaction message, the compiled transaction, or custom properties) and is preserved in the resultingSingleTransactionPlanResultregardless of the outcome. If an error is thrown at any point in the callback, any attributes already saved to the context will still be available in theFailedSingleTransactionPlanResult, which is useful for debugging failures or building recovery plans.The callback must now return either a
Signatureor a fullTransactionobject directly, instead of wrapping the result in an object.BREAKING CHANGES
executeTransactionMessagecallback signature changed. The callback now receives(context, message, config)instead of(message, config)and returnsSignature | Transactioninstead of{ transaction: Transaction } | { signature: Signature }.const executor = createTransactionPlanExecutor({ - executeTransactionMessage: async (message, { abortSignal }) => { + executeTransactionMessage: async (context, message, { abortSignal }) => { const transaction = await signTransactionMessageWithSigners(message); + context.transaction = transaction; await sendAndConfirmTransaction(transaction, { commitment: 'confirmed' }); - return { transaction }; + return transaction; } });Custom context is now set via mutation instead of being returned. Previously, custom context was returned as part of the result object. Now, it must be set directly on the mutable context argument.
const executor = createTransactionPlanExecutor({ - executeTransactionMessage: async (message) => { - const transaction = await signAndSend(message); - return { transaction, context: { custom: 'value' } }; + executeTransactionMessage: async (context, message) => { + context.custom = 'value'; + const transaction = await signAndSend(message); + return transaction; } }); -
[
@solana/instruction-plans] #12935c810acThanks @lorisleiva! - Reshape the successfulSingleTransactionPlanResultfactory functions. ThesuccessfulSingleTransactionPlanResulthelper now accepts a context object (which must include asignatureproperty) instead of a separatesignatureargument. A newsuccessfulSingleTransactionPlanResultFromTransactionhelper is introduced for the common case of creating a successful result from a fullTransactionobject.BREAKING CHANGES
successfulSingleTransactionPlanResultrenamed tosuccessfulSingleTransactionPlanResultFromTransaction. If you were creating a successful result from aTransaction, update the function name.- successfulSingleTransactionPlanResult(message, transaction) + successfulSingleTransactionPlanResultFromTransaction(message, transaction)
successfulSingleTransactionPlanResultFromSignaturerenamed tosuccessfulSingleTransactionPlanResultwith a new signature. Thesignatureis no longer a separate argument — it must be included in thecontextobject.- successfulSingleTransactionPlanResultFromSignature(message, signature) + successfulSingleTransactionPlanResult(message, { signature })
- successfulSingleTransactionPlanResultFromSignature(message, signature, context) + successfulSingleTransactionPlanResult(message, { ...context, signature })
-
[
@solana/instruction-plans] #1309bd3d5f1Thanks @lorisleiva! - Add a newplanTypeproperty to allInstructionPlan,TransactionPlan, andTransactionPlanResulttypes to distinguish them from each other at runtime. This property is a string literal with the value'instructionPlan','transactionPlan', or'transactionPlanResult'respectively. It also adds new type guard functions that make use of that new property:isInstructionPlan,isTransactionPlan, andisTransactionPlanResult.BREAKING CHANGES
InstructionPlan,TransactionPlan, andTransactionPlanResulttype guards updated. All factories have been updated to add the newplanTypeproperty but any custom instantiation of these types must be updated to include it as well.const myInstructionPlan: InstructionPlan = { kind: 'parallel', plans: [/* ... */], + planType: 'instructionPlan', }; const myTransactionPlan: TransactionPlan = { kind: 'parallel', plans: [/* ... */], + planType: 'transactionPlan', }; const myTransactionPlanResult: TransactionPlanResult = { kind: 'parallel', plans: [/* ... */], + planType: 'transactionPlanResult', }; -
[
@solana/instruction-plans] #131191cdb71Thanks @lorisleiva! - Remove deprecated functiongetAllSingleTransactionPlansBREAKING CHANGES
getAllSingleTransactionPlansremoved. UseflattenTransactionPlaninstead.- const singlePlans = getAllSingleTransactionPlans(transactionPlan); + const singlePlans = flattenTransactionPlan(transactionPlan);
-
[
@solana/instruction-plans] #12762fbad6aThanks @lorisleiva! - ReshapeSingleTransactionPlanResultfrom a single object type with astatusdiscriminated union into three distinct types:SuccessfulSingleTransactionPlanResult,FailedSingleTransactionPlanResult, andCanceledSingleTransactionPlanResult. This flattens the result structure so thatstatusis now a string literal ('successful','failed', or'canceled') and properties likecontext,error, andplannedMessagelive at the top level of each variant.Other changes include:
- Rename the
messageproperty toplannedMessageon all single transaction plan result types. This makes it clearer that this original planned message from theTransactionPlan, not the final message that was sent to the network. - Move the
contextobject from inside thestatusfield to the top level of each result variant. All variants now carry acontext— not just successful ones. - Expand
contextattribute to optionally includemessage,signature, andtransactionproperties. These properties are meant to hold the actualTransactionMessage,Signature, andTransactionused when the transaction was sent to the network — which may differ from the originallyplannedMessage. - Remove the now-unused
TransactionPlanResultStatustype. failedSingleTransactionPlanResultandcanceledSingleTransactionPlanResultnow accept an optionalcontextparameter too.
BREAKING CHANGES
Accessing the status kind. Replace
result.status.kindwithresult.status.- if (result.status.kind === 'successful') { /* ... */ } + if (result.status === 'successful') { /* ... */ }
Accessing the signature. The signature has moved from
result.status.signaturetoresult.context.signature.- const sig = result.status.signature; + const sig = result.context.signature;
Accessing the transaction. The transaction has moved from
result.status.transactiontoresult.context.transaction.- const tx = result.status.transaction; + const tx = result.context.transaction;
Accessing the error. The error has moved from
result.status.errortoresult.error.- const err = result.status.error; + const err = result.error;
Accessing the context. The context has moved from
result.status.contexttoresult.context.- const ctx = result.status.context; + const ctx = result.context;
Accessing the message. The
messageproperty has been renamed toplannedMessage.- const msg = result.message; + const msg = result.plannedMessage;
TransactionPlanResultStatusremoved. Code that references this type must be updated to use the individual result variant types (SuccessfulSingleTransactionPlanResult,FailedSingleTransactionPlanResult,CanceledSingleTransactionPlanResult) or theSingleTransactionPlanResultunion directly. - Rename the
-
[
@solana/transaction-messages] #1289b82df4cThanks @mcintyre94! - Remove the export of BaseTransactionMessage, which was previously deprecated. Use TransactionMessage instead.
Minor Changes
- [
@solana/instruction-plans] #1275f8ef83eThanks @lorisleiva! - Add missingTContext,TTransactionMessageand/orTSingletype parameters toTransactionPlanResulttypes and helper functions to better preserve type inf...
v5.5.1
@solana/kit
v5.5.1 (2026-01-28)
Patch Changes
- [
@solana/errors,@solana/instruction-plans] #1264d957526Thanks @lorisleiva! - Exports missing helpers in errors and instruction-plans
v5.5.0
@solana/kit
v5.5.0 (2026-01-27)
Minor Changes
-
[
@solana/errors,@solana/instruction-plans] #1253b4f5897Thanks @lorisleiva! - AddisXandassertIsXtype guard helpers for instruction plans, transaction plans, and transaction plan results -
[
@solana/errors] #126008c9062Thanks @mcintyre94! - Mark thecausedeprecated forSOLANA_ERROR__INSTRUCTION_PLANS__FAILED_TO_EXECUTE_TRANSACTION_PLANerror -
[
@solana/errors,@solana/instruction-plans] #1254ba3f186Thanks @lorisleiva! - AddSuccessfulTransactionPlanResulttype withisSuccessfulTransactionPlanResultandassertIsSuccessfulTransactionPlanResulttype guards -
[
@solana/errors,@solana/instruction-plans] #12361cc0a31Thanks @mcintyre94! - AddgetFirstFailedSingleTransactionPlanResult, which you can use to get the first failed transaction plan result from a transaction plan result, or throw if none failed -
[
@solana/errors] #12306af7c15Thanks @mcintyre94! - Add a functionunwrapSimulationError, which will return the cause of an error if it is a simulation error. Otherwise it is returned unchanged. -
[
@solana/instruction-plans] #1245f731129Thanks @mcintyre94! - AddflattenInstructionPlanandflattenTransactionPlanfunctions, that can be used to remove the sequential/parallel structure from these plans. DeprecategetAllSingleTransactionPlanswhich is superseded byflattenTransactionPlan. -
[
@solana/instruction-plans] #1233b174ed5Thanks @lorisleiva! - AddeveryInstructionPlan,everyTransactionPlanandeveryTransactionPlanResultfunctions that can be used to ensure a given predicate holds for all nodes inside their respective plan structures. -
[
@solana/instruction-plans] #1247ea97d43Thanks @mcintyre94! - Add a new functionappendTransactionMessageInstructionPlanthat can be used to add the instructions from an instruction plan to a transaction message -
[
@solana/instruction-plans] #124360e8c45Thanks @lorisleiva! - AddtransformInstructionPlan,transformTransactionPlanandtransformTransactionPlanResulthelpers for bottom-up transformation of instruction plan trees. -
[
@solana/instruction-plans] #1235a47e441Thanks @lorisleiva! - AddpassthroughFailedTransactionPlanExecutionhelper function that wraps a transaction plan execution promise to return aTransactionPlanResulteven on execution failure. This allows handling execution results in a unified way without try/catch. -
[
@solana/instruction-plans] #1232589d761Thanks @mcintyre94! - AddfindInstructionPlan,findTransactionPlanandfindTransactionPlanResultfunctions that can be used to find the plan matching a given predicate
Patch Changes
-
[
@solana/instruction-plans] #1256cccea6fThanks @mcintyre94! - Fix a bug where a message packer that requires multiple iterations is not correctly added when forced to fit in a single transaction, even if it can fit -
[
@solana/kit] #12347e0377bThanks @mcintyre94! - Fix a race condition insendAndConfirmDurableNonceTransactionFactory -
[
@solana/react] #121056433e9Thanks @rajgoesout! - Return immediately when passing empty array of transactions touseSignTransactionsanduseSignAndSendTransactions
v5.4.0
@solana/kit
v5.4.0 (2026-01-13)
Minor Changes
-
[
@solana/accounts] #1152fb1c576Thanks @rajgoesout! - Include program + type when available in fetchJsonParsedAccount -
[
@solana/react] #1154fec04aeThanks @ningthoujamSwamikumar! - Add a context provider<SelectedWalletAccountContext>anduseSelectedWalletAccountto persist a selected wallet account -
[
@solana/react] #1105a301da8Thanks @rajgoesout! - AdduseSignTransactionsanduseSignAndSendTransactionshooks that you can use to send multiple transactions to a connected wallet.
Patch Changes
-
[
@solana/accounts,@solana/addresses,@solana/assertions,@solana/codecs,@solana/codecs-core,@solana/codecs-data-structures,@solana/codecs-numbers,@solana/codecs-strings,@solana/compat,@solana/errors,@solana/fast-stable-stringify,@solana/functional,@solana/instruction-plans,@solana/instructions,@solana/keys,@solana/kit,@solana/nominal-types,@solana/offchain-messages,@solana/options,@solana/plugin-core,@solana/programs,@solana/promises,@solana/rpc,@solana/rpc-api,@solana/rpc-graphql,@solana/rpc-parsed-types,@solana/rpc-spec,@solana/rpc-spec-types,@solana/rpc-subscriptions,@solana/rpc-subscriptions-api,@solana/rpc-subscriptions-channel-websocket,@solana/rpc-subscriptions-spec,@solana/rpc-transformers,@solana/rpc-transport-http,@solana/rpc-types,@solana/signers,@solana/subscribable,@solana/sysvars,@solana/transaction-confirmation,@solana/transaction-messages,@solana/transactions,@solana/webcrypto-ed25519-polyfill] #1187f5f89ebThanks @mcintyre94! - Make Typescript peer dependency optional + reduce required version to ^5 -
[
@solana/errors,@solana/rpc-transformers] #1186189de37Thanks @mcintyre94! - Fix type of error in sendTransaction preflight errorSome fields in
RpcSimulateTransactionResultwere incorrectly typed as number when they should have been bigint. At runtime these were bigint because of a bug.At runtime all numeric fields in
RpcSimulateTransactionResultwere a bigint, but those typed as number are now correct. -
[
@solana/react] #11999bde4d7Thanks @rajgoesout! - Correct featureName insignTransactionerror
v5.3.0
@solana/kit
v5.3.0 (2026-01-07)
Minor Changes
- [
@solana/kit] #1065fafa52fThanks @rajgoesout! - Add local rent exemption calculator
v5.2.0
@solana/kit
v5.2.0 (2026-01-07)
Minor Changes
-
[
@solana/instruction-plans,@solana/kit,@solana/signers,@solana/transaction-messages,@solana/transactions] #11396dbaf66Thanks @mcintyre94! - Return more precise types from transaction message functionsDeprecate
BaseTransactionMessagein favour ofTransactionMessage -
[
@solana/kit,@solana/plugin-core] #1113b1937c7Thanks @lorisleiva! - Add new@solana/plugin-corepackage enabling us to create modular Kit clients that can be extended with plugins.
Patch Changes
-
[
@solana/codecs-core] #1115c391a44Thanks @steveluscher! - Created a function that gives you a non-sharedArrayBuffergiven any kind ofUint8Array -
[
@solana/codecs-core,@solana/codecs-numbers,@solana/codecs-strings,@solana/compat,@solana/keys] #1116109c78eThanks @steveluscher! - AnySharedArrayBufferthat gets passed to a crypto operation likesignBytesorverifySignaturewill now be copied as non-shared. Crypto operations likesignandverifyrejectSharedArrayBuffersotherwise -
[
@solana/errors,@solana/instruction-plans] #1155b80b092Thanks @lorisleiva! - Throw early when the default transaction plan executor encounters a non-divisible transaction plan. -
[
@solana/rpc-subscriptions-channel-websocket] #11637d5a57cThanks @lorisleiva! - Node users no longer need to manually installws. Browser builds remain unaffected as conditional exports ensurewsis never bundled for browser environments.
v5.1.0
@solana/kit
v5.1.0 (2025-12-12)
Minor Changes
-
[
@solana/errors,@solana/kit,@solana/offchain-messages] #880becf5f6Thanks @steveluscher! - Added codecs for encoding and decoding Solana Offchain Messages (see https://github.com/solana-foundation/SRFCs/discussions/3) -
[
@solana/errors,@solana/kit,@solana/offchain-messages] #98432214f5Thanks @steveluscher! - Added the capability to sign Solana Offchain Messages using aCryptoKey -
[
@solana/instruction-plans] #1044e64a9b2Thanks @mcintyre94! - Add a function to summarize aTransactionPlanResult -
[
@solana/instruction-plans] #10352bd0bc2Thanks @mcintyre94! - Add a function to flatten a transaction plan result -
[
@solana/instruction-plans] #1056a0c394bThanks @lorisleiva! - Accept anyErrorobject in failedSingleTransactionPlanResult -
[
@solana/instruction-plans] #10435c1f9e5Thanks @mcintyre94! - Make Transaction optional in successful transaction plan result + add signature
Patch Changes
-
[
@solana/addresses,@solana/codecs-core,@solana/offchain-messages,@solana/react,@solana/transactions] #104032b13a8Thanks @OrmEmbaar! - Add a function called bytesEqual to codecs-core that you can use to compare two byte arrays for equality. -
[
@solana/codecs-strings,@solana/kit] #999d7f5a0cThanks @tmm! - Some npm packages are needed for specific runtimes only (eg. React Native, Node). To prevent package managers from unconditionally installing these packages when they haveauto-install-peersenabled, we are marking them as optional inpeerDependenciesMeta. When running in React Native, be sure to explicitly installfastestsmallesttextencoderdecoder. When running in Node, be sure to explicitly installws. When using@solana/react, we will presume that you have already installedreact. -
[
@solana/rpc] #1028eb49ed7Thanks @mcintyre94! - Add a typeSolanaRpcApiFromClusterUrl -
[
@solana/rpc-api] #978c97df88Thanks @nonergodic! - Expanded the type of several RPC inputs to accept readonly arrays of values -
[
@solana/transaction-confirmation] #100318e7e2cThanks @damianac! - Actually fixed a bug where transaction errors discovered during recent transaction confirmation might not be thrown. The fix in #793 was insufficient. -
[
@solana/transaction-messages] #102681a0eecThanks @mcintyre94! - Export BlockhashLifetimeConstraint and NonceLifetimeConstraint -
[
@solana/transactions] #10582f7bda8Thanks @mcintyre94! - RemoveTransactionWithLifetimefrom required input type forsignTransactionandpartiallySignTransaction
v5.0.0
@solana/kit
v5.0.0 (2025-10-23)
Major Changes
- [
@solana/errors,@solana/rpc-types] #9740fed638Thanks @joncinque! -BorshIoErrorsfrom the RPC no longer contain anencodedDataproperty. This property used to hold the underlying error from the serialization library used on the server. This message was always subject to changes in the version of that library, or changes in the choice of library itself. New versions of the server no longer throw the underlying error, so for consistency it has been removed everywhere in Kit.