---
title: "Web3.js v3 Keeps Its Familiar API and Is Now Powered by Kit"
description: "The Solana Foundation has released @solana/web3.js v3, which keeps the Connection, PublicKey, Keypair, and Transaction classes from v1 and runs them on Solana Kit. It becomes the default npm install on October 19, 2026, and most of the migration is adding await to signing, serializing, and PDA calls."
author: "Mike Hale"
published: 2026-10-09T19:50:00.000Z
updated: 2026-10-09T19:59:15.343Z
category: "Infrastructure"
tags: ["Solana"]
canonical: https://stacksmith.xyz/articles/solana-web3js-v3
source: "Stacksmith"
---

# Web3.js v3 Keeps Its Familiar API and Is Now Powered by Kit

The Solana Foundation has released [`@solana/web3.js` v3](https://github.com/solana-foundation/solana-web3.js/releases/tag/v3.0.0), a rebuild of Solana's classic JavaScript library that keeps the `Connection`, `PublicKey`, `Keypair`, and `Transaction` classes and runs them on Solana Kit underneath. Version 3.0.0 was tagged on October 1, 2026, and it becomes the default npm install on October 19.

> **October 19, 2026.** `@solana/web3.js` 3.x moves from npm's `next` tag to `latest`. From then on, `npm install @solana/web3.js` with no version gets v3. Until then you need `@solana/web3.js@3`.

- **May 29, 2026.** Blueshift's David Leung and Dean Little publish the [proposal for web3.js 3.0](https://blueshift.gg/research/sunrising-web3js-reuniting-solanas-typescript-ecosystem) alongside a release candidate.
- **October 1, 2026.** Version 3.0.0 is tagged, with a new `@solana/wallet-adapter` package.
- **October 5, 2026.** Version 3.0.1 follows as a maintenance release.

## From web3.js v1 to Kit

Web3.js v1 was the default way to talk to Solana from JavaScript for about five years. Its core API sits in most of the ecosystem's documentation, tutorials, SDKs, and wallets. Its classes resist tree-shaking, so apps ship code they never call, and the library fell behind the protocol as Solana development sped up.

Kit began as the 2.x line of web3.js and was later renamed. It drops the classes for small composable functions that bundlers can tree-shake, and it adds a typed RPC, WebCrypto signing, codecs, and program clients generated by Codama.

Kit has no `Connection` or `Transaction`, so moving to it means learning a new API and rewriting working code. Adoption was slower than hoped and the ecosystem split, with wrappers such as Kite and Gill filling the gap. In the week of September 28, 2026, npm counted [3.14 million downloads of web3.js and 3.19 million of Kit](https://solanacompass.com/news/solana-foundation-announces-at-solanaweb3js-v3-a-kit-based-rebuild-of-the-classic-javascript-api-with-a-new-wallet-adapter).

|  | web3.js v1 | Kit | web3.js v3 |
| --- | --- | --- | --- |
| API style | Classes | Functions | Classes |
| Internals | Its own | Kit | Kit |
| Bundle size | Largest | Smallest | Between the two |
| Works with Codama clients | No | Yes | Yes |
| Status | Critical fixes only | Recommended for new apps | New features land here |

## What web3.js v3 keeps and changes

Web3.js v3 aims for the best of both, with v1's class names on the outside and Kit on the inside. The proposal sums it up as "Kit as the foundation. Web3.js as the front door to our Typescript ecosystem."

The two libraries now share types. `PublicKey.toBase58()` returns Kit's `Address`, a v3 `Keypair` works as a Kit signer, and `Transaction.add()` accepts Kit instructions. That lets you call a Codama-generated program client from v1-style code.

Most of the migration is adding `await`. Key generation, signing, serializing, and PDA derivation are all async in v3.

Six other changes break v1 code.

- **Numbers.** Lamports, slots, and block heights come back as `bigint`, and mixing them with `number` throws
- **Bytes.** Account data and serialized transactions are `Uint8Array`, where v1 returned `Buffer`
- **Default commitment.** A `Connection` created without one now uses `confirmed`, where v1 used `finalized`
- **PDAs.** `findProgramAddressSync` is gone, and you `await PublicKey.findProgramAddress` in its place
- **Removed.** `PublicKey.unique()`, the `Account` class, `getRecentBlockhash`, the fee-calculator methods, and the plain `{ publicKey, secretKey }` signer object
- **SPL tokens.** `@solana/spl-token` depends on v1 types and doesn't work with v3, so token code moves to `@solana-program/token`

The commitment default and the `bigint` values both compile cleanly and then behave differently at runtime. Set `'finalized'` explicitly anywhere finality matters, and run your tests against a real node, since mocks that return plain numbers will hide the problem.

## How do you migrate?

Install v3 next to Kit, then work through the type errors.

`npm install @solana/web3.js@3 @solana/kit @solana-program/system`

Quicknode's [v1 to v3 migration guide](https://www.quicknode.com/guides/solana-development/tooling/web3js/migrate-to-v3) walks through each change with before and after code. If you use a coding agent, the repository ships a [migration skill](https://github.com/solana-foundation/solana-web3.js/blob/main/skills/web3js-v1-to-v3-migration/SKILL.md) that has the agent start at your shared Solana wrapper modules, fix removed APIs first, and re-check the project one slice at a time.

Frontends also get a new `@solana/wallet-adapter` package at version 3. It finds wallets through Wallet Standard, so you no longer construct an adapter per wallet, and it supports Sign In With Solana 1.1.

Web3.js v3 is for teams with v1 code they don't want to rewrite. Solana's docs call it "the bridge" for large legacy codebases and still point new apps to Kit, and a v3 bundle is smaller than v1 without getting as small as a pure Kit app. Web3.js v1 now gets critical fixes only.

The Foundation is betting that the 3 million weekly web3.js installs will take web3.js v3, an upgrade made mostly of `await` and type fixes, where they wouldn't take a rewrite.
