š¬ The short version
camp-node v0.5.1 vs amp v0.0.36, same box, same RPC, numbers written down: ~16% faster backfill, ~23% fewer CPU-seconds, three query protocols to ampās one, and a source tree you can actually read. amp still leads on verifiability. Weāre not going to pretend otherwise.
Iām going to make a claim in the title that sounds like marketing, and then Iām going to spend the rest of the post trying very hard to talk myself out of it. Thatās the deal. If a benchmark canāt survive its own author playing devilās advocate, it isnāt a benchmark; itās a press release with a graph stapled to the front.
So letās do this properly.
What we actually compared
Thereās a wrinkle that everyone writing āX vs ampā quietly skips over, so let me put it front and centre: there is only one amp binary you can actually obtain.
Itās v0.0.36, the public build on ghcr.io/edgeandnode/amp:latest, dated 5 May 2026. Anything newer lives behind the private edgeandnode/amp repo. The GitHub releases API 404s if you ask anonymously, and ampup install wants a token you havenāt got. So when someone tells you about āAmp current,ā theyāre describing the docs, not the artefact. Nobody outside the walled garden has run it.
That gives us three columns, and I want to be honest about how much each one is worth:
| Column | What it is | How much to trust it |
|---|---|---|
| camp-node v0.5.1 | Read straight from the repo, and run on this box. | High: source and observed. |
| amp v0.0.36 | Black-box observation of the public binary + ampctl. No decompilation. | Medium-high: what it exposes, not how it works. |
| amp ācurrentā | The public docs describing the private build. Not observed by me. | Low: documentation, possibly omitting gated bits. |
The only fully defensible comparison is camp-node v0.5.1 vs amp v0.0.36, two things sitting on the same machine, both pokeable. Everything I say about āamp currentā is a best-effort appendix with an asterisk the size of a barn door. Iād rather tell you that than have you find out later and assume I was hiding it.
The headline, told straight
Hereās the claim that survives me arguing with it:
camp-node is ahead of the amp it forked on openness, Postgres compatibility, keyless instrumented data, and efficiency defaults, while amp leads on verifiability and hosted-product polish, and exposes a few more source kinds.
That is not ācamp beats amp at everything.ā camp is a fork of ampās December-2025 line, so it inherited the good engine: DataFusion, Parquet, Arrow Flight, the EVM UDFs, reorg handling, the lot. You donāt get to claim credit for the parts you were handed. What camp added on top is where the argument lives, and what itās missing is where the honesty lives.
Let me walk through both.
Where camp wins
It speaks three protocols. amp v0.0.36 speaks one.
This is the cleanest lead on the board, and itās not close.
| Interface | camp-node v0.5.1 | amp v0.0.36 |
|---|---|---|
| Arrow Flight (gRPC) | ā | ā |
| JSON Lines over HTTP | ā | ā dropped in v0.0.36 |
| Postgres wire | ā
read-only (--pg-server) | ā |
| Streaming SQL | ā | ā |
amp v0.0.36 serves Flight and only Flight. The JSONL server is gone. No --jsonl-server flag, it was dropped in that release. camp serves Flight, JSONL, and a read-only Postgres wire protocol, which means you can point psql, Grafana, Metabase, or any boring BI tool thatās existed since 2005 straight at your indexed chain data. No bespoke SDK, no gRPC client, no Arrow ceremony. Just SELECT.
The honest footnote: this means a fair query benchmark can only race them on Flight, because itās the one language they both speak. On Flight theyāre at parity, with the same DataFusion underneath. campās edge here is capability, not raw speed: it answers questions on two protocols amp v0.0.36 simply canāt hear.
Keyless, free, instrumented data
amp can produce full-instrumentation data (internal traces, storage and balance changes, the works), but it gets there via Firehose, which means youāre standing up an endpoint or paying for one.
camp added a pinax source: it pulls that same instrumented data from Pinaxās free public bucket, with no API key and no self-run Firehose. The differentiator isnāt ātraces at allā; both can do traces. Itās the access path. campās is keyless and free; ampās needs infrastructure.
Efficiency, on by default
| camp-node v0.5.1 | amp v0.0.36 | |
|---|---|---|
| Bloom filters | ā default-on (equality cols) | ā |
| Compactor + collector | ā default-on | ā ships off |
| Object store | ā S3 / GCS / Azure / R2 | ā S3 / GCS / Azure |
| Selectable mimalloc / jemalloc | ā (+ benchmark) | ā snmalloc |
The fair caveat: amp could flip Bloom filters and compaction on too. Theyāre not magic camp invented. But they ship off in v0.0.36, and defaults are policy: the out-of-the-box experience is what most operators actually run. campās prod file-count problem (small Parquet files piling up and degrading query planning) was fixed precisely by making compaction default-on, and thatās an operationally real win even if it doesnāt show up in a five-minute backfill.
Source you can build and read
amp is a closed binary. camp is public, BUSL-lineage source you can clone, build, audit, and fork. Thatās not a performance metric. Itās the whole point, and Iāll come back to it.
Where amp wins, yes, really
If I only listed campās wins youād be right to distrust the whole document. So:
- Verifiability and attestation. ampās positioning is built around verifiable, attestable data. camp has none of that. I grepped the tree; there are zero attestation UDFs. This is a genuine amp lead and itās central to their story. camp doesnāt tell that story at all yet.
- More source kinds, today. amp v0.0.36ās CLI exposes
bitcoin-rpc,solana, andtemposources that camp doesnāt wire up. (camp has asolanacrate but hasnāt plumbed it intomanifest generateyet.) camp leads on a CLI-wiredfirehose/eth-beaconand the keylesspinaxsource, so each exposes kinds the other doesnāt. Itās a trade, not a sweep. - A productized hosted ecosystem. Studio, a catalog, SDKs, gateway auth: amp has the polished commercial surface. camp has the Lodestar Dashboard and
engine.camp, which is free and needs no key, but Iām not going to pretend itās a funded product org.
So: a trade, not a clean sweep. camp leads on openness, Postgres-wire, keyless data, and efficiency defaults. amp leads on verifiability and hosted polish. The core ETL surface is parity, because camp inherited it.
The numbers
Setup, identical for both: a from-empty backfill of the same 5,000-block Arbitrum One window (from block 471,200,000, finalized), through the same RPC endpoint at the same batch size and concurrency, into a throwaway Postgres and a fresh /tmp data dir, both pinned to CPU cores 0ā7, compaction on for both. Runs were interleaved (camp, amp, camp, amp) so they share network weather. n=3, median reported.
| Metric | camp-node v0.5.1 | amp v0.0.36 | camp delta |
|---|---|---|---|
| Backfill wall-clock | 44.2 s | 51.2 s | ~16% faster |
| Backfill throughput | 113 blkĀ·sā»Ā¹ | 98 blkĀ·sā»Ā¹ | ~16% higher |
| Peak RSS | 150 MB | 157 MB | ~4% lower |
| CPU-seconds | 2.0 s | 2.6 s | ~23% lower |
| On-disk bytes/block | 1931 | 1990 | ~3% smaller |
| Parquet files (compaction on for both) | 3 | 3 | parity, both compact |
Per-run throughput spread: camp 113.2 / 115.8 / 110.7 (tight). amp 97.7 / 99.6 / 81.7. That amp run-3 dip to 81.7 is RPC-provider variance, not an indexer regression, which is exactly why you report this axis with its dispersion and treat it as RPC-bound rather than quietly using the worst amp run to flatter camp. Iām telling you about the 81.7 because itās the number a dishonest benchmark would bury.
What the numbers actually mean
The temptation is to read ā~16% fasterā as ācampās engine is 16% better.ā It isnāt, and hereās why I wonāt let you believe that:
- Backfill speed is RPC-bound. Both spend nearly all their wall-clock waiting on the same RPC, with the same
evm-rpcclient lineage (camp forked ampās). The result is dominated by the provider, not the indexer. campās edge is small and comes from newer deps and better write/compaction overlap, not a fundamentally faster fetch. This is parity-by-inheritance, not a moat. The real backfill lever is a HyperSync extractor that bypasses per-block RPC entirely, and that isnāt built yet. - Bytes/block is near-identical by construction. Same schema, same Parquet writer, same
zstd(1). The interesting bit is that campās default-on Bloom filters add a few KB per file and bytes/block still comes out roughly equal, i.e. the index overhead is negligible. - File count is a defaults story, not a result from this run. With compaction enabled for both, camp and amp v0.0.36 each settled to exactly 3 files. ampās compactor works when itās on, so this backfill shows no file-count difference. The real distinction is the default: camp ships compactor+collector on, amp ships them off. That matters for a long-running tip-following deployment, where each poll writes a small file and they pile up without default-on compaction (exactly campās old prod file-count problem), but a one-shot bulk backfill writes few files regardless, so it doesnāt exercise that difference. Iām not going to claim a file-count win from a benchmark that didnāt show one.
Read this before you quote a single number
- Shared dev box. These ran on the same machine as the live
engine.campfork and the upstream binary, not a quiet dedicated box. Treat the figures as indicative, not publication-grade. The dedicated-box, nā„5, cold/warm, RPC-counting run is the publishable version, and itās still on the to-do list. - amp v0.0.36 ā āamp current.ā v0.0.36 is the latest public build. Newer private builds may differ. Pin and date-stamp every comparison.
- No claims about amp internals. Closed binary, not decompiled. Only what it exposes.
- Reproduce it yourself. The exact commands live in
bench/REPRODUCE.md. Donāt take my word for any of this; thatās rather the entire point.
The part that actually matters
Strip away the tables and hereās whatās left.
camp is open source. You can read every line of how it fetches a block, writes a Parquet file, and answers a query. When I claim itās 16% faster, you donāt have to trust me. You can clone it, build it, run bench/REPRODUCE.md, and check. amp is a binary behind a token behind a private repo. The most important āfeatureā in this entire comparison isnāt on any of the tables: itās that you can verify campās side and you canāt verify ampās.
And camp isnāt a product roadmap steered by a quarterly planning committee or gated behind some governance process you need a lawyer to parse. Itās built in the open, it invites collaboration, and the door is unlocked. If you want a bitcoin-rpc source, or to wire up the solana crate thatās already sitting in the tree, or to build the HyperSync extractor that would actually move the backfill needle, you can open the code and do it. No permission, no token, no waiting for someone elseās priorities to align with yours. Thatās not a slogan. Itās just what open source is, and itās the thing The Graph was supposed to stand for before ādecentralizedā quietly came to mean ādecentralized, terms and conditions apply.ā
So, is camp better than amp?
On openness, query protocols, keyless data, and efficiency defaults: yes, demonstrably, with the numbers written down and the source open for you to check. On verifiability and hosted polish: not yet, and Iām not going to lie to you about it. The core engine: parity, because camp stood on ampās shoulders and never claimed otherwise.
The title says we proved camp is better. We proved the specific, defensible version of that claim, and showed our working, including the bits that donāt flatter us. If you want the marketing version where camp wins every row, youāll have to find a less honest author.
Everythingās reproducible. The codeās open. Come build the rest of it with us.
camp-node is open source. The benchmark harness, exact commands, and raw numbers are in the repo under bench/. Want to help close the gaps (Solana wiring, a HyperSync extractor, the dedicated-box benchmark run)? The doorās open. Come find us in The Nightās Watch.