v5.3.0 · MIT OR Apache-2.0
Be your own indexer.
Turn an EVM contract's history into a local SQL database. One Rust binary, no Postgres, no subgraph to write, and an MCP server built in.
curl -fsSL https://nuthatch-indexer.com/install.sh | sh
A real run of 4.10.1, with the log trimmed to the lines that matter. init resolves the ABI and scaffolds the
project; dev follows the tip, seals finalized ranges to Parquet, and serves it.
--backfill 300 starts 300 blocks behind the tip, so there are rows within
seconds; without it dev backfills from deployment, which for a contract with a
long history wants your own archive-capable RPC.
The largest nest we run, answering the 74 statements its dashboard and jobs send, two at a time under its production limits on Linux: 1,595 to 1,788 MiB over four runs of 4.4.0, inside the 2 GB budget. Release notes.
Sentio's OBIB case 6, the Uniswap V2 factory over 10,001 blocks with 232 pairs discovered as it ran: 35,271 events in 14 RPC requests and 229 MB, median of five runs of the published 4.7.0 binary against a keyless public gateway. Someone else's benchmark, not a ranking. The run's record.
Contract address to a live indexed API: the README quickstart run as written in a clean ubuntu:24.04 container. 4.8.0 release notes.
No gateway, no tokens, no account. The one thing it can send is a head count, and only after you say yes. It reads from an RPC endpoint you choose, which can be your own node.
How it works
One process, from RPC to a query you can trust.
- chain RPC · reth ExEx (planned)
- deterministic decode topic0-keyed, versioned
- incremental views IVM · reorgs = retractions
- redb + Parquet hot tip · sealed segments
- entities · SQL · balances · MCP one local endpoint
Two engines, one binary
A hot store (redb) answers entity point-reads at the tip. Past finality, ranges seal to content-addressed Parquet segments, and Burrmill, an embedded query engine on DataFusion, reads them for analytical SQL. Single writer, no Postgres, no Docker.
Entities maintained as blocks arrive
General authored views run when queried. For a repeated, expensive aggregate, declare
an entity in entities.toml and Nuthatch maintains the keyed relation as
blocks arrive. A reorg is a retraction, not a pile of rollback code.
Deterministic by construction
Decode and derivation are reproducible: the same blocks in always give the same rows and entities out, so anyone can re-execute a nest and check the answer. Effects such as webhooks and alerts happen after sealing, never in the data path.
Where this is going is public, RFC by RFC - see the roadmap.
Who runs it
Three front doors.
GET /sql, like a database that fills itself.
run a published nest, write no indexing code.
built-in MCP, fully local.
Where it sits
The honest comparison.
| Needs a subgraph | Needs handler code | Data comes from | What you run | Query with | |
|---|---|---|---|---|---|
| The Graph | yes | yes (AssemblyScript) | indexers on the network | nothing, or graph-node + Postgres + IPFS | GraphQL |
| Ponder | no | yes (TypeScript) | your RPC endpoint | Node.js, plus Postgres in production | SQL, GraphQL |
| Nuthatch | no | no: tables come from the ABI | your RPC endpoint | one binary | SQL, HTTP, MCP |
Like Ponder, Nuthatch reads the chain over JSON-RPC, so it needs an endpoint, and a provider may charge for one. The public endpoints it bundles are for trying it out, not for keeping it running. It complements The Graph rather than replacing it: a subgraph serves an application from a network of indexers, while a nest puts a contract's history in a database on your own machine.
AI-native, sovereignty-respecting
The AI writes the code. It never sits in the data path.
- A built-in MCP server: nine tools, three resources and two prompts on every nest, covering schema discovery, SQL, entity and balance lookup. Flags, exposure and a third prompt appear when the compliance pack is configured.
- A governed semantic layer:
schemaserves this nest's meaning, and a failed query comes back as a fix hint (explainchecks a query before it runs) - so the agent gets it right first try. - Ships
llms.txtand a Claude Code skill an agent uses to drive nuthatch, not just read it. - Works fully offline against your local instance.
initresolves the ABI and scaffolds the project: config,llms.txt, and a Claude Code skill.- The skill hands the tool the real query surface, so it uses actual endpoints, not guesses.
Under two minutes. One binary. No one to ask.
curl -fsSL https://nuthatch-indexer.com/install.sh | sh