Blog
Field notes
Real deployments and the scar tissue from them - what it's actually like to run your own indexer in production.
-
A nest in your browser
Burrmill, nuthatch's query engine, now runs as WebAssembly in a browser tab. It answers SQL over a live nest's published segments, checks every byte against its content address, and needs no server for the query. What it does today, what it measured, and what it is not yet.
-
A payment processor asked for a deposit watcher. It shipped the same day
Nuthatch 5.4.0 reads each block once for a whole set of custody addresses, a million of them as cheaply as one, and streams every deposit as a numbered feed with retractions when a reorg takes one back. How it was built in a day, what it was checked against, the fault a user's link found the next morning, and what it does not do yet.
-
The robin keeps the books, the nuthatch keeps the cache
rotki's mascot is a robin on an abacus and nuthatch is named after a bird that hides food and comes back for it. Why the two fit, what has been measured so far, and what is not done yet.
-
I had never opened rotki. Now it reads my history from my own wallet
One afternoon from not knowing what rotki was to rotki reading a wallet's full history from a local nuthatch nest, with no block explorer asked. Including the two defects my own wallet found, and what still leaves the machine.
-
Why I built Nuthatch
Seven years of making blockchains answer the questions applications ask, and why the answer for a small team should be one binary on its own box rather than another account on someone else's meter.
-
One engine
Six days after we said Burrmill would replace DuckDB only after a release cycle of shadow traffic, every nuthatch nest we run is on Burrmill and 4.1.0 ships with no DuckDB in it. This is the retrospective: what the migration cost, what it found in our own code, where Burrmill is still worse, and what comes next.
-
Nuthatch 4.0: the major version that changes nothing
Nuthatch 4.0.0 is 3.13.3 plus three small fixes. The number is a promise about what later releases will not do to you: what it covers, what it leaves out, and how much of it a test enforces.
-
Switching the SQL engine under a live indexer
Five days ago we said Burrmill would replace DuckDB only after a release cycle of shadow traffic with no unexplained difference. We did not wait for that. Four nests were served by Burrmill by the evening of 1 October, judged against the live subgraphs and not against DuckDB. This is the operator's log of the switch, written as it happens, with the regressions listed before anyone finds them.
-
Replacing DuckDB, after all
Four weeks ago we wrote that DuckDB stays. We are reversing that: nuthatch will move its SQL surface to Burrmill, a Rust engine we built on DataFusion, once it has run beside DuckDB on live nests for a release without a single unexplained difference. Here is what changed, the numbers, where Burrmill still loses, and how the swap will be done on the ten nests already in production.
-
Hosted nests: the same binary, run by us
Retired: platform.nuthatch-indexer.com runs the stock nuthatch binary for people who would rather not. Sign in with GitHub or a wallet, point it at a repo or paste an ABI, and get a SQL endpoint with CORS open. Here is how to use it, what it costs, and what it does not do yet.
-
Your Uniswap V4 subgraph for Robinhood Chain will not deploy to Studio. It will index with nuthatch.
A builder brought us a Uniswap V4 subgraph for Robinhood Chain that built, uploaded, and then failed at the last step with 'network not supported by registrar'. Studio does not index Robinhood Chain yet. Nuthatch has since 3.4. We took the same manifest, pointed it at Robinhood's real V4 contracts, and indexed 52,393 swaps in five minutes on a free endpoint. This is what the error means, what we ran, and what you do and do not get.
-
We tried to drop-in replace a dead subgraph. We could not. Here is what we built instead, and why we stopped.
A subgraph stops, nobody fixes it, and your app goes dark. We spent three weeks trying to make a nest answer the same GraphQL so you could change a URL and carry on. It does not work, for a reason worth understanding. This is what we measured, what we built anyway, what it is genuinely good for, and why we are parking the rest.
-
The hackathon indexer is the one without a quota
A builder at ETHOnline was rate-limited off Subgraph Studio in under an hour. The arithmetic behind that, what a local nest costs to run instead, and the places where the subgraph still wins.
-
We will host your hackathon nest. Free, the same day.
Retired: a standing offer to anyone building on a testnet against a deadline, and what it looked like this morning: four unverified contracts on Arc Testnet, two nests on our box, and a builder who was being rate-limited over thirty events.
-
Monad is built in. Here is what that means, and the first nest on it.
Nuthatch now indexes Monad out of the box: one binary, one command, and a chain that does a block every 300 milliseconds becomes SQL tables on your own machine. The first real nest on it covers Perpl, the exchange that is seventy percent of Monad's traffic and had no public index until now.
-
Keeping DuckDB
We spent August asking whether Nuthatch could drop DuckDB, and every C++ dependency with it, without sacrificing anything. The answer is no - and two of our own published benchmarks turned out to be wrong in DuckDB's disfavour.
-
Nuthatch 3.0: make the answer arrive with the block
Nuthatch 3.0 makes authored incremental entities stable: a nest can maintain a bounded keyed relation as blocks arrive, instead of re-running one expensive aggregate for every reader.
-
Where Nuthatch uses WebAssembly, and where it refuses to
An indexer with a WASM runtime usually means mappings. Nuthatch runs none. WebAssembly is used here for exactly one thing - a capability boundary you can read off a component's type - and one component actually ships inside the binary.
-
We said nuthatch would never call a contract. It does now.
Over 70% of subgraphs use eth_call, and the rest of them read IPFS. nuthatch 2.6.0 does both, without giving up the determinism that was the reason for refusing in the first place.
-
No subgraph? No problem
When a subgraph is down, the data does not have to disappear. A Nuthatch nest can preserve the on-chain part of the path as a self-hosted SQL fallback.
-
Why a Nuthatch nest has two identities
A Nuthatch nest is an immutable package, but an edit should not automatically mean a full re-index. Here is how NIDs, data identity, adoption, and shared segments fit together.
-
Nuthatch is now a Graph Horizon data service
A reproducible Nuthatch nest now has a paid, TAP-gated route on Arbitrum One. Here is the NID, the gateway, the first real settlement, and the parts we have deliberately not pretended are finished.
-
The Graph put Nuthatch in their hackathon bounty
ETHGlobal Lisbon's $7,000 Best AI Tooling track names Nuthatch as an accepted data backend, alongside Subgraph Studio. What it means, and a field guide for anyone building on the bird this weekend.
-
Upgrading a live indexer, three versions in one go
The nuthatch behind Lodestar's dashboard had been on 0.3.0 since it shipped. We bumped it to 0.6.0 while it was serving real traffic - three minor versions in one swap. This is the operator's log, and the good news is that it was an anticlimax.
-
No eth_calls in nuthatch: what you derive instead
Over 70% of subgraphs call eth_call to read contract state. nuthatch's data path makes none, on purpose, and gives you recipes that derive the same values from indexed events, byte-for-byte and free.
-
Index Uniswap V3 yourself: for free, in under an hour, without writing code
Self-host a full Uniswap V3 index, every pool, every swap, prices and volume, with one Rust binary, one config file, and SQL. No graph-node, no gateway, no query fees.
-
We put a live dashboard on our own indexer. Here's the box.
Nuthatch stopped being a demo today. A real public dashboard - Lodestar - now serves two of its panels from a single nuthatch binary running on one small VPS of ours. This is the operator's log: the nests, the backfill, the box, the 86 MB, and the runtime deadlock we had to root-cause to get there.