Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
168 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
7541edb
Merge remote-tracking branch 'origin/main' into ship/dev-to-main
Jul 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
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
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
13 changes: 13 additions & 0 deletions alternatives/jupiter.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
slug: jupiter
target_product: Jupiter
target_url: https://jup.ag
description: Solana DEX aggregator with multi-venue routing
benchmark: solana-dex-quote-latency

intro: |
Jupiter is a Solana DEX aggregator that routes swaps across most major venues on the network, exposing a public quote endpoint at `lite-api.jup.ag/swap/v1/quote`. Quote latency sits on the hot path of every swap a wallet, trading UI or routing front-end builds: a 600 ms response pushes a perceptible delay onto the user, while an 80 ms response feels instant. This benchmark measures the wall-clock round-trip latency of Solana DEX aggregator quote APIs every 60 seconds from three Railway regions (us-east, eu-west, sgp), against tokens that are actually trending on Solana rather than the canonical SOL to USDC pair that every provider's edge cache already memorises. The harness maintains a 30-minute sliding window of bonded tokens from Mobula Pulse V2's WebSocket feed (post-bonding-curve graduates from Pump.fun, Meteora, Raydium LaunchLab and friends), picks one at random each tick and sends an identical 100 USDC to tokenOut quote request at 1 percent slippage to each provider in parallel. The HTTP client reuses TCP and TLS connections across ticks so the recorded latency reflects steady-state cost, not a cold-start handshake. Liquidity-gap failures (a provider that cannot route the picked token) land on a separate `solana_quote_no_route_total` counter and are excluded from the latency histogram, so a provider that fails fast on long-tail coverage is not penalised on the percentiles. Histogram buckets cover 10 ms to 5 s. Providers measured alongside Jupiter are Mobula, OpenOcean and Raydium; per-region tabs at the top of the page surface where each provider's infrastructure actually sits.

seo_title: "Jupiter alternatives: live benchmark"
seo_description: Compare Jupiter against Mobula, OpenOcean and Raydium on live Solana quote latency. 100 USDC to long-tail token, polled every 60 seconds from 3 regions.

status: live
11 changes: 11 additions & 0 deletions alternatives/zerion.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
slug: zerion
target_product: Zerion
target_url: https://zerion.io
description: Wallet and portfolio API for EVM chains
benchmark: portfolio-chain-coverage

intro: |
Zerion powers wallets and portfolio trackers with a single API for balances, positions and transactions across EVM chains. When sizing alternatives, one practical axis is chain coverage that actually works. how many chains does each portfolio API return real balances on, versus how many it lists in its own catalog? Below is the live daily probe. identical public test addresses for every provider, a chain counts once the returned balance clears $1, and the vendor's self-declared list is published next to the verified number.

seo_title: "Zerion alternatives: live benchmark"
seo_description: "Zerion alternatives on portfolio API chain coverage. Probe-verified chains vs self-declared catalogs, refreshed daily."
42 changes: 42 additions & 0 deletions answers/which-evm-aggregator-has-the-fastest-quote.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
slug: which-evm-aggregator-has-the-fastest-quote
question: "Which EVM swap quote API is the fastest in 2026?"
short_answer: |
{{best_name}} currently returns EVM swap quotes the fastest at {{best_p50}} (p50, 24h) across Mobula, KyberSwap, Bebop, CoW, Enso, LI.FI and OpenOcean on Ethereum, Base, Arbitrum and BSC, measured live by OpenChainBench from 3 regions.

benchmark: evm-quote-latency

intro: |
EVM swap aggregator APIs all promise sub second quotes. This page measures how often they actually deliver one. Every wallet integration, intent layer and routing front end is bound by the quote API it sits behind, and the gap between a 200 ms and a 1500 ms p99 is the difference between a swap UI that feels native and one that needs a loading spinner on every input change. OpenChainBench rotates a 5 pair basket across Ethereum, Base, Arbitrum and BSC (1 ETH to USDT on Ethereum, 1000 USDC to USDT on Ethereum, 0.5 ETH to USDC on Base, 100 USDC to ETH on Arbitrum, 1 BNB to USDT on BSC), fires a quote request at every supported provider in parallel every 60 seconds, and records the wall clock round trip. The leaderboard sorts by p50 latency over the last 24 hours. A geographic split is available with the same probe running independently from us-east, eu-west and Singapore, so an integrator can pick the provider whose edge gateway is closest to their backend.

methodology: |
Each provider's public quote endpoint is hit on the 5 fixed pairs above, rotating one pair per 60 second tick. Per (provider, chain) the bench lands roughly 288 samples in 24 hours per region, enough to put p90 and p99 buckets on a solid base. Latency is wall clock from request dispatch to last byte received, observed only on the happy path (HTTP 2xx with a parseable output amount). Failures land on dedicated counters by class (auth via 401/403, throttle via 429, no route via empty or zero output amount on 200, other for everything else) and pull the success gauge to 0. Native asset sentinel is the canonical `0xEeeeeEeee` form; Odos uses the all zero form and Bebop substitutes the wrapped equivalent on the sell side, the adapter normalises per provider. The three regions are separate Railway services writing the same metric family with a `region` label, so the page can filter to a single edge or aggregate across all three.

limitations:
- "Speed only, quote quality is not scored. Two providers can return the same time to first byte while one quotes a noticeably worse price. Converting all outputs to a comparable USD value introduces an oracle bias the leaderboard does not want to bake into a latency ranking. The fee benchmark measures realised cost separately."
- "Each provider declares its supported chain set. CoW Protocol skips BSC because CoW Settlement does not deploy there; the harness skips probes for chains a provider does not claim to cover so the failure counter is not inflated by structural non coverage."
- "Enso uses a global anonymous bucket at roughly 1 request per second, so about 20% of probes hit 429 and are dropped. Remaining samples keep p50 and p90 stable but the success rate is capped near 80%, which the leaderboard surfaces honestly."
- "The 5 pair basket favours liquid USDC and ETH routes. A long tail token route (low cap memecoin, RWA, niche bridge wrapper) has different route search complexity and the latency curves on this leaderboard do not generalise to those cases."
- "Polygon and Optimism are slated for a v2 expansion once they reach a comparable sample volume; the current Ethereum, Base, Arbitrum and BSC coverage is the integration grade core."

faq:
- q: "Which EVM swap quote API has the lowest latency right now?"
a: "{{best_name}} currently leads at {{best_p50}} (p50 over the last 24 hours) on the active tab, across {{count}} measured providers. The leaderboard re-sorts every minute on fresh Prometheus samples, so the answer reflects measured latency on the live basket, not a marketing claim. Per chain leaders can differ from the cross chain aggregate; the chain tabs at the top of the bench page show each ranking separately."
- q: "Does this measure quote quality or just speed?"
a: "Speed only. Latency is wall clock round trip from request to last byte, recorded only on a successful parseable response. Output amount in USD is not scored on this bench because providers measure it differently (Bebop is net of fees on a gasless RFQ, others are gross), and converting all outputs to a comparable USD value introduces an oracle bias the leaderboard does not want to bake into a latency comparison."
- q: "Why are some providers not on every chain?"
a: "Each provider declares its supported chain set. The harness skips probes for chains a provider does not claim to cover so the failure counter is not inflated by structural non coverage. CoW skips BSC because CoW Settlement does not deploy there; LI.FI and OpenOcean cover 30+ chains each. The per chain tab on the bench page shows which providers actually run on each chain."
- q: "What happens when a provider rate limits the harness?"
a: "Each adapter classifies the response. 429 lands on a throttle counter and the success gauge drops to 0. 401 and 403 land on an auth counter. Empty or zero output amounts on a 200 land on a no route counter. None of those failure modes contribute to the latency histogram, so the p50 number stays representative of healthy quotes."
- q: "How is the geographic split implemented?"
a: "Three identical Railway services run the harness with different `MONITOR_REGION` env vars (us-east, eu-west, sgp). Each writes the same metric family with a `region` label. The bench page region filter selects which slice of the histogram is queried; the per chain x per region grid shows a 4 chain by 3 region cell ranking for each provider."
- q: "Why does Bebop sometimes win on latency despite being RFQ?"
a: "Bebop's RFQ model resolves price through a maker network rather than via on chain simulation. The output amount it quotes is already net of fees because settlement is gasless for the taker. The latency the bench measures is the maker network resolving the price, not a public mempool route search; on liquid pairs that path can clock comparably to or below pre warmed aggregator graphs."

related:
- which-solana-dex-aggregator-is-the-fastest
- which-bridge-has-the-fastest-quote-api
- which-crypto-price-api-is-the-fastest

seo_title: "Which EVM swap quote API is the fastest in 2026?"
seo_description: "{{best_name}} leads EVM swap quote latency at {{best_p50}} (p50, 24h) across Mobula, KyberSwap, Bebop, CoW, Enso, LI.FI and OpenOcean on Ethereum, Base, Arbitrum and BSC."
status: live
42 changes: 42 additions & 0 deletions answers/which-solana-dex-aggregator-is-the-fastest.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
slug: which-solana-dex-aggregator-is-the-fastest
question: "Which Solana DEX aggregator returns the fastest swap quote?"
short_answer: |
{{best_name}} currently returns Solana swap quotes the fastest at {{best_p50}} (p50, 24h) across Jupiter, Mobula, OpenOcean and Raydium on a rotating trending token basket, measured live by OpenChainBench from 3 regions.

benchmark: solana-dex-quote-latency

intro: |
Solana DEX aggregators sit on the hot path of every swap a wallet, trading UI or routing front end builds. A quote API at 80 ms feels instant to the user; a quote API at 600 ms pushes a perceptible delay between input change and updated output. Most "fastest aggregator" comparisons hardcode the canonical SOL to USDC pair, which Jupiter's lite endpoint serves from a CloudFront edge in 30 to 50 ms, measuring cache hit rather than routing. This page answers the question integrators actually need answered. Which Solana DEX aggregator returns the fastest quote when the target token is one nobody has cached, against the long tail tokens actually trending right now. OpenChainBench rotates the target every tick by picking a fresh bonded token from Mobula Pulse V2's live WebSocket feed (post bonding curve graduates from Pump.fun, Meteora, Raydium LaunchLab and friends), then fires a 100 USDC to tokenOut quote at 1% slippage against each provider in parallel from us-east, eu-west and Singapore.

methodology: |
Every 60 seconds, in each of three Railway regions, the harness picks one Solana token from a sliding 30 minute window of bonded tokens emitted by Mobula Pulse V2 over WebSocket, then sends an identical 100 USDC to tokenOut quote (1% slippage, no fee, no referrer) to each provider. Latency is wall clock from HTTP request dispatch to the first byte of a response body containing a usable quoted output amount (Jupiter `outAmount`, Mobula `data.amountOutTokens`, OpenOcean `data.outAmount`, Raydium `data.outputAmount`). The HTTP client reuses TCP and TLS connections across ticks, so the recorded number is the steady state round trip a long lived backend integration sees, not the one off cold start handshake. Histogram buckets are 10, 25, 50, 100, 200, 500, 1000, 2000 and 5000 ms; p50, p90 and p99 are computed per region via Prometheus `histogram_quantile` over 24h. Failure classes (HTTP 429 throttled, 401/403 auth error, no route, other) each land on their own counter and are excluded from the latency histogram.

limitations:
- "Raydium's compute API is single venue (Raydium AMM v4, CPMM, CLMM only) and does not multi hop via SOL like Jupiter or Mobula. On the Pulse fed rotation (mostly Pump.fun graduates living on PumpSwap, plus Meteora and Orca pools) Raydium returns INSUFFICIENT_LIQUIDITY on roughly 80% of picks. Its latency cells go blank below 50 successful quotes per 24h; the success rate column is its honest score."
- "Jupiter serves quotes from regional pods behind CloudFront (`x-region: eu-central-1` observed from EU, `x-pod-name: jupiter-core-*`), so each probe region reaches a nearby replica and its cross region spread is flat by infrastructure, not by caching. Repeated identical requests return `x-cache: Miss` every time; CloudFront does not cache this endpoint."
- "Quote quality (output amount, net of gas) is not scored here. Two providers can return the same time to first byte while one quotes a noticeably worse price. Converting all outputs to a comparable USD value introduces an oracle bias the leaderboard does not want to bake into a latency ranking."
- "Long tail token rotation defeats per pair edge caches but biases the comparison toward providers whose route engine handles fresh mints quickly. A pure SOL to USDC trader would see different absolute numbers; relative ordering on the cohort is the integration grade signal."
- "Direct egress from Railway, no residential proxy. The bench measures backend to backend latency as a real integration sees it; a wallet calling the API from a mobile network adds the mobile network's RTT on top."

faq:
- q: "Which Solana DEX has the fastest quote API right now?"
a: "{{best_name}} currently returns quotes the fastest at {{best_p50}} (p50, 24h) across {{count}} measured providers. The leaderboard re-sorts every 60 seconds against fresh samples and rotates the target token each tick so no provider can serve from edge cache. The answer reflects 24 hours of measured latency across us-east, eu-west and Singapore."
- q: "What is quote latency on a DEX aggregator?"
a: "Quote latency is the wall clock time between a swap UI asking a DEX aggregator 'what would I get if I traded 100 USDC for this token right now' and the aggregator answering with a usable routed price. A quote API at 80 ms feels instant; a quote API at 600 ms introduces a visible delay between input change and updated output. The number sets the floor on how live a swap UI can feel before any other latency (RPC, signing, broadcast) is added."
- q: "Why does the bench rotate the target token instead of always quoting SOL to USDC?"
a: "SOL to USDC is the most cached pair on Solana. Jupiter's lite endpoint serves it from a CloudFront edge in 30 to 50 ms, but that measures cache hit, not routing. Rotating the target every tick against the tokens actually trending right now via Mobula Pulse V2's bonded WebSocket feed defeats every per pair edge cache and forces each provider to actually run a routing search. The metric becomes a fair comparison of routing engines, not CDN configurations."
- q: "What if a provider cannot quote a particular long tail token?"
a: "It is counted as a no route, not as a slow quote. Each provider has a recognisable 'I have no path for this pair' signal (Jupiter NO_ROUTES_FOUND, Mobula 'No route found', Raydium INSUFFICIENT_LIQUIDITY, OpenOcean payload level). When the harness sees it, the tick lands on `solana_quote_no_route_total` and is excluded from the latency histogram entirely, so providers that fail fast on coverage gaps are not penalised on the percentiles."
- q: "Why does Raydium have a much lower success rate than the aggregators?"
a: "Raydium's compute endpoint is single venue: it only routes against Raydium's own AMM v4, CPMM and CLMM pools and does not multi hop via SOL the way Jupiter or Mobula do. Because the rotation pulls from Mobula Pulse V2's bonded feed (most of which are Pump.fun graduates living on PumpSwap, plus Meteora and Orca), Raydium returns INSUFFICIENT_LIQUIDITY or ROUTE_NOT_FOUND on roughly 80% of picks. The Raydium latency column is the conditional p50 over the small subset of bonded tokens that happen to have a Raydium pool."
- q: "Are authentication errors and rate limits counted as slow?"
a: "No. HTTP 401, 403 and 429 responses are excluded from the latency histogram entirely. They are counted in separate counters (`solana_quote_auth_error_total`, `solana_quote_throttled_total`) which show up on the success rate column. A provider that is fast but rate limits at the configured cadence loses points on success rate, not on latency."

related:
- which-evm-aggregator-has-the-fastest-quote
- which-solana-rpc-lands-the-most-transactions
- which-crypto-price-api-is-the-fastest

seo_title: "Which Solana DEX aggregator returns the fastest swap quote in 2026?"
seo_description: "{{best_name}} leads Solana DEX quote latency at {{best_p50}} (p50, 24h) across Jupiter, Mobula, OpenOcean and Raydium on a rotating trending token basket. Measured live by OpenChainBench from 3 regions."
status: live
Loading
Loading