NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
npm · #4918 most downloaded on npm
Core types and helpers for encoding and decoding byte arrays on Solana
Last release 7 days ago
28 Sep 2026
Ships fairly regularly
a new release about every 8 days
Nearly every release is documented
notes for 39 of 39 stable releases
1 version withdrawn
withdrawn after publishing
3 years old
2267 releases · first in 2023
One column per quarter.
Nothing published for this version
Nothing published for this version
🎉 @solana/kit is the new name for the 2.x line of @solana/web3.js.
🎉 @solana/kit is the new name for the 2.x line of @solana/web3.js.
This should make it easier to adopt in projects that will continue to depend on the legacy 1.x line of web3.js for the time being. It will also prevent confusion for new developers who might install the 2.x line while following a legacy 1.x tutorial.
In time, more guide-based content will be released; in the meantime take a look at the READMEs, the examples/ directory, and https://tsdocs.dev/docs/@solana/kit. If you have questions, please post at https://sola.na/sse.
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
Updated dependencies [1adf435, c7b7dd9, 5af7f20, 704d8a2]:
5af7f20 Thanks @steveluscher! - When the HTTP transport throws an error, you can now access the response headers through e.context.headers. This can be useful, for instance, if the HTTP error is a 429 Rate Limit error, and the response contains a Retry-After header.
try {
const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
} catch (e) {
if (isSolanaError(e, SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR)) {
if (e.context.code === 429 /* rate limit error */) {
const retryAfterHeaderValue = e.context.headers.get('Retry-After');
if (retryAfterHeaderValue != null) {
// ...
}
}
}
}
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
#130 c7b7dd9 Thanks @lorisleiva! - Gracefully handle JSON RPC errors that do not provide a code attribute in their response
704d8a2 Thanks @mcintyre94! - Change data field of transaction message instructions to use ReadonlyUint8Array
5af7f20 Thanks @steveluscher! - When the HTTP transport throws an error, you can now access the response headers through e.context.headers. This can be useful, for instance, if the HTTP error is a 429 Rate Limit error, and the response contains a Retry-After header.
try {
const { value: latestBlockhash } = await rpc.getLatestBlockhash().send();
} catch (e) {
if (isSolanaError(e, SOLANA_ERROR__RPC__TRANSPORT_HTTP_ERROR)) {
if (e.context.code === 429 /* rate limit error */) {
const retryAfterHeaderValue = e.context.headers.get('Retry-After');
if (retryAfterHeaderValue != null) {
// ...
}
}
}
}
1adf435, c7b7dd9, 5af7f20, 704d8a2]:
c880687 Thanks @steveluscher! - Removed the fees sysvar which has been disabled on the network for a year, and has now been removed from the test validator in Agave 2.0
% solana feature status JAN1trEUEtZjgXYzNBYHU9DYd7GnThhXfFP7SzPXkPsG
Feature | Status | Activation Slot | Description
JAN1trEUEtZjgXYzNBYHU9DYd7GnThhXfFP7SzPXkPsG | active since epoch 483 | 208656004 | disable fees sysvar
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
Updated dependencies [1adf435, c7b7dd9, 9b179dc, 400f4d5, 5af7f20, 704d8a2]:
9b179dc Thanks @lorisleiva! - Add missing space attribute to AccountInfoBase and BaseAccount
Updated dependencies [1adf435, 0c577eb, c7b7dd9, 9b179dc, 400f4d5, 5af7f20, 704d8a2]:
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
Updated dependencies [1adf435, c7b7dd9, 5af7f20, 704d8a2]:
1adf435, cfe6910]:
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
Updated dependencies [1adf435, c7b7dd9, 5af7f20, 704d8a2]:
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
cfe6910 Thanks @Jasu! - LiteralUnionCodec is now exported from @solana/codecs-data-structures
Updated dependencies [1adf435, c7b7dd9, 5af7f20, 704d8a2]:
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
Updated dependencies [1adf435, c7b7dd9, 5af7f20, 704d8a2]:
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
Updated dependencies [1adf435, c7b7dd9, 5af7f20, 704d8a2]:
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
#40 790b050 Thanks @steveluscher! - yAdded a helper to convert legacy TransactionInstruction objects to modern IInstruction objects
#57 9029dc1 Thanks @nickfrosty! - updated readme to include instruction compat functions
Updated dependencies [1adf435, d1c787c, 0c577eb, c7b7dd9, 5af7f20, 704d8a2]:
704d8a2 Thanks @mcintyre94! - Change data field of transaction message instructions to use ReadonlyUint8Array
Updated dependencies [1adf435, c7b7dd9, 5af7f20, 704d8a2]:
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
#60 d1c787c Thanks @steveluscher! - Key operations now work in versions of Firefox that support Ed25519 natively
Updated dependencies [1adf435, c7b7dd9, 5af7f20, 704d8a2]:
#101 4662f52 Thanks @mcintyre94! - Add a new function fetchAddressesForLookupTables to fetch the addresses contained in a list of lookup tables'
Updated dependencies [a1e45a1, 1adf435, d1c787c, 0c577eb, c7b7dd9, 9b179dc, 29d1e28, 400f4d5, 5af7f20, 70eb596, 704d8a2, c880687]:
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
Updated dependencies [1adf435, cfe6910, c7b7dd9, 5af7f20, 704d8a2]:
1adf435, 0c577eb, c7b7dd9, 5af7f20, 704d8a2]:
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
Updated dependencies [a1e45a1, 1adf435, d1c787c, 0c577eb, c7b7dd9, 5af7f20, 704d8a2]:
29d1e28 Thanks @steveluscher! - Disabled the MaxListenersExceededWarning in Node when creating event targets for internal use
Updated dependencies [1adf435, c7b7dd9, 9b179dc, 3c25e7f, 400f4d5, 5af7f20, 704d8a2]:
#85 3c25e7f Thanks @mcintyre94! - Fix accountKeys type in getTransaction JSON parsed
Updated dependencies [1adf435, d1c787c, 0c577eb, c7b7dd9, 9b179dc, 400f4d5, 5af7f20, 704d8a2]:
#153 400f4d5 Thanks @steveluscher! - The values of the rewardType property have been corrected. They previously were specified as having a lowercase initial character.
Updated dependencies [1adf435]:
1adf435, c7b7dd9, 5af7f20, 704d8a2]:
29d1e28 Thanks @steveluscher! - Disabled the MaxListenersExceededWarning in Node when creating event targets for internal use
70eb596 Thanks @steveluscher! - The online/offline checker in the subscriptions implementation no longer throws an error when hosted in the Content Scripts environment of a browser extension
Updated dependencies [1adf435, c7b7dd9, 9b179dc, 29d1e28, 400f4d5, 5af7f20, 704d8a2]:
1adf435, d1c787c, 0c577eb, 9b179dc, 29d1e28, 400f4d5, 704d8a2]:
29d1e28 Thanks @steveluscher! - Disabled the MaxListenersExceededWarning in Node when creating event targets for internal use
Updated dependencies [1adf435, c7b7dd9, 29d1e28, 5af7f20, 704d8a2]:
29d1e28 Thanks @steveluscher! - Disabled the MaxListenersExceededWarning in Node when creating event targets for internal use
Updated dependencies [1adf435, c7b7dd9, 29d1e28, 5af7f20, 704d8a2]:
1adf435, c7b7dd9, 9b179dc, 400f4d5, 5af7f20, 704d8a2]:
9b179dc Thanks @lorisleiva! - Add missing space attribute to AccountInfoBase and BaseAccount
#153 400f4d5 Thanks @steveluscher! - The values of the rewardType property have been corrected. They previously were specified as having a lowercase initial character.
Updated dependencies [1adf435, 0c577eb, c7b7dd9, 5af7f20, 704d8a2]:
#151 a1e45a1 Thanks @lorisleiva! - addSignersToTransactionMessage now upgrades feePayer to a signer when applicable
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
Updated dependencies [1adf435, d1c787c, 0c577eb, c7b7dd9, 5af7f20, 704d8a2]:
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
29d1e28 Thanks @steveluscher! - Disabled the MaxListenersExceededWarning in Node when creating event targets for internal use
Updated dependencies [1adf435, c7b7dd9, 5af7f20, 704d8a2]:
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
29d1e28 Thanks @steveluscher! - Disabled the MaxListenersExceededWarning in Node when creating event targets for internal use
Updated dependencies [1adf435, d1c787c, 0c577eb, c7b7dd9, 9b179dc, 29d1e28, 400f4d5, 5af7f20, 70eb596, 704d8a2]:
704d8a2 Thanks @mcintyre94! - Change data field of transaction message instructions to use ReadonlyUint8Array
Updated dependencies [1adf435, 0c577eb, cfe6910, c7b7dd9, 9b179dc, 400f4d5, 5af7f20, 704d8a2]:
1adf435, d1c787c, 0c577eb, cfe6910, c7b7dd9, 9b179dc, 400f4d5, 5af7f20, 704d8a2]:
1adf435 Thanks @leantOnSol! - A two-versions-old version of Node LTS is now specified everywhere via the engines field, including the one in the root of the pnpm workspace, and engine-strictness is delegated to the .npmrc files.
#59 710e571 Thanks @steveluscher! - Fixed a bug where specifying Ed25519 in a different case, or as an object { name: 'Ed25519' } would cause key operations to be delegated to the underlying runtime instead of the polyfill
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
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
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
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
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
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
Nothing published for this version
```ts const codec = addCodecSizePrefix(getBase58Codec(), getU32Codec());
#2434 31916ae Thanks @lorisleiva! - Renamed mapCodec to transformCodec
#2397 a548de2 Thanks @lorisleiva! - Added a new addCodecSizePrefix primitive
const codec = addCodecSizePrefix(getBase58Codec(), getU32Codec());
codec.encode('hello world');
// 0x0b00000068656c6c6f20776f726c64
// | └-- Our encoded base-58 string.
// └-- Our encoded u32 size prefix.
#2419 89f399d Thanks @lorisleiva! - Added new addCodecSentinel primitive
The addCodecSentinel function provides a new way of delimiting the size of a codec. It allows us to add a sentinel to the end of the encoded data and to read until that sentinel is found when decoding. It accepts any codec and a Uint8Array sentinel responsible for delimiting the encoded data.
const codec = addCodecSentinel(getUtf8Codec(), new Uint8Array([255, 255]));
codec.encode('hello');
// 0x68656c6c6fffff
// | └-- Our sentinel.
// └-- Our encoded string.
#2400 ebb03cd Thanks @lorisleiva! - Added new containsBytes and getConstantCodec helpers
The containsBytes helper checks if a Uint8Array contains another Uint8Array at a given offset.
containsBytes(new Uint8Array([1, 2, 3, 4]), new Uint8Array([2, 3]), 1); // true
containsBytes(new Uint8Array([1, 2, 3, 4]), new Uint8Array([2, 3]), 2); // false
The getConstantCodec function accepts any Uint8Array and returns a Codec<void>. When encoding, it will set the provided Uint8Array as-is. When decoding, it will assert that the next bytes contain the provided Uint8Array and move the offset forward.
const codec = getConstantCodec(new Uint8Array([1, 2, 3]));
codec.encode(undefined); // 0x010203
codec.decode(new Uint8Array([1, 2, 3])); // undefined
codec.decode(new Uint8Array([1, 2, 4])); // Throws an error.
#2383 ce1be3f Thanks @lorisleiva! - getScalarEnumCodec is now called getEnumCodec
#3541 135dc5a Thanks @steveluscher! - Drop the Release Candidate label and publish @solana/web3.js at version 2.0.0
#2382 7e86583 Thanks @lorisleiva! - getDataEnumCodec is now called getDiscriminatedUnionCodec
#2411 2e5af9f Thanks @lorisleiva! - Renamed fixCodec to fixCodecSize
#2606 367b8ad Thanks @lorisleiva! - Use commonjs package type
#3137 fd72c2e Thanks @mcintyre94! - The build is now compatible with the Vercel Edge runtime and Cloudflare Workers through the addition of edge-light and workerd to the package exports.
Updated dependencies [9370133, 89f399d, ebb03cd, ce1be3f, 82cf07f, 2d54650, 135dc5a, bef9604, 7e86583, 4f19842, 677a9c4, 38faba0, 2798061, be36bab, 288029a, 4ae78f5, 478443f, 367b8ad, fd72c2e]:
Updated dependencies [`2798061`]:
2798061]:
Your coding agent can read these notes before it upgrades. Set up the MCP server →