// the find
wevm/viem
TypeScript Interface for Ethereum
Viem is a TypeScript library for interacting with Ethereum — think ethers.js but with better TypeScript inference, native BigInt instead of BigNumber, and a cleaner action-based API. It's the de facto choice for new Ethereum frontend work, especially when paired with wagmi, and is now backed by major players like Stripe and Paradigm.
- ABI-derived TypeScript types are genuinely impressive: pass a const ABI and you get strongly-typed return values, event args, and function parameters at compile time — something ethers v5 never achieved cleanly.
- Native BigInt usage throughout eliminates the BigNumber wrapper tax and associated footguns (e.g., accidentally mixing library BigNumber instances).
- Tree-shakeable, modular design with separate public/wallet/test clients means you only ship what you use — important for browser bundles in dapp frontends.
- Test infrastructure is first-class: built-in Anvil/Hardhat client actions and a test suite that runs against forked mainnet, so the library itself is tested against real chain state.
- The TypeScript magic has real costs: complex ABI types cause slow tsc times and occasionally hit TS instantiation depth limits on larger ABIs, which can be frustrating to debug.
- Bundle size is still non-trivial for what it does — viem pulls in a meaningful chunk of low-level crypto/encoding code, and polyfill requirements can surprise Node.js vs browser environments differently.
- The extension/plugin model (chain-specific actions like OP Stack) is powerful but poorly discoverable — users frequently miss that they need to extend the client to get chain-specific methods, leading to confusing 'method does not exist' errors.
- Migrating from ethers.js isn't straightforward: the mental model difference (clients vs providers/signers, actions vs methods) requires a real rewrite rather than a drop-in swap, which raises the adoption bar for existing projects.