Picking an Ethereum client library sets real constraints on bundle size, TypeScript types, and how you talk to the chain from React. Ethers.js and Viem with Wagmi are the two I keep comparing, and this post covers how they differ and how we use Viem at Bitlauncher.

Where Viem runs at Bitlauncher
At bitlauncher.ai we use Viem in three places where performance and modularity matter:
- EVM data indexer: Viem runs with Node.js in the backend to index EVM data.
- Development faucet and wallet interfaces: Wagmi, on top of Viem, powers the development faucet and the main wallet.
- Auction interfaces: Wagmi's React hooks manage the state behind the auction screens.
Ethers.js is still in the smart contracts Hardhat project, because that project is a fork of the Gnosis auction system, which predates Viem and Wagmi.
How Viem and Ethers.js differ
Bundle size
Viem is around 27 KB against roughly 130 KB for Ethers.js, which means faster load times in a web app and makes Viem the better fit for performance-sensitive frontends. Ethers.js pays for its size with a broader built-in feature set, which still matters in some complex applications.
Modularity and developer experience
Viem is modular, so you import only the parts you use, and its "actions" give each chain operation a clear, single-purpose function. It also infers types automatically from ABIs, which saves a lot of manual typing in TypeScript projects. Ethers.js is known for extensive documentation and community support, and its wide range of utilities covers most Ethereum use cases.
React integration
Wagmi is built around Viem specifically for React, with hooks for connecting to providers and managing chain state. Ethers.js works in React too, but it usually needs more boilerplate to reach the same result.
Stability
The Viem team tests against a forked Ethereum node with broad coverage, which gives it a reliable base for production. Ethers.js has the longer track record, backed by a large and active community.
Choosing between them
The choice depends on the project. Viem is smaller, more modular, and pairs cleanly with React, while Ethers.js is older, well documented, and still the default in some Hardhat and smart contract toolchains, so the decision belongs to whoever owns the technical direction of the Web3 stack.
At Bitlauncher we picked Viem and Wagmi where they helped, in the indexer, faucet, wallet, and auctions, and kept Ethers.js where the Gnosis auction fork already depended on it, which kept the contracts project stable while the apps moved to the lighter stack.