web3.js 3.0: the classic API, rebuilt on Kit — Solana's TypeScript reunion
web3.js 3.0 (3.0.0-rc.1) revives the familiar Connection/PublicKey/Transaction API on top of @solana/kit's internals. Here's the convergence story, the proof in the dependency tree, and the real advantages over Kit.
Blueshift just published "Sunrising web3.js" (by David Leung and Dean Little), announcing web3.js 3.0. The one-liner: "the standard developers already use, rebuilt on the internals the ecosystem actually needs." It's a reversal worth understanding — and the announcement is strategic, so this piece adds the concrete package facts it leaves out.
The fragmentation that caused this
To see why 3.0 matters, you need the version history straight:
- web3.js v1 — the default for ~5 years.
Connection,PublicKey,Transaction,sendAndConfirmTransaction. Class-heavy, not tree-shakeable, inconsistent naming (allowOwnerOffCurveis the cited offender). Load-bearing infra in wallets, dashboards, and production everywhere. - web3.js v2 → renamed
@solana/kit— the ground-up rewrite. Functional, modular, tree-shakeable; explicit primitives (codecs, signers,createSolanaRpc). Smaller bundles, better performance — but a brand-new API, verbose grammar, incompatible types, and thin docs. - Gill and Kite — friendlier wrappers over Kit. Each one proved the thesis: the internals are great, but the DX didn't meet developers where they were. The net effect was choice paralysis — "web3.js? Kit? Kite? Gill?"
The article's sharpest line: "Rational developers don't just automatically adopt a new SDK overnight because it is architecturally cleaner." Kit was better and adoption still stalled, because the switching cost (the "rewrite tax") beat the cost of staying. It invokes Ethereum's web3.js-vs-ethers-vs-viem civil war as the cautionary tale: the best technical layer still needs an adoption path that respects existing software.
What web3.js 3.0 actually is
Not a wrapper — a complete rebuild of the classic v1 API surface on Kit's internals. You keep Connection and friends; the slow, untreeshakeable guts get swapped for Kit's modular ones. The proof isn't in the prose — it's in the dependency tree of 3.0.0-rc.1:
// dependencies of @solana/[email protected]
{
"@solana/kit": "^6.8.0", // ← the Kit internals, directly
"@solana/signers": "^6.8.0",
"@solana/rpc-spec-types": "^6.8.0",
"@solana/assertions": "^6.8.0",
"@solana/fast-stable-stringify": "^6.8.0",
"@solana-program/system": "^0.12.0", // modular program
"@solana-program/compute-budget": "^0.15.0", // clients, not a
"@solana-program/address-lookup-table": "^0.11.0", // monolith
"@solana-program/stake": "^0.6.1",
"@noble/curves": "^1.4.2",
"@noble/hashes": "^1.4.0"
}That is the whole story in one object: the familiar front door now imports Kit and the modular @solana-program/* clients underneath. v3 is Kit, wearing the v1 API.
The install reality (the part to actually remember)
3.0 is a release candidate, and it is not the default install yet. The latest dist-tag still points at v1:
npm i @solana/web3.js # → 1.98.4 (still the v1 default!)
npm i @solana/web3.js@rc # → 3.0.0-rc.1 (the new one)
npm i @solana/kit # → 6.9.0 (the foundation, still shipping)So nothing breaks under existing apps — you opt into 3.0 explicitly via @rc. There is an automated migration agent skill in the repo for converting an app, and no GA date is given.
Advantages of web3.js 3.0 over Kit
- Zero API relearning. The same
Connection/PublicKey/Transactionmuscle memory — and every Stack Overflow answer, doc, and tutorial written for v1 still applies. Kit asks you to relearn all of it. - Kit's engine, none of Kit's verbosity. You get the tree-shakeable, modular internals without writing the explicit,
pipe()-heavy Kit grammar. - A real migration path. Framed as an "uneventful software upgrade" (v1 → v3) with tooling — not a community-wide rewrite tax.
- Convergence. One default front door ends the "web3.js? Kit? Kite? Gill?" paralysis. As the article puts it, the goal isn't to win an SDK war — Solana needs "a clear default path forward."
Where Kit still wins
- Absolute minimalism. v3 keeps classic abstractions for compatibility, so it won't hit Kit's theoretical floor on bundle size or its purely-functional purity.
- Explicit modern primitives. If you want first-class codecs, explicit signers, and
createSolanaRpc/subscriptions as the native idiom, Kit (or Gill, the friendly Kit) gives them directly. v3 hides them behind the old surface. - Greenfield. With no legacy to preserve, v3's headline benefit (muscle memory + migration) doesn't apply — Kit is a fine starting point.
The decision rule: migrating or maintaining a v1 codebase → web3.js 3.0; brand-new project wanting the cleanest modern surface → Kit/Gill. Either way you land on Kit internals, which is exactly the point — convergence, not a winner.
One honesty note on bundle size
The announcement promises "smaller bundles" but shows no numbers, and the raw npm tarball is not a proxy: the v3 RC unpacks to ~11.9MB (18 files) versus v1's ~11.2MB — slightly larger on disk. That figure is meaningless for your app, though. The real win is tree-shaking: with Kit internals, only the functions you actually import survive your bundler's dead-code elimination, where v1's class-heavy design dragged the whole library in. If bundle size is your reason to upgrade, measure your own production build before and after — not the tarball.
The honest read
This is the right move, and a slightly humbling one: the ecosystem spent two years pushing a superior rewrite that the market wouldn't adopt, and 3.0 is the concession that DX and continuity beat architectural purity. Reviving the v1 API on Kit's engine gets the wins without the tax. The caveats are simple — it's an rc with no GA date, latest is still v1, and the bundle claims are unquantified. Validate the migration agent on a branch before trusting it in production.
References
- Blueshift — "Sunrising web3.js" (Leung & Little)
- @solana/web3.js on npm — the
@rc= 3.0.0-rc.1 tag - Solana Kit vs web3.js vs Gill — the comparison this converges
Two years after the rewrite, Solana's TypeScript story finally has a single front door again — and behind it, the modern engine everyone actually wanted.