SkillAgentSearch skills...

Anvil.js

TypeScript wrapper for Foundry Anvil

Install / Use

/learn @wevm/Anvil.js
About this skill

Quality Score

0/100

Supported Platforms

Universal

README

[!WARNING] This library is deprecated. We recommend consumers to use Prool.

AnvilJS

TypeScript wrapper for Foundry Anvil. AnvilJS provides a simple API to create and manage Anvil instances programmatically.

import { createAnvil } from "@viem/anvil";

const anvil = createAnvil({
  forkUrl: "https://eth-mainnet.alchemyapi.io/v2/<API_KEY>",
  forkBlockNumber: 12345678n,
});

await anvil.start();
await anvil.stop();

Install

pnpm add @viem/anvil
npm i @viem/anvil
yarn add @viem/anvil

Note Anvil is required to use @viem/anvil. Please refer to the foundry book for Anvil installation instructions.

API

createAnvil

Creates anvil instance.

| Name | Description | Type | | ------------ | --------------------------------------- | ---------------------- | | options | Options used to create anvil instance | CreateAnvilOptions | | returns | Anvil instance | Anvil |

Usage

import { createAnvil } from "@viem/anvil";

const anvil = createAnvil({
  // All anvil options are supported & typed.
  forkUrl: "https://eth-mainnet.alchemyapi.io/v2/<API_KEY>",
  forkBlockNumber: 12345678n,
});

await anvil.start();
await anvil.stop();

getVersion

Get anvil version.

| Name | Description | Type | | ------------ | --------------------------------------- | ---------- | | command | Path to anvil command. Default anvil. | string | | returns | anvil version | string |

Usage

import { getVersion } from "@viem/anvil";

const version = await getVersion();

createProxy

Creates and starts a proxy server that spawns anvil instance on demand (e.g. per test file or per test case).

| Name | Description | Type | | --------- | -------------------------------------- | -------------------- | | options | Options used to create proxy server. | CreateProxyOptions | | returns | Server instance | Server |

Usage

import { createProxy, createPool } from "@viem/anvil";

const server = await createProxy({
  pool: createPool(),
  options: {
    forkUrl: "https://eth-mainnet.alchemyapi.io/v2/<API_KEY>",
    forkBlockNumber: 12345678n,
  },
});

server.listen(8545, "::", () => {
  console.log("Proxy server listening on http://0.0.0.0:8545");
});

createPool

Creates pool of anvil instances.

| Name | Description | Type | | --------- | --------------------------------- | -------------------- | | options | Options used to create pool. | CreatePoolOptions | | returns | Pool | Pool |

Usage

import { createPool } from "@viem/anvil";

const pool = createPool();
await pool.start(1, {
  forkUrl: "https://eth-mainnet.alchemyapi.io/v2/<API_KEY>",
  forkBlockNumber: 12345678n,
});
await pool.start(2, {
  forkUrl: "https://eth-mainnet.alchemyapi.io/v2/<API_KEY>",
  forkBlockNumber: 12345678n,
});

startProxy

Creates and starts a proxy server that spawns anvil instance on demand (e.g. per test file or per test case).

| Name | Description | Type | | --------- | ---------------------------------------------------------------- | ------------------------- | | options | Options used to spawn anvil instance. | StartProxyOptions | | returns | Function to shut down the proxy and all spawned anvil instances. | () => Awaitable<void> |

Usage

import { startProxy } from "@viem/anvil";

// Returns a function to shut down the proxy and all spawned anvil instances.
const shutdown = await startProxy({
  port: 8555,
  options: {
    forkUrl: "https://eth-mainnet.alchemyapi.io/v2/<API_KEY>",
    forkBlockNumber: 12345678n,
  },
});

// Shut down the proxy and all spawned anvil instances.
await shutdown();

fetchLogs

Fetches logs for anvil instances.

| Name | Description | Type | | -------- | ----------------------- | ------------------- | | url | URL to anvil proxy. | string | | id | ID of test worker. | number | | returns | Logs of anvil instance. | string[] |

Usage

import { fetchLogs } from "@viem/anvil";

const logs = await fetchLogs("http://localhost:8545", 1);
// Only print the 20 most recent log messages.
console.log(...logs.slice(-20));

Types

import type {
  Anvil,
  AnvilOptions,
  AnvilProxyOptions,
  AnvilProxyOptionsFn,
  CreateAnvilOptions,
  CreateProxyOptions,
  CreatePoolOptions,
  Pool,
  ProxyRequestContext,
  ProxyRequestHandler,
  ProxyResponse,
  ProxyResponseFailure,
  ProxyResponseSuccess,
  StartProxyOptions,
} from "@viem/anvil";

Contributing

If you're interested in contributing, please read the contributing docs before submitting a pull request.

Authors

License

MIT License

View on GitHub
GitHub Stars114
CategoryDevelopment
Updated1mo ago
Forks15

Languages

TypeScript

Security Score

100/100

Audited on Feb 13, 2026

No findings