

Decode Viem & Wagmi
errors effortlessly
Turn deeply-nested Viem and Wagmi error chains into clean, human-readable messages — including custom revert reasons from your own ABIs.
Install
30-second example
From error to message in one line
import { forViem } from 'viem-error-parser';
const decoder = forViem(); // ERC20/721/1155, OZ, ERC-2612 built-in
try {
await walletClient.writeContract({ ... });
} catch (error) {
const result = decoder.decode(error);
console.error(result.message);
// "ERC20InsufficientBalance(sender=0x..., balance=5n, needed=100n)"
// or "The transaction was rejected by the user."
}Features
Everything you need, nothing you don't
Cause Chain Traversal
Walks the deeply-nested error.cause chain and errors[] siblings. Cycle-safe via WeakSet, capped at depth 16.
Revert Data Extraction
Extracts revert data from data, rawData, returnData, output, or hex embedded in error messages.
Custom ABI Decoding
Register your own contract ABIs. Get named arguments decoded via viem decodeErrorResult.
Smart Classifier
Classifies non-revert problems: user rejection, gas, network, RPC, EIP-1193 codes, and more.
React Hook
useErrorParser hook memoises the decoder — stable across renders, zero unnecessary re-renders.
Tree-Shakable
Ships ESM + CJS + types with sideEffects: false. Import only what you need — starts at ~6 KB gzipped.
Documentation
Start reading
Ready to stop fighting error chains?
Add viem-error-parser and get human-readable errors in minutes.