Effect-TS integration for Ethereum Virtual Machine (EVM) frontend development
npm install @prb/effect-evm


> [!WARNING]
>
> This is experimental, beta software. It is provided "as is" without warranty of any kind, express or implied.
Type-safe, composable EVM abstractions for Effect, built on viem.
``bash`
bun add @prb/effect-evm
Peer dependencies
- effect@^3.19.11@effect/platform@^0.93.7
- viem@^2.0.0
- @wagmi/core@^2.0.0
- Optional: (for effect-evm/wagmi)react@>=18.2.0
- Optional: , react-dom@>=18.2.0 (for effect-evm/react-hooks)
`typescript
import { Effect } from "effect";
import { mainnet } from "viem/chains";
import { ContractReader, erc20Abi, makeEffectEvmLayer, type ChainConfig } from "effect-evm";
// 1. Configure chains
const configs: ChainConfig[] = [{ chainId: 1, chain: mainnet, rpcUrls: ["https://rpc.example"] }];
// 2. Create the layer
const EvmLayer = makeEffectEvmLayer(configs, window.ethereum);
// 3. Use services
const program = Effect.gen(function* () {
const reader = yield* ContractReader;
return yield* reader.read({
chainId: 1,
address: "0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
abi: erc20Abi,
functionName: "balanceOf",
args: ["0x..."],
});
});
// 4. Run
Effect.runPromise(program.pipe(Effect.provide(EvmLayer)));
`
- Contracts — ContractReader (multicall), ContractWriter, ContractPipeline, typedContractTxManager
- Transactions — with reactive state trackingEventStream
- Events — , ReliableEventStream (confirmations + reorg filtering)BalanceService
- Chain utilities — , BlockService, GasService, NonceServiceDeployService
- Deploy + NFTs — , Erc721ServiceSignatureService
- Signatures + simulation — , SimulationService (Tenderly)SubscriptionService
- Subscriptions — (blocks/logs/pending tx)effect-evm/react-hooks
- EIP-7702 — Delegation and atomic batching for EOAs
- React hooks — (primitives + convenience hooks)useIsSafeAppContext
- Safe App + Safe multisig — , useIsHostSafeApp, useIsSafeMultisigWalleteffect-evm/wagmi
- Wagmi integration — (build layers from wagmi config)browser
- Browser persistence — namespace (localStorage-backed stores)effect-evm/testing-kit
- Testing — (mocks + makeEffectEvmTestLayer`)
- Usage and examples: DOCS.md
- Contributing: CONTRIBUTING.md
MIT