Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
167 commits
Select commit Hold shift + click to select a range
edbcbb2
feat(staging): add 4 production-ready benchmarks to dev only (PR F) (…
Flotapponnier Jun 26, 2026
80690eb
feat(logos): add binance.svg (was using bnb.png from chain registry)
Flotapponnier Jun 26, 2026
fe6f261
feat(perp-funding-stability): scale to 15 venues + add 8 logos (bench…
Flotapponnier Jun 26, 2026
2bdcd57
fix(perp-funding-stability): trim methodology[3] under 500 chars
Flotapponnier Jun 26, 2026
ae6a26e
fix(types): re-add venue dimension to BenchmarkFilters + spec schema
Flotapponnier Jun 26, 2026
d9d0b78
Merge pull request #742 from ChainBench/feat/binance-logo
Flotapponnier Jun 26, 2026
6d49897
fix(logos): coinbase + kucoin colored PNG (was monochrome SVG, invisi…
Flotapponnier Jun 26, 2026
8f1c9ad
Merge pull request #751 from ChainBench/fix/coinbase-kucoin-logos-col…
Flotapponnier Jun 26, 2026
5cdf646
fix(main): restore src/lib/categories.ts + binance.svg mapping (#752)
Flotapponnier Jun 26, 2026
1028641
fix(seo): blacklist hex builder + shared composite filter (#747)
Flotapponnier Jun 26, 2026
a72680b
fix(seo): drop dead /alternatives + jupiter-vs-raydium compare (#749)
Flotapponnier Jun 26, 2026
549de50
Merge remote-tracking branch 'origin/main' into chore/sync-main-into-dev
Jun 26, 2026
b36b457
fix(press-kit): shrink logo + banner PNGs (-2.2MB, 61% off) (#762)
Flotapponnier Jun 26, 2026
f2df4f8
Merge pull request #761 from ChainBench/chore/sync-main-into-dev
Flotapponnier Jun 26, 2026
d70b43a
fix(seo): 404 compare pages with hex builder slugs + add curated pair…
Flotapponnier Jun 26, 2026
35e2aee
feat(restore): bring back solana-tx-landing-latency (#027) + answer p…
Flotapponnier Jun 27, 2026
afdb991
fix(spec): dedupe results after legacy chain slug rewrite
Flotapponnier Jun 27, 2026
a3fcafa
Merge pull request #767 from ChainBench/fix/dedupe-aliased-chain-results
Flotapponnier Jun 27, 2026
62295ac
feat(ledger): clickable column headers to sort leaderboard
Flotapponnier Jun 28, 2026
f9a5dff
Merge pull request #770 from ChainBench/feat/ledger-sortable-columns
Flotapponnier Jun 28, 2026
5221ec0
feat(hl-frontends): long-window archive UI toggle + history API
Flotapponnier Jun 28, 2026
3f1bbf4
Merge pull request #774 from ChainBench/feat/hl-archive-ui-toggle
Flotapponnier Jun 28, 2026
dbe1987
Merge remote-tracking branch 'origin/main' into chore/sync-main-into-…
Jun 28, 2026
5119a28
Merge pull request #776 from ChainBench/chore/sync-main-into-dev-hl-f…
Flotapponnier Jun 28, 2026
01f6805
fix(perf): strip 7d/30d series from cached Benchmark, lazy-fetch on t…
Flotapponnier Jun 29, 2026
163506f
perf(chart): pre-fetch 7d/30d series on mount + add app-cache for /ap…
Flotapponnier Jun 29, 2026
021c021
feat(hl-archive): read directly from Railway service (skip Upstash)
Flotapponnier Jun 29, 2026
8c1171b
Merge pull request #783 from ChainBench/feat/hl-archive-direct-railway
Flotapponnier Jun 29, 2026
820f5af
chore: trigger staging redeploy to pick up HL_ARCHIVE_API_URL+KEY env…
Flotapponnier Jun 30, 2026
486397f
feat(hyperliquid-frontends): unify chart + leaderboard window selector
Flotapponnier Jun 30, 2026
737f0e2
Merge pull request #786 from ChainBench/feat/hyperliquid-unified-window
Flotapponnier Jun 30, 2026
f95e0b5
fix(polymarket-resolution-delay): convert query output to ms for fmtUnit
Flotapponnier Jun 30, 2026
9695f9c
Merge pull request #787 from ChainBench/fix/polymarket-resolution-dis…
Flotapponnier Jun 30, 2026
ad58103
fix: filter region tabs to regions with actual data (#790)
Flotapponnier Jun 30, 2026
52ecf00
chore: trigger vercel rebuild after HL_ARCHIVE_API_URL switch to VPS …
Flotapponnier Jun 30, 2026
7fea1d4
chore: trigger vercel staging redeploy after preview env var add
Flotapponnier Jun 30, 2026
29a7714
chore: trigger vercel staging redeploy after preview env var add
Flotapponnier Jun 30, 2026
49eaaae
fix(logos): swap binance to colored PNG (simpleicons SVG was invisibl…
Flotapponnier Jun 30, 2026
c89d8dc
Merge pull request #793 from ChainBench/fix/binance-logo-colored-png
Flotapponnier Jun 30, 2026
807d515
fix: retry lazy 7d/30d fetch instead of caching empty {} forever
Jun 30, 2026
3d97730
Merge pull request #794 from ChainBench/fix/lazy-series-retry
Flotapponnier Jun 30, 2026
4aa4582
fix(api/series): read 7d/30d from worker blob before live Prom fan-ou…
Flotapponnier Jun 30, 2026
066d7b3
feat(spec): blob-only Vercel render path (#799)
Flotapponnier Jun 30, 2026
fcc9ba4
feat: move cohort/featured writers from Vercel crons into the worker …
Flotapponnier Jun 30, 2026
3f32ef4
fix(worker): use uncached buildFeaturedLeadersFromStore for the searc…
Flotapponnier Jun 30, 2026
b3337ae
chore: trigger staging redeploy after KV env vars updated
Jul 1, 2026
9cbd17f
chore: trigger staging redeploy after cleaning empty envs
Jul 1, 2026
5670f43
chore(live): point relay to stream.openchainbench.com
Jul 1, 2026
2178ed6
fix(seo): shorten titles to <=60 chars for SERP display (#806)
Flotapponnier Jul 1, 2026
b51a764
Merge pull request #805 from ChainBench/feat/stream-relay-vps
Flotapponnier Jul 1, 2026
5f8a8c8
fix(csp): allow wss://stream.openchainbench.com in connect-src
Jul 1, 2026
31fcc4b
Merge pull request #808 from ChainBench/fix/csp-stream-relay
Flotapponnier Jul 1, 2026
80cfd0d
fix(compare): force-dynamic to bypass static→dynamic bail on ad-hoc p…
Flotapponnier Jul 1, 2026
934b8e2
fix(seo): cap meta descriptions <=155 chars for SERP snippet (#812)
Flotapponnier Jul 1, 2026
b22d704
fix(seo): add og:image + twitter:image to /answers pages (#813)
Flotapponnier Jul 1, 2026
7c35a8a
perf(compare): restore ISR on ad-hoc pairs (fix slow TTFB) (#815)
Flotapponnier Jul 1, 2026
c7ff959
feat(sitemap): emit ad-hoc compare pairs + category hubs (#817)
Flotapponnier Jul 1, 2026
de0f7f0
fix(seo): drop invalid rich-result schemas (SoftwareApplication, Coll…
Flotapponnier Jul 1, 2026
be98ae5
fix(seo): shorten product titles + strip markdown from meta desc + re…
Flotapponnier Jul 1, 2026
9a64883
feat(seo): contextual compare links on bench pages (#823)
Flotapponnier Jul 1, 2026
0286152
fix(token-deployment-cost): remove EVM chains with placeholder byteco…
Flotapponnier Jul 2, 2026
01e86ee
fix(network-fees): remove 6 chains with buggy fee calculation (#827)
Flotapponnier Jul 2, 2026
572b096
fix(ledger): use metric label + single Value column for non-latency b…
Jul 2, 2026
8181207
Merge pull request #829 from ChainBench/fix/non-latency-ledger-columns
Flotapponnier Jul 2, 2026
4ba5203
feat(hub): migrate /prediction-markets and /chains KPIs to KV blobs (…
Flotapponnier Jul 2, 2026
ab27b21
feat(hl-history): 12-month rolling fees + volume chart on /hyperliqui…
Flotapponnier Jul 2, 2026
5e7c76b
feat(hl-history): compact format + all frontends (98) in single blob …
Flotapponnier Jul 2, 2026
ce4144f
feat(hl-history): switch Y axis to log scale for 12-month readability…
Flotapponnier Jul 2, 2026
17b4a36
feat(hl-history): sparkline grid + per-frontend detail pages (#839)
Flotapponnier Jul 2, 2026
6b5ed53
feat(hl-history): move sparklines into leaderboard, redirect /product…
Flotapponnier Jul 2, 2026
762a42b
feat(hl-frontend): restore rich dashboard on /hyperliquid/[slug]
Jul 2, 2026
196632b
Merge pull request #843 from ChainBench/feat/hl-frontend-full-dashboard
Flotapponnier Jul 2, 2026
d8b0350
feat(hl-builder-stats): migrate to KV blob snapshot per builder (#845)
Flotapponnier Jul 2, 2026
7985e8e
fix(hl-frontend): remove 12-month evolution section (#847)
Flotapponnier Jul 2, 2026
e3c353a
feat(hl-perf-chart): add 30d/90d/1y range picker with DuckDB backfill
Jul 2, 2026
4eb7bc1
Merge pull request #850 from ChainBench/feat/hl-perf-chart-multi-range
Flotapponnier Jul 2, 2026
1a10462
fix(hl-perf-chart): hide users line/legend/stat when no daily unique …
Flotapponnier Jul 2, 2026
9307560
hl-archive: expose unique users on TimePoint and WindowAgg
Jul 2, 2026
3c9e38c
Merge pull request #854 from ChainBench/feat/hl-archive-users-field
Flotapponnier Jul 2, 2026
c165b40
perp-benches: sync YAML cohorts with live Prom scrapes (#857)
Flotapponnier Jul 3, 2026
2deea70
feat(perp-oi): add gains.trade to bench cohort
Jul 3, 2026
ef596d3
Merge pull request #860 from ChainBench/feat/perp-oi-add-gains
Flotapponnier Jul 3, 2026
5353d08
chore: switch contact email to contact@openchainbench.com (#862)
Flotapponnier Jul 3, 2026
725366d
feat(rpc): promote per-chain RPC pages to first-class benches (044-05…
Flotapponnier Jul 3, 2026
1d2039c
fix(spec): shorten gains formula to 240 chars (worker was skipping th…
Flotapponnier Jul 3, 2026
2f1d521
bump catalog cache keys for rpc per-chain cluster (#868)
Flotapponnier Jul 3, 2026
5fcd5ee
feat(bench-054): perp-execution-quality live $BOT slippage on Lighter…
Flotapponnier Jul 3, 2026
9dd91cd
rpc harness: add 12 long-tail chains (sonic, gnosis, celo, blast, tai…
Flotapponnier Jul 3, 2026
beb2e29
add /rpc cross-chain hub: cohort snapshot writer, chain matrix + prov…
Flotapponnier Jul 3, 2026
246d569
Port 7 bench harnesses from monorepo + sync token-deployment-cost (#877)
Flotapponnier Jul 3, 2026
2795b1e
fix(hyperliquid-xyz): alias to hyperliquid logo + redirect product page
Jul 3, 2026
06d2179
Merge pull request #880 from ChainBench/fix/hyperliquid-xyz-alias
Flotapponnier Jul 3, 2026
15722cd
head-lag harness: port ops extras (grafana/prometheus/alertmanager co…
Flotapponnier Jul 3, 2026
791ae1f
harnesses: add missing .env.example templates (#882)
Flotapponnier Jul 3, 2026
2e565b2
fix(perp-execution-quality): rename hyperliquid-xyz to hyperliquid
Jul 3, 2026
a91974b
Merge pull request #883 from ChainBench/fix/hyperliquid-xyz-cleanup
Flotapponnier Jul 3, 2026
7c2c2b0
rpc hub: clarify best-overall column label (3-region avg) (#884)
Flotapponnier Jul 3, 2026
3272952
port monitoring stack, admin UIs and bridge-monitor monitor/deploy fr…
Flotapponnier Jul 3, 2026
e81cc97
harnesses: last missing .env.example templates (#889)
Flotapponnier Jul 3, 2026
95af2c0
rpc harness: record latency only on fresh valid responses (#891)
Flotapponnier Jul 3, 2026
30803de
keep unresponsive cohort providers visible as unranked ledger rows (#…
Flotapponnier Jul 3, 2026
a6e8aa5
exclude infrastructure and harnesses sub-apps from site tsconfig (#894)
Flotapponnier Jul 3, 2026
bb582b3
add sortable Errors (24h) column to ledger table (#896)
Flotapponnier Jul 3, 2026
ba6d9cb
indexnow: diff-based hourly submissions instead of daily full batch (…
Flotapponnier Jul 3, 2026
e1327ec
add 12 long-tail per-chain RPC benches (055-066) (#900)
Flotapponnier Jul 3, 2026
e537e54
logos: add 6 long-tail chain marks (gnosis, moonbeam, unichain, crono…
Flotapponnier Jul 4, 2026
c2c8b14
rpc hub: reliability columns, chain logo headers, per-chain RPC table…
Flotapponnier Jul 4, 2026
26c9db4
fix(spec): memoize spec file reads to stop EMFILE collapse of the cat…
Flotapponnier Jul 4, 2026
8327439
seo: purge thin compare pages + benchmark-first title on products & c…
Flotapponnier Jul 5, 2026
5ec474c
fix(sitemap): drop /chains/<slug> entries with 0 benches (unblocks pr…
Flotapponnier Jul 5, 2026
44b3e84
fix(chains): recognize per-chain bench slug convention {chain}-rpc (#…
Flotapponnier Jul 5, 2026
2324d87
seo(sitemap): per-URL <lastmod> on /compare/[slug] + /benchmarks/cate…
Flotapponnier Jul 5, 2026
97b7eb2
seo(p0): H1 benchmark on products + FAQPage on compare + RSS in head …
Flotapponnier Jul 6, 2026
df722d2
fix(seo): emit rss <link> in <head> JSX directly (#918)
Flotapponnier Jul 6, 2026
1fb251a
fix(gecko): replace dead WBNB/BUSD pool with active USDT/WBNB v3 (#920)
Flotapponnier Jul 6, 2026
a56e2f4
alert: silence non-Mobula head_lag stale alerts (#922)
Flotapponnier Jul 6, 2026
fc2a783
add portfolio-chain-coverage harness (bench: portfolio API chain cove…
Flotapponnier Jul 6, 2026
9866552
pcc harness: honest User-Agent (Zerion WAF throttles Go default UA) (…
Flotapponnier Jul 6, 2026
ff26c43
Portfolio harness: Zerion burst-throttle workaround (#926)
Flotapponnier Jul 6, 2026
3702d8d
add bench 067 portfolio-chain-coverage spec, bump bench-set cache key…
Flotapponnier Jul 6, 2026
5a12074
mcp: one-click install buttons for Cursor + VS Code Copilot (#928)
Flotapponnier Jul 6, 2026
b4f230b
pcc: Dune + Moralis in the portfolio coverage cohort, Zerion product …
Flotapponnier Jul 6, 2026
4892e69
pcc: Moralis per-chain net-worth + native balance fallback (whale wal…
Flotapponnier Jul 6, 2026
439aca1
fix: spec 067 formulas over 240-char Zod cap (spec silently skipped, …
Flotapponnier Jul 6, 2026
27c8cfb
pcc: 'wallet' keyword in bench title, drop Dune (Sim sunsets Aug 1) (…
Flotapponnier Jul 6, 2026
580cd19
pcc: shared non-EVM probe set (~63 chains) + call counter + sweep spa…
Flotapponnier Jul 6, 2026
831aa36
pcc: refresh spec prose to first-full-sweep numbers (94/27/17) (#935)
Flotapponnier Jul 6, 2026
302c747
pcc: probed metric + 42 more funded addresses (105-chain probe set) (…
Flotapponnier Jul 6, 2026
5c1a5c1
pcc: Acala probe via ss58 treasury (accepted format), audit note refr…
Flotapponnier Jul 6, 2026
e3e6efa
pcc: Zerion gets the full EVM probe set (was 1 wallet), Moralis funde…
Flotapponnier Jul 6, 2026
1f1d8d7
pcc: quota/auth failures never publish zeros (406 credit-limit wiped …
Flotapponnier Jul 6, 2026
f18b8ea
pcc: wrap gauge queries in last_over_time[48h] (daily-cadence resilie…
Flotapponnier Jul 6, 2026
9d8055e
pcc: probed intersects each vendor's own catalog (no debits for uncla…
Flotapponnier Jul 6, 2026
9e0f4ce
pcc: funded probes for 32 Mobula/Zerion catalog exotics (Astar, Confl…
Flotapponnier Jul 6, 2026
7a17b26
pcc: Mobula probes use explicit blockchains= targeting (fetchAllChain…
Flotapponnier Jul 6, 2026
ff7af1f
pcc: mobula formula under the 240-char Zod cap (spec was silently ski…
Flotapponnier Jul 6, 2026
e144b65
pcc: zerion 45s client, drop plan-gated monad candidate, invocation-p…
Flotapponnier Jul 7, 2026
8f6045c
pcc: quota-truncated cycles publish nothing (partial 406 sweep clobbe…
Flotapponnier Jul 7, 2026
ad24fe3
pcc: probed misses counted as deduped chains, not wallets (zerion pro…
Flotapponnier Jul 7, 2026
d101889
pcc: SKIP_INITIAL_CYCLE guard (deploy storms burned a month of credit…
Flotapponnier Jul 7, 2026
70b9f81
pcc: CoinStats budget mode (9-day long-tail sweep + 2-call pulses, fi…
Flotapponnier Jul 7, 2026
f3b92e3
agg-latency: ws reconnect metrics + 10s post-reco grace on alert gaug…
Flotapponnier Jul 7, 2026
dbb76d3
rpc: anti-cache probe (eth_getBlockByNumber latest, rotating id) (#951)
Flotapponnier Jul 7, 2026
1e74cd7
add bench 068 explorer-chain-coverage: registered vs fresh-indexed + …
Flotapponnier Jul 7, 2026
63bd83a
fix: add Explorers to the Benchmark category type union (staging buil…
Flotapponnier Jul 7, 2026
dc18d64
ecc: official logos (routescan/blockchair/subscan/oklink + blockscout…
Flotapponnier Jul 7, 2026
be475e1
ecc: drop Subscan from the cohort (no self-serve signup in practice) …
Flotapponnier Jul 7, 2026
1cd2e03
ecc: drop OKLink (signup impractical, cohort rule = free reproducible…
Flotapponnier Jul 7, 2026
79c7871
ecc: validity fixes — freshness ladder 60m/5m, quiet-chain second cha…
Flotapponnier Jul 7, 2026
7474308
rpc-keyed-latency: signup-gated free-tier RPC latency harness (#958)
Flotapponnier Jul 7, 2026
ace9619
ci: vercel deploy --archive=tgz (upload quota exhausted twice on busy…
Flotapponnier Jul 7, 2026
bd8c8a6
bench 069: rpc-keyed-latency draft -> live (worker only publishes liv…
Flotapponnier Jul 7, 2026
cdc5f63
providers: infura + ankr + chainstack registry entries and logos (key…
Flotapponnier Jul 7, 2026
54dafb3
keyed bench: add QuickNode (BNB + Optimism, shared-fleet plan disclos…
Flotapponnier Jul 7, 2026
582c9c0
fix: duplicate quicknode logo-manifest key (svg already existed) (#963)
Flotapponnier Jul 7, 2026
0a63b53
keyed bench: chainstack full coverage (6 EVM + Solana Global Nodes, p…
Flotapponnier Jul 7, 2026
f7d0d77
keyed harness: redact endpoint URLs (embed API keys) from error logs …
Flotapponnier Jul 7, 2026
de28fe3
keyed bench: extend plan disclosure to Alchemy (paid org, same shared…
Flotapponnier Jul 7, 2026
d9c5ffe
indexing-freshness harness (bench 070): organic tx -> wallet-API visi…
Flotapponnier Jul 7, 2026
cb3fc7b
providers: zerion + allium + goldrush registry entries and logos (ind…
Flotapponnier Jul 7, 2026
766c866
bench 070: indexing-freshness spec (organic wallet-API visibility lag…
Flotapponnier Jul 7, 2026
6499858
bench 070: add p99 queries (worker skips providers without p50/p90/p9…
Flotapponnier Jul 7, 2026
295672e
bench 070: unit s -> sec (chart treats unit s as ms input, rendered 0…
Flotapponnier Jul 7, 2026
1c64132
rpc: add Monad (5 providers) + MegaETH (4 providers), all endpoints l…
Flotapponnier Jul 7, 2026
1593310
benches 071-072: monad-rpc + megaeth-rpc pages, chains registry, prov…
Flotapponnier Jul 8, 2026
b79af44
fix: dedupe bloxroute keys (already registered for solana tx-landing)…
Flotapponnier Jul 8, 2026
bd57e97
monad-rpc: display name Monad Official -> Monad (product page title) …
Flotapponnier Jul 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
6 changes: 5 additions & 1 deletion .github/workflows/staging-deploy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -46,7 +46,11 @@ jobs:
- name: Deploy Preview
id: deploy
run: |
url=$(vercel deploy --prebuilt --token=${{ secrets.VERCEL_TOKEN }})
# --archive=tgz uploads ONE tarball instead of thousands of
# files: the team's api-upload-paid quota (40k reqs / rolling
# 24h) was exhausted twice on busy merge days (2026-07-06/07),
# blocking every deploy for hours.
url=$(vercel deploy --prebuilt --archive=tgz --token=${{ secrets.VERCEL_TOKEN }})
echo "url=$url" >> "$GITHUB_OUTPUT"
echo "Preview ready at $url"

Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -32,6 +32,7 @@ yarn-error.log*

# env files (can opt-in for committing if needed)
.env*
!.env.example

# vercel
.vercel
Expand All @@ -58,6 +59,8 @@ next-env.d.ts

# compiled harness binaries (go build artifacts)
harnesses/*/script
# hl-archive's script/ is a Go source package, not a binary
!harnesses/hl-archive/script/
harnesses/*/monitor
harnesses/*/cmd/script/script
harnesses/*/cmd/monitor/monitor
Expand Down
1 change: 1 addition & 0 deletions alternatives/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ status: live # optional, default live
| `bitquery` | Bitquery | network-coverage |
| `birdeye` | Birdeye | metadata-coverage (Solana only) |
| `relay` | Relay | bridge-quote-latency |
| `zerion` | Zerion | portfolio-chain-coverage |

## License

Expand Down
2 changes: 1 addition & 1 deletion alternatives/alchemy.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ benchmark: aggregator-head-lag
intro: |
Alchemy is an EVM-first node and API provider whose surface is shaped by its enhanced endpoints (`alchemy_getAssetTransfers`, NFT API, webhooks, getTokenBalances, the simulation and debug suite, the account-abstraction bundler) rather than by a raw RPC tuned for edge latency. Pricing is metered in compute units, which charges more for an enhanced call than for a plain `eth_call`, so the ceiling shows up first on teams streaming high-cardinality events into a backend rather than on dapp front-ends issuing single reads. Solana coverage exists but sits on a stack built around Ethereum and its L2s. Teams that need a live view of trades on Base, BNB Chain or Solana usually leave Alchemy at the point where the enhanced API list stops mapping to what the product actually reads from chain.

seo_title: Alchemy alternatives. live head-lag benchmark across data providers
seo_title: "Alchemy alternatives: live benchmark"
seo_description: Compare Alchemy alternatives on real-time data freshness. Live head-lag against a canonical archive node, refreshed every minute and published openly.
4 changes: 2 additions & 2 deletions alternatives/birdeye.yml
Original file line number Diff line number Diff line change
Expand Up @@ -8,5 +8,5 @@ chain: solana
intro: |
Birdeye is a Solana token analytics platform with a price + metadata API. If you need an alternative, one practical axis is metadata completeness. for a freshly-launched Solana token, how often does the API return a populated logo, description, twitter and website? Below is the live percentage for each provider on Solana, refreshed every minute against fresh-launch tokens detected from Mobula Pulse.

seo_title: Birdeye alternatives. live Solana metadata coverage benchmark
seo_description: Compare Birdeye alternatives on token metadata coverage for Solana. Logo, description, twitter and website availability for freshly-launched tokens, measured live.
seo_title: "Birdeye alternatives: live benchmark"
seo_description: "Birdeye alternatives on Solana token metadata coverage: logo, description, socials in seconds. Codex vs Mobula live."
2 changes: 1 addition & 1 deletion alternatives/bitquery.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ benchmark: network-coverage
intro: |
Bitquery is a GraphQL surface on top of indexed onchain data, with the schema as the actual product: queries declare exactly the fields needed across transfers, trades, DEX events and account state, and the indexer fans those out across chains. Pricing is point-based, with each field, filter and join consuming from a monthly point budget rather than from a flat request quota, which means a single dashboard with many panels can hit the ceiling well before request volume looks high. Chain coverage is broad but uneven in depth: some networks expose full DEX trade indexing, others only basic transfers. The team usually compared next is the one whose chain list either covers a long-tail network Bitquery does not, or covers the same network with a flatter pricing model that does not penalise wide GraphQL fragments on a per-field basis.

seo_title: Bitquery alternatives. live network coverage benchmark
seo_title: "Bitquery alternatives: live benchmark"
seo_description: Compare Bitquery alternatives on the number of blockchains each major onchain data provider officially supports. Live data, refreshed every six hours.
4 changes: 2 additions & 2 deletions alternatives/chainlink.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ benchmark: oracle-deviation
intro: |
Chainlink publishes on-chain price feeds via AggregatorV3 contracts deployed on Ethereum mainnet and most major EVM chains, with node operators posting new rounds on either a deviation trigger (typically 0.25 to 0.5 percent for blue chips) or a heartbeat interval. Every on-chain product that settles in fiat (perp DEXes, lending markets, derivatives, stablecoin issuers) picks one oracle and inherits its drift, which is why the practical question is how aligned the major feeds actually are at the moment a settlement happens. This benchmark polls four oracles every 30 seconds for ten USD-quoted blue chips, computes the pairwise deviation `|a-b|/avg * 100` across every source pair, and publishes the per-pair maximum as a Prometheus gauge in basis points. Sources include Chainlink AggregatorV3 (via `eth_call` against the canonical mainnet contracts), Pyth Network's Hermes REST feed, Binance and Coinbase REST tickers. Pairs are BTC, ETH, SOL, BNB, AVAX, LINK and POL on all four sources, plus XRP, ADA and DOGE on three sources because the Chainlink mainnet feeds for those USD pairs are deprecated. A stale-price guard skips samples older than 60 seconds so a dead poller cannot artificially flatten the deviation, and the companion gauge `ocb_oracle_last_round_age_seconds{source="chainlink"}` surfaces Chainlink's on-chain update gap separately so a wide deviation can be attributed to the right cause. The headline leaderboard ranks the ten pairs by p99 of the max deviation over 24 hours, lower meaning tighter cross-oracle alignment.

seo_title: Chainlink alternatives. Live oracle deviation benchmark in basis points
seo_description: Compare Chainlink against Pyth, Binance and Coinbase on live oracle deviation. Max pairwise gap on 10 USD pairs, polled every 30 seconds, p99 over 24 hours.
seo_title: "Chainlink alternatives: live benchmark"
seo_description: "Chainlink vs Pyth, Binance and Coinbase on live oracle deviation. Max pairwise gap on BTC, ETH, SOL."

status: live
2 changes: 1 addition & 1 deletion alternatives/coingecko.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ benchmark: network-coverage
intro: |
CoinGecko is a coin-centric price and market data REST API built around a curated asset list (the `/coins` universe) rather than around on-chain events. Tokens are added through a listing process, prices land on the API after that process completes, and the free tier is famously throttled (around 30 requests per minute on the demo key) which pushes any real product onto a paid plan within days of integration. The on-chain DEX side ships as a separate `/onchain` namespace inherited from GeckoTerminal, with its own quotas. Teams usually leave CoinGecko at one of two points: when the launch cadence of the tokens they care about outpaces the listing pipeline, or when the per-minute cap on the free tier forces a migration before the product is monetised enough to justify the enterprise tier.

seo_title: CoinGecko alternatives. live network coverage benchmark
seo_title: "CoinGecko alternatives: live benchmark"
seo_description: Compare CoinGecko alternatives on the number of blockchains each major onchain data API officially supports. Live data, refreshed every six hours.
4 changes: 2 additions & 2 deletions alternatives/drpc.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ benchmark: rpc-capabilities
intro: |
dRPC is a decentralized RPC mesh that routes each JSON-RPC request across third-party node providers with consensus checks, exposing a no-key public tier on every major EVM network. Picking a default endpoint for a dapp comes down to a per-chain question: which free public RPC is actually fast and reliable on the chain my product runs on, right now, not according to a marketing page. This benchmark answers it directly. The harness sends an identical `eth_blockNumber` POST every 15 seconds against 15 audited no-key public RPC providers across 10 EVM chains (Ethereum, Arbitrum, Base, Optimism, Avalanche, BNB, Polygon, Linea, Scroll, Mantle), from three Railway regions (us-east, eu-west, sgp). p50, p90 and p99 are computed via Prometheus `quantile_over_time` over the last 24 hours, and a five-class result label (`ok`, `http_err`, `jsonrpc_err`, `stale`, `timeout`) lets the success-rate column catch endpoints that return HTTP 200 with a JSON-RPC error body (the Cloudflare-eth trap). An archive-depth probe runs every 5 minutes against five depths so a fast endpoint that silently serves pruned state is not ranked as a viable archive source. The cohort competing with dRPC includes PublicNode, 1RPC, MeowRPC, Tenderly Gateway, Nodies, Lava, Merkle, Flashbots Protect and Cloudflare, plus the chain-official foundation endpoints on Base, BNB, Arbitrum, Optimism and Avalanche. The chain tab filters every query so the leader is reported per network rather than as a cross-chain aggregate that rewards whichever single-chain endpoint happens to be fastest on its one chain.

seo_title: dRPC alternatives. Live free public RPC benchmark across EVM chains
seo_description: Compare dRPC alternatives on eth_blockNumber p50 latency. PublicNode, 1RPC, Tenderly, Nodies, Lava and chain-official endpoints measured every 15 seconds from 3 regions.
seo_title: "dRPC alternatives: live benchmark"
seo_description: "dRPC alternatives on eth_blockNumber p50 latency. PublicNode, 1RPC, Tenderly, Nodies, Lava ranked live."

status: live
4 changes: 2 additions & 2 deletions alternatives/dune.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,5 +7,5 @@ benchmark: wallet-labels-coverage
intro: |
Dune lets analysts query indexed blockchain data with SQL, often via labelled wallet datasets contributed by the community. When sizing alternatives, one practical axis is wallet labelling depth. how many addresses does each provider have a label for, and how confident are those labels? Below is the live coverage from each major labelling provider, refreshed continuously against a shared sample of recently active wallets.

seo_title: Dune alternatives. live wallet-labels coverage benchmark
seo_description: Compare Dune alternatives on wallet labelling depth. Coverage of recently active addresses across major providers, measured continuously and published openly.
seo_title: "Dune alternatives: live benchmark"
seo_description: "Dune alternatives on wallet labelling depth. Recently active address coverage across major EVM chains."
2 changes: 1 addition & 1 deletion alternatives/dydx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ benchmark: perp-fees
intro: |
dYdX v4 is a Cosmos-based decentralized perpetuals exchange that runs an on-chain orderbook on its own appchain, with a published tier-0 taker fee of 5 basis points and one of the tightest non-zero-fee books outside Hyperliquid. Published fee schedules are only half the story for a trader picking a venue, because the rack rate ignores the spread crossed at market and the price impact eaten at notional. This benchmark measures the live all-in cost of opening a $1000 ETH long 10x position across major perpetual venues, every five minutes, by reading taker fees from each venue's own API (no hardcoded schedules) and walking each orderbook for $1000 of buy-side notional to compute the spread plus impact component. No transactions are sent. dYdX is queried via its indexer at `/orderbooks/perpetualMarket/ETH-USD` and `/perpetualMarkets`, plus the Cosmos REST endpoint `/dydxprotocol/v4/feetiers/perpetual_fee_params` for the tier-0 default fee. The same harness reads Hyperliquid via `userFees` and `l2Book`, GMX v2 through the synthetics-arbitrum subgraph for `positionFeeFactor`, Lighter via `/orderBookDetails` and `/orderBookOrders`, and gains.trade on Base by reading the fee directly on-chain. All-in cost equals taker fee plus spread, both surfaced as separate metrics. Funding rate is recorded separately (`perp_fees_funding_rate_per_hour_bps`) because it accrues per hour held rather than at open, so bundling it into a single one-number leaderboard would conflate two different fee mechanics. The dimension tab at the top of the page swaps the underlying asset between ETH, BTC and SOL.

seo_title: dYdX alternatives. Live all-in perp fee benchmark on a $1000 ETH 10x long
seo_title: "dYdX alternatives: live benchmark"
seo_description: Compare dYdX v4 against Hyperliquid, Lighter, GMX v2 and gains.trade on live taker fee plus spread crossed at $1000 notional, refreshed every five minutes.

status: live
2 changes: 1 addition & 1 deletion alternatives/etherscan.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ benchmark: gas-estimation
intro: |
Etherscan is the most-visited block explorer on the web and publishes a gas tracker exposing `SafeGasPrice`, `ProposeGasPrice` and `FastGasPrice` via the v2 API on Ethereum and Polygon (free tier). The tiering was originally designed for the pre-EIP-1559 single-price world and is now mapped onto a priority-fee comparison alongside dedicated oracles. The question every wallet, swap router and bridge UI faces before sending a transaction is which gas oracle actually matches what the next block will charge on the chain their product runs on, rather than what a marketing page claims. This benchmark polls each oracle at its tier-tolerant cadence (Etherscan every 15 seconds with a global rate-gate enforcing at least 6 seconds between any two Etherscan requests across chains, because the no-key limit is 1 req per 5 s per IP shared), buffers the prediction with the predicted block height, and when that block is mined pulls the full block via `eth_getBlockByNumber(.., true)` on the chain's PublicNode RPC. Realized percentiles are computed from actual `maxPriorityFeePerGas` values, and the absolute error per (oracle, tier, chain) lands on both a gauge and a histogram. The ranking metric is the p99 gap over 24 hours, the worst 1 percent of blocks, because typical-minute gaps sit within fractions of a micro-gwei (economically indistinguishable noise) while gas spikes are where a wrong prediction either overpays or misses the block. A covered-rate column shows the share of time each prediction sat at or above the realized p50, the inclusion-side risk an absolute gap cannot show. The cohort competing with Etherscan includes PublicNode `eth_feeHistory` (thin wrapper over EIP-1559 reward percentiles) and Owlracle (multi-oracle aggregator).

seo_title: Etherscan alternatives. Live gas oracle accuracy benchmark
seo_title: "Etherscan alternatives: live benchmark"
seo_description: Compare Etherscan against PublicNode feeHistory and Owlracle on gwei gap between predicted and realized priority fee, ranked on p99 over 24h.

status: live
2 changes: 1 addition & 1 deletion alternatives/gmx.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ benchmark: perp-fees
intro: |
GMX v2 is an oracle-priced perpetuals venue on Arbitrum that settles against synthetic pools rather than a central orderbook, with a position fee split into a positive-impact branch (4 basis points, reduces venue skew) and a negative-impact branch (6 basis points, adds to skew). Which branch fires depends on open interest at the moment of trade, not on user input, so the worst-case open is the right conservative figure to compare against an orderbook venue's all-in cost. This benchmark measures the live all-in cost of opening a $1000 ETH long 10x position across major perpetual venues, every five minutes, by reading the variable position fee from the synthetics-arbitrum subgraph (`positionFeeFactorForNegativeImpact`) and computing the all-in figure in basis points. No transactions are sent. The same harness queries Hyperliquid (`userFees` plus `l2Book`), dYdX v4 (Cosmos REST plus indexer), Lighter (`/orderBookDetails` plus `/orderBookOrders`), and gains.trade on Base where the fee is read directly on-chain via `eth_call pairs(N)` and `fees(feeIndex).openFeeP`. Because GMX is oracle-priced, the all-in number has no orderbook spread component; the rack rate effectively becomes the figure, which differs structurally from Hyperliquid and Lighter where the half-spread plus impact at $1000 notional gets layered on top of the taker fee. Funding rate is published separately (`perp_fees_funding_rate_per_hour_bps`) because it accrues per hour held, not at open. The asset tab at the top of the page swaps between ETH, BTC and SOL.

seo_title: GMX alternatives. Live all-in perp fee benchmark on a $1000 ETH 10x long
seo_title: "GMX alternatives: live benchmark"
seo_description: Compare GMX v2 against Hyperliquid, dYdX, Lighter and gains.trade on live taker fee plus spread crossed at $1000 notional, refreshed every five minutes.

status: live
2 changes: 1 addition & 1 deletion alternatives/hyperliquid.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@ benchmark: perp-fees
intro: |
Hyperliquid is an L1 perpetuals exchange running on HyperBFT consensus, with an on-chain orderbook and a published base taker fee of 4.5 basis points. Its book is among the deepest of any decentralized venue, which means the spread crossed at market and the impact eaten at $1000 notional usually stay compressed and the all-in cost tracks the rack rate closely. This benchmark measures the live all-in cost of opening a $1000 ETH long 10x position across major perpetual venues, every five minutes, by reading taker fees from each venue's own API and walking each orderbook for $1000 of buy-side notional. No transactions are sent. Hyperliquid is queried via `POST /info {type: l2Book}` for asks, `{type: userFees, user: 0x000...000}` for taker fee and `{type: metaAndAssetCtxs}` for funding. The same harness queries Lighter (`/orderBookDetails` plus `/orderBookOrders`), dYdX v4 (indexer plus Cosmos REST), GMX v2 (synthetics-arbitrum subgraph for `positionFeeFactor`), and gains.trade on Base (fee read directly on-chain via `eth_call`). All-in cost equals taker fee plus half-spread plus impact, all in basis points, with both components emitted as separate Prometheus gauges for transparency. Funding rate is published separately (`perp_fees_funding_rate_per_hour_bps`) because it accrues per hour held rather than at open, so a trader sizing a multi-hour position can layer it on top of the open cost. The dimension tab at the top of the page swaps the underlying asset between ETH, BTC and SOL, with the leaderboard re-sorting on each switch.

seo_title: Hyperliquid alternatives. Live all-in perp fee on a $1000 ETH 10x long
seo_title: "Hyperliquid alternatives: live benchmark"
seo_description: Compare Hyperliquid against Lighter, dYdX, GMX v2 and gains.trade on live taker fee plus spread crossed at $1000 notional, refreshed every five minutes.

status: live
Loading
Loading