- Category
- Crypto
- Rank
- No. 266Tools index
Previous survey · No. 274 ·
- Pricing
- Open Source
- Type
- TOOL
- Use case
- Coding
- Builder
- wevm
- GitHub
- 6.8k stars
- Latest release
- wagmi@3.7.9
- Date
About
Reactive React hooks for Ethereum — the most popular library for building Ethereum dapps with wallets, contracts, and transactions.
What it does
It is a family of framework bindings, one each for React, Vue and Solid, wrapping a shared vanilla core that talks to browser extensions and remote nodes. An app uses it to connect an account, call and submit on-chain functions, and stay in sync as chain state changes, with caching and deduplication handled underneath. A companion command line tool generates typed bindings from a contract configuration instead of hand writing them.
Why it's ranked here
The action and hook surface covers a full dapp lifecycle: connecting a wallet, reading and writing contracts, watching new blocks and pending transactions, backed by connectors already built for MetaMask, WalletConnect, Coinbase Wallet, Safe, and generic injected wallets. Four frontend targets, React, Vue, Solid, and a vanilla core, share that same logic instead of forking it per framework. The workspace also carries a strict toolchain, covering type checking, unused export detection, and release versioning, which reads as an engineering first project rather than a wrapper built for one framework and adapted later.
What's good
Every action and hook ships its own parameter and return type export, so editors surface accurate autocomplete instead of one generic function signature. Renamed functions keep their old names as deprecated aliases that forward to the replacement, so upgrading rarely breaks working code outright. Wallet connectors are separate, purpose built implementations rather than one generic adapter, covering MetaMask, WalletConnect, Coinbase Wallet, Safe, and generic injected browser wallets. A vanilla core package means the same actions run with no UI framework attached at all.
Tradeoffs
The React package needs TanStack Query and a separate Ethereum interface library installed alongside it, not just the hooks themselves, so adopting it for one hook pulls in several packages. The workspace requires a recent Node runtime and refuses any package manager other than pnpm, which can trip up contributors used to npm or yarn. Several exports carry a deprecated twin, such as account named functions superseded by connection named ones, a sign the naming has already shifted once and may again. The surface is large: dozens of actions and matching hooks per framework, so a newcomer has to search rather than guess which one applies.
How to use it well
Reach for this when the frontend is React, Vue, or Solid and the app needs to read balances, submit transactions, and react to wallet or chain changes without hand rolling connection state. Pair the React or Vue packages with their query caching layer to get the deduplication already wired in rather than adding a separate data fetching library on top. For a plain script, a backend job, or a framework it does not wrap, the vanilla core package's actions work alone. When contract calls repeat across a project, the command line generator can produce typed bindings from a contract configuration instead of writing them by hand.
Technical notes+
packages/core/src/exports/index.ts exports viem style actions (call, connect, readContract, writeContract, simulateContract, sendTransaction, watchBlocks) each paired with matching ErrorType, Parameters and ReturnType exports. packages/react/src/exports/index.ts wraps the same actions as hooks (useReadContract, useWriteContract, useWatchContractEvent) and keeps deprecated aliases such as useAccount pointing at useConnection; packages/vue/src/exports/index.ts and packages/solid/src/exports/index.ts mirror that surface as composables and primitives respectively, both re-exporting the core actions directly rather than reimplementing them. packages/connectors/src/exports/index.ts assembles per-provider connector functions (injected, mock, tempoWallet, baseAccount, coinbaseWallet, metaMask, safe, walletConnect) from a mix of core re-exports and local implementations. packages/cli/src/cli.ts defines a two-command interface, generate and init, built on the cac argument parser. package.json shows a pnpm-only monorepo, its preinstall script enforces pnpm specifically, with Biome for lint and format, knip for unused-export detection, Changesets for release versioning, and vitest, Playwright and testcontainers among the test dependencies; pnpm-workspace.yaml pins a shared dependency catalog and a minimum release age policy on installs. LICENSE is the MIT license.
Observed
- License
- MIT
- Language
- TypeScript, built on a pnpm monorepo
- Interfaces
- Library (framework hooks, composables and vanilla actions) plus a command line interface with generate and init commands
- Packaging
- Split into separate npm packages per framework target (React, Vue, Solid) sharing one core package
- Wallet connectors
- Separate connector modules per provider: injected, mock, MetaMask, Coinbase Wallet, Safe, WalletConnect, plus a tempo wallet connector
- Test tooling
- vitest, Playwright browser tests, and testcontainers listed as devDependencies
- Lint and release tooling
- Biome for lint and format, knip for unused-export detection, Changesets for release versioning
- API stability pattern
- Renamed exports (account named functions and hooks) kept as deprecated aliases pointing to their connection named replacements
- Package manager policy
- Workspace preinstall script blocks any package manager other than pnpm
Read from package.json, LICENSE, packages/core/src/exports/index.ts, packages/react/src/exports/index.ts, packages/connectors/src/exports/index.ts, packages/cli/src/cli.ts, packages/vue/src/exports/index.ts, packages/solid/src/exports/index.ts, packages/core/README.md, packages/react/README.md, site/index.md, pnpm-workspace.yaml, .github/README.md.
What it can do
Connect to Ethereum wallets
Wallet provider (MetaMask, WalletConnect, etc.) → Connected wallet instance and account information
Read smart contract data
Contract address and function parameters → Contract state data and function return values
Execute smart contract transactions
Contract address, function name, and transaction parameters → Transaction hash and execution result
Monitor wallet account changes
Connected wallet → Real-time account address and connection status updates
Track transaction status
Transaction hash → Transaction confirmation status and receipt data
Fetch network information
Ethereum network connection → Current network ID, block number, and chain details
Sign messages with wallet
Message content and connected wallet → Cryptographic signature
Tags
Tech Stack
Media

Comments (0)
No comments yet
Editorially curated, with community endorsements as a secondary signal. Corrections welcome.