Multi-Chain Browser Wallet Extension by Windson Infotech, built on React 18, ethers.js 6, Chrome MV3 over 4 weeks.
Two problems sit in front of anyone building a browser wallet, and neither is the wallet. The first is that key derivation is Node code: BIP-39 mnemonics, HD derivation and ethers all reach for crypto, stream and Buffer, and webpack 5 stopped shimming those — so a Create React App build fails before a single line of wallet logic runs. The second is Manifest V3's three isolated worlds: a service worker the browser can kill at any moment, a content script that cannot touch page variables, and the page itself. A wallet has to move requests across all three while the one thing that must never cross — the seed — stays put.
The build fixes the toolchain first, with react-app-rewired mapping eight Node core modules to browser implementations and a ProvidePlugin supplying process and Buffer as globals, which is what lets bip39, hdkey and ethers run in an extension at all. On top of that sits the MV3 split: a service worker holds wallet state and signs, a content script injects the provider at document_start so it exists before the host app's first render, and the popup is the React UI. The page never receives a key — it gets an address, a chain ID and a result. Host apps consume it through a small React surface: a Web3WalletProvider, a useWeb3Wallet hook, and ConnectButton and NetworkSelector components, so wiring a dApp in is a few lines rather than a protocol.
A working wallet, built by taking the extension and provider boundary apart and putting it back together.
SYSTEM DELIVERABLES
What we actually built, and why each piece had to exist — the scope as it shipped.
Node-In-The-Browser Build
react-app-rewired over Create React App, mapping crypto, stream, http, https, os, url, assert and buffer to browser implementations, with process and Buffer injected as globals so the derivation libraries load.
Manifest V3 Extension Shell
A service worker holding wallet state, a content script injecting the provider at document_start, and the popup as the action surface — scoped by explicit host permissions rather than a blanket match.
HD Key Derivation And Signing
A 12-word mnemonic generated and verified on setup, accounts derived through hdkey and ethers, and multiple accounts switchable from one seed — all of it held on the extension side of the boundary.
React Integration Layer
Web3WalletProvider, a useWeb3Wallet hook exposing connect, sendTransaction and switchNetwork, plus ConnectButton and NetworkSelector, so a host application integrates in a few lines.

