Skip to content

Releases: anza-xyz/kit

v6.1.0

16 Feb 20:39
1d2eed3

Choose a tag to compare

@solana/kit

v6.1.0 (2026-02-16)

Minor Changes

  • [@solana/codecs-data-structures] #1363 70b1ed8 Thanks @mcintyre94! - Adds new functions getPredicateEncoder, getPredicateDecoder and getPredicateCodec.

    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] #1369 7ce7545 Thanks @mcintyre94! - Allow passing a description to array and tuple encoders and codecs

    • The ArrayCodecConfig is extended with an optional description
    • The tuple encoder and codec now have an optional second argument, which is a new config object TupleCodecConfig with an optional description
    • If either throws a SOLANA_ERROR__CODECS__INVALID_NUMBER_OF_ITEMS when encoding, the codecDescription field will be the description passed in the config. If no description is included then they will continue to default to array and tuple respectively.
  • [@solana/instruction-plans] #1334 1f6cd4b Thanks @lorisleiva! - Add parseInstructionOrTransactionPlanInput helper that converts flexible inputs (instruction plan input or transaction plan input) into an InstructionPlan or TransactionPlan

  • [@solana/instruction-plans] #1332 50010b5 Thanks @lorisleiva! - Add parseInstructionPlanInput helper that converts flexible inputs (single instruction, instruction plan, or array) into an InstructionPlan

  • [@solana/instruction-plans] #1333 33234f5 Thanks @lorisleiva! - Add parseTransactionPlanInput helper that converts flexible inputs (single transaction message, transaction plan, or array) into an TransactionPlan

  • [@solana/kit] #1356 da61429 Thanks @lorisleiva! - Add @solana/kit/program-client-core as a subpath export for @solana/program-client-core without changing root @solana/kit exports.

  • [@solana/plugin-interfaces] #1339 ee558a1 Thanks @lorisleiva! - Add @solana/plugin-interfaces package with TypeScript interfaces for building pluggable Solana clients. Includes ClientWithPayer, ClientWithAirdrop, ClientWithRpc, ClientWithRpcSubscriptions, ClientWithTransactionPlanning, and ClientWithTransactionSending interfaces.

  • [@solana/program-client-core] #1345 d3314a6 Thanks @lorisleiva! - Add new @solana/program-client-core package 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] #1344 3f711e1 Thanks @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, and SOLANA_ERROR__PROGRAM_CLIENTS__RESOLVED_INSTRUCTION_INPUT_MUST_BE_NON_NULL.

  • [@solana/errors] #1366 215027c Thanks @lorisleiva! - Add two new SolanaError codes for program clients: SOLANA_ERROR__PROGRAM_CLIENTS__UNRECOGNIZED_ACCOUNT_TYPE and SOLANA_ERROR__PROGRAM_CLIENTS__FAILED_TO_IDENTIFY_ACCOUNT.

v6.0.1

05 Feb 15:39
f7c1fc7

Choose a tag to compare

@solana/kit

v6.0.1 (2026-02-05)

Patch Changes

  • [@solana/kit, @solana/signers, @solana/transaction-messages] #1321 2d3296f Thanks @mcintyre94! - Fix a bug in the type of TransactionMessageWithSigners

  • [@solana/transaction-messages] #1318 a8a57ce Thanks @mcintyre94! - Fix bugs in types of setTransactionMessageLifetimeUsingBlockhash and setTransactionMessageLifetimeUsingDurableNonce

v6.0.0

04 Feb 10:18
5e04dfc

Choose a tag to compare

@solana/kit

v6.0.0 (2026-02-04)

Major Changes

  • [@solana/instruction-plans] #1302 5f12df2 Thanks @lorisleiva! - The executeTransactionMessage callback in createTransactionPlanExecutor now 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 resulting SingleTransactionPlanResult regardless 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 the FailedSingleTransactionPlanResult, which is useful for debugging failures or building recovery plans.

    The callback must now return either a Signature or a full Transaction object directly, instead of wrapping the result in an object.

    BREAKING CHANGES

    executeTransactionMessage callback signature changed. The callback now receives (context, message, config) instead of (message, config) and returns Signature | Transaction instead 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] #1293 5c810ac Thanks @lorisleiva! - Reshape the successful SingleTransactionPlanResult factory functions. The successfulSingleTransactionPlanResult helper now accepts a context object (which must include a signature property) instead of a separate signature argument. A new successfulSingleTransactionPlanResultFromTransaction helper is introduced for the common case of creating a successful result from a full Transaction object.

    BREAKING CHANGES

    successfulSingleTransactionPlanResult renamed to successfulSingleTransactionPlanResultFromTransaction. If you were creating a successful result from a Transaction, update the function name.

    - successfulSingleTransactionPlanResult(message, transaction)
    + successfulSingleTransactionPlanResultFromTransaction(message, transaction)

    successfulSingleTransactionPlanResultFromSignature renamed to successfulSingleTransactionPlanResult with a new signature. The signature is no longer a separate argument — it must be included in the context object.

    - successfulSingleTransactionPlanResultFromSignature(message, signature)
    + successfulSingleTransactionPlanResult(message, { signature })
    - successfulSingleTransactionPlanResultFromSignature(message, signature, context)
    + successfulSingleTransactionPlanResult(message, { ...context, signature })
  • [@solana/instruction-plans] #1309 bd3d5f1 Thanks @lorisleiva! - Add a new planType property to all InstructionPlan, TransactionPlan, and TransactionPlanResult types 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, and isTransactionPlanResult.

    BREAKING CHANGES

    InstructionPlan, TransactionPlan, and TransactionPlanResult type guards updated. All factories have been updated to add the new planType property 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] #1311 91cdb71 Thanks @lorisleiva! - Remove deprecated function getAllSingleTransactionPlans

    BREAKING CHANGES

    getAllSingleTransactionPlans removed. Use flattenTransactionPlan instead.

    - const singlePlans = getAllSingleTransactionPlans(transactionPlan);
    + const singlePlans = flattenTransactionPlan(transactionPlan);
  • [@solana/instruction-plans] #1276 2fbad6a Thanks @lorisleiva! - Reshape SingleTransactionPlanResult from a single object type with a status discriminated union into three distinct types: SuccessfulSingleTransactionPlanResult, FailedSingleTransactionPlanResult, and CanceledSingleTransactionPlanResult. This flattens the result structure so that status is now a string literal ('successful', 'failed', or 'canceled') and properties like context, error, and plannedMessage live at the top level of each variant.

    Other changes include:

    • Rename the message property to plannedMessage on all single transaction plan result types. This makes it clearer that this original planned message from the TransactionPlan, not the final message that was sent to the network.
    • Move the context object from inside the status field to the top level of each result variant. All variants now carry a context — not just successful ones.
    • Expand context attribute to optionally include message, signature, and transaction properties. These properties are meant to hold the actual TransactionMessage, Signature, and Transaction used when the transaction was sent to the network — which may differ from the originally plannedMessage.
    • Remove the now-unused TransactionPlanResultStatus type.
    • failedSingleTransactionPlanResult and canceledSingleTransactionPlanResult now accept an optional context parameter too.

    BREAKING CHANGES

    Accessing the status kind. Replace result.status.kind with result.status.

    - if (result.status.kind === 'successful') { /* ... */ }
    + if (result.status === 'successful') { /* ... */ }

    Accessing the signature. The signature has moved from result.status.signature to result.context.signature.

    - const sig = result.status.signature;
    + const sig = result.context.signature;

    Accessing the transaction. The transaction has moved from result.status.transaction to result.context.transaction.

    - const tx = result.status.transaction;
    + const tx = result.context.transaction;

    Accessing the error. The error has moved from result.status.error to result.error.

    - const err = result.status.error;
    + const err = result.error;

    Accessing the context. The context has moved from result.status.context to result.context.

    - const ctx = result.status.context;
    + const ctx = result.context;

    Accessing the message. The message property has been renamed to plannedMessage.

    - const msg = result.message;
    + const msg = result.plannedMessage;

    TransactionPlanResultStatus removed. Code that references this type must be updated to use the individual result variant types (SuccessfulSingleTransactionPlanResult, FailedSingleTransactionPlanResult, CanceledSingleTransactionPlanResult) or the SingleTransactionPlanResult union directly.

  • [@solana/transaction-messages] #1289 b82df4c Thanks @mcintyre94! - Remove the export of BaseTransactionMessage, which was previously deprecated. Use TransactionMessage instead.

Minor Changes

  • [@solana/instruction-plans] #1275 f8ef83e Thanks @lorisleiva! - Add missing TContext, TTransactionMessage and/or TSingle type parameters to TransactionPlanResult types and helper functions to better preserve type inf...
Read more

v5.5.1

28 Jan 12:08
1d1bd86

Choose a tag to compare

@solana/kit

v5.5.1 (2026-01-28)

Patch Changes

  • [@solana/errors, @solana/instruction-plans] #1264 d957526 Thanks @lorisleiva! - Exports missing helpers in errors and instruction-plans

v5.5.0

27 Jan 19:18
7e85600

Choose a tag to compare

@solana/kit

v5.5.0 (2026-01-27)

Minor Changes

  • [@solana/errors, @solana/instruction-plans] #1253 b4f5897 Thanks @lorisleiva! - Add isX and assertIsX type guard helpers for instruction plans, transaction plans, and transaction plan results

  • [@solana/errors] #1260 08c9062 Thanks @mcintyre94! - Mark the cause deprecated for SOLANA_ERROR__INSTRUCTION_PLANS__FAILED_TO_EXECUTE_TRANSACTION_PLAN error

  • [@solana/errors, @solana/instruction-plans] #1254 ba3f186 Thanks @lorisleiva! - Add SuccessfulTransactionPlanResult type with isSuccessfulTransactionPlanResult and assertIsSuccessfulTransactionPlanResult type guards

  • [@solana/errors, @solana/instruction-plans] #1236 1cc0a31 Thanks @mcintyre94! - Add getFirstFailedSingleTransactionPlanResult, which you can use to get the first failed transaction plan result from a transaction plan result, or throw if none failed

  • [@solana/errors] #1230 6af7c15 Thanks @mcintyre94! - Add a function unwrapSimulationError, which will return the cause of an error if it is a simulation error. Otherwise it is returned unchanged.

  • [@solana/instruction-plans] #1245 f731129 Thanks @mcintyre94! - Add flattenInstructionPlan and flattenTransactionPlan functions, that can be used to remove the sequential/parallel structure from these plans. Deprecate getAllSingleTransactionPlans which is superseded by flattenTransactionPlan.

  • [@solana/instruction-plans] #1233 b174ed5 Thanks @lorisleiva! - Add everyInstructionPlan, everyTransactionPlan and everyTransactionPlanResult functions that can be used to ensure a given predicate holds for all nodes inside their respective plan structures.

  • [@solana/instruction-plans] #1247 ea97d43 Thanks @mcintyre94! - Add a new function appendTransactionMessageInstructionPlan that can be used to add the instructions from an instruction plan to a transaction message

  • [@solana/instruction-plans] #1243 60e8c45 Thanks @lorisleiva! - Add transformInstructionPlan, transformTransactionPlan and transformTransactionPlanResult helpers for bottom-up transformation of instruction plan trees.

  • [@solana/instruction-plans] #1235 a47e441 Thanks @lorisleiva! - Add passthroughFailedTransactionPlanExecution helper function that wraps a transaction plan execution promise to return a TransactionPlanResult even on execution failure. This allows handling execution results in a unified way without try/catch.

  • [@solana/instruction-plans] #1232 589d761 Thanks @mcintyre94! - Add findInstructionPlan, findTransactionPlan and findTransactionPlanResult functions that can be used to find the plan matching a given predicate

Patch Changes

  • [@solana/instruction-plans] #1256 cccea6f Thanks @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] #1234 7e0377b Thanks @mcintyre94! - Fix a race condition in sendAndConfirmDurableNonceTransactionFactory

  • [@solana/react] #1210 56433e9 Thanks @rajgoesout! - Return immediately when passing empty array of transactions to useSignTransactions and useSignAndSendTransactions

v5.4.0

13 Jan 19:42
1fa4b78

Choose a tag to compare

@solana/kit

v5.4.0 (2026-01-13)

Minor Changes

  • [@solana/accounts] #1152 fb1c576 Thanks @rajgoesout! - Include program + type when available in fetchJsonParsedAccount

  • [@solana/react] #1154 fec04ae Thanks @ningthoujamSwamikumar! - Add a context provider <SelectedWalletAccountContext> and useSelectedWalletAccount to persist a selected wallet account

  • [@solana/react] #1105 a301da8 Thanks @rajgoesout! - Add useSignTransactions and useSignAndSendTransactions hooks 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] #1187 f5f89eb Thanks @mcintyre94! - Make Typescript peer dependency optional + reduce required version to ^5

  • [@solana/errors, @solana/rpc-transformers] #1186 189de37 Thanks @mcintyre94! - Fix type of error in sendTransaction preflight error

    Some fields in RpcSimulateTransactionResult were 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 RpcSimulateTransactionResult were a bigint, but those typed as number are now correct.

  • [@solana/react] #1199 9bde4d7 Thanks @rajgoesout! - Correct featureName in signTransaction error

v5.3.0

07 Jan 19:55
47c9901

Choose a tag to compare

@solana/kit

v5.3.0 (2026-01-07)

Minor Changes

v5.2.0

07 Jan 16:38
4cd50c4

Choose a tag to compare

@solana/kit

v5.2.0 (2026-01-07)

Minor Changes

  • [@solana/instruction-plans, @solana/kit, @solana/signers, @solana/transaction-messages, @solana/transactions] #1139 6dbaf66 Thanks @mcintyre94! - Return more precise types from transaction message functions

    Deprecate BaseTransactionMessage in favour of TransactionMessage

  • [@solana/kit, @solana/plugin-core] #1113 b1937c7 Thanks @lorisleiva! - Add new @solana/plugin-core package enabling us to create modular Kit clients that can be extended with plugins.

Patch Changes

  • [@solana/codecs-core] #1115 c391a44 Thanks @steveluscher! - Created a function that gives you a non-shared ArrayBuffer given any kind of Uint8Array

  • [@solana/codecs-core, @solana/codecs-numbers, @solana/codecs-strings, @solana/compat, @solana/keys] #1116 109c78e Thanks @steveluscher! - Any SharedArrayBuffer that gets passed to a crypto operation like signBytes or verifySignature will now be copied as non-shared. Crypto operations like sign and verify reject SharedArrayBuffers otherwise

  • [@solana/errors, @solana/instruction-plans] #1155 b80b092 Thanks @lorisleiva! - Throw early when the default transaction plan executor encounters a non-divisible transaction plan.

  • [@solana/rpc-subscriptions-channel-websocket] #1163 7d5a57c Thanks @lorisleiva! - Node users no longer need to manually install ws. Browser builds remain unaffected as conditional exports ensure ws is never bundled for browser environments.

v5.1.0

12 Dec 19:14
fda35c8

Choose a tag to compare

@solana/kit

v5.1.0 (2025-12-12)

Minor Changes

Patch Changes

  • [@solana/addresses, @solana/codecs-core, @solana/offchain-messages, @solana/react, @solana/transactions] #1040 32b13a8 Thanks @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] #999 d7f5a0c Thanks @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 have auto-install-peers enabled, we are marking them as optional in peerDependenciesMeta. When running in React Native, be sure to explicitly install fastestsmallesttextencoderdecoder. When running in Node, be sure to explicitly install ws. When using @solana/react, we will presume that you have already installed react.

  • [@solana/rpc] #1028 eb49ed7 Thanks @mcintyre94! - Add a type SolanaRpcApiFromClusterUrl

  • [@solana/rpc-api] #978 c97df88 Thanks @nonergodic! - Expanded the type of several RPC inputs to accept readonly arrays of values

  • [@solana/transaction-confirmation] #1003 18e7e2c Thanks @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] #1026 81a0eec Thanks @mcintyre94! - Export BlockhashLifetimeConstraint and NonceLifetimeConstraint

  • [@solana/transactions] #1058 2f7bda8 Thanks @mcintyre94! - Remove TransactionWithLifetime from required input type for signTransaction and partiallySignTransaction

v5.0.0

23 Oct 19:12
3e7cec8

Choose a tag to compare

@solana/kit

v5.0.0 (2025-10-23)

Major Changes

  • [@solana/errors, @solana/rpc-types] #974 0fed638 Thanks @joncinque! - BorshIoErrors from the RPC no longer contain an encodedData property. 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.