ByAUJay
What Open-Source Servers Are Optimized for Web3 Endpoints? Most Stable Open-Source Servers for Blockchain APIs
Decision‑ready guide to the most stable, high‑throughput open‑source servers for blockchain APIs in 2026, plus concrete, copy‑paste configs and emerging best practices for production RPC at startups and enterprises. All recommendations below are current as of January 7, 2026.
TL;DR for busy decision‑makers
- Ethereum stack: pick Geth or Nethermind for maximum production stability; consider Reth or Erigon for highest RPC throughput; Besu for enterprise features. Mix clients for resilience. (geth.ethereum.org)
- Solana: run Agave/Jito validator with Geyser gRPC; plan upgrades along 1.18.x and the Agave transition; put heavy read streams behind Geyser plugins. (github.com)
- OP Stack/Arbitrum: use op-geth + op-node; keep to current Nitro (ArbOS 51) for Arbitrum; don’t expose sequencer internals; route tx submission to the sequencer HTTP. (docs.optimism.io)
- Bitcoin: pair bitcoind with electrs (mempool/electrs fork) for wallet/explorer‑grade RPC at scale. (github.com)
- Cosmos SDK chains: serve gRPC first, REST via gRPC‑gateway; keep CometBFT RPC (26657) private or locked down. (cosmos-docs.mintlify.app)
- Aptos & Sui: Aptos fullnodes expose REST; Sui is migrating production workloads to gRPC—plan for gRPC enablement and JSON‑RPC deprecation. (docs.sui.io)
Why “server choice” matters more in Web3 than in Web2 APIs
Unlike conventional REST stacks, Web3 endpoints talk to stateful consensus software that must stay in lockstep with a live network. Your “API server” is usually the node client itself, and your choices directly affect:
- Finality and correctness under reorgs
- RPC throughput for traces, logs, and simulation
- Upgrade safety across network hardforks
- Cost: disk footprint, IOPS, CPU per query
Choosing proven open‑source servers—and configuring them correctly—shrinks outage blast radius and RPC costs.
Ethereum execution clients (open‑source): stability vs performance trade‑offs
All five major execution clients are open‑source. The right answer is often “run two” for diversity and failover.
1) Geth (Go)
- Why choose it: Most battle‑tested; conservative defaults; strong compatibility across tooling. (geth.ethereum.org)
- 2024–2025 changes that matter for operators:
- Default state scheme switched to PathDB for built‑in historical state pruning on fresh databases. (mygit.top)
- Limits added to eth_feeHistory percentiles to curb pathological requests. Use it to protect infra. (newreleases.io)
- Minimal stable HTTP/WS enable:
Flags and transport behavior from Geth docs. Never expose admin/personal/debug publicly. (geth.ethereum.org)geth \ --http --http.addr 0.0.0.0 --http.port 8545 \ --http.api eth,net,web3 \ --http.corsdomain=https://yourapp.example \ --http.vhosts=yourrpc.example \ --ws --ws.addr 0.0.0.0 --ws.port 8546 --ws.api eth,net,web3
When to prefer Geth: wallets, exchanges, and production apps favoring mature behavior over bleeding‑edge speed.
2) Nethermind (C#)
- Why choose it: Feature‑rich JSON‑RPC, fast tracing, strong L2 integrations, and constant perf work (parallel downloads, AVX512/ARM64 boosts). (newreleases.io)
- Useful options live under JsonRpc.* (ports, logging, per‑method controls). Tune request logging and stats reporting in production. (docs.nethermind.io)
When to prefer Nethermind: high‑volume L2/rollup stacks, explorers, and infra teams needing richer RPCs and tracing.
3) Besu (Java, Hyperledger)
- Why choose it: Enterprise features (on‑chain permissioning, robust metrics), steady post‑Merge performance gains—median block processing down from ~1.71s to ~0.49s on modest VMs; enable Bonsai + Snap + high‑spec RocksDB flags. (besu-eth.github.io)
When to prefer Besu: enterprise governance/permissioning needs with solid performance.
4) Erigon 3 (Go/C++ modules)
- Why choose it: Efficiency and storage reduction; RPC served by in‑process or standalone rpcdaemon; three deployment modes (embedded, local, remote) fit scale‑out topologies. (github.com)
- 2025 milestone: Erigon 3 production release; 2.x deprecated for upcoming Pectra—migrate if you haven’t. (erigon.tech)
- Tip: run rpcdaemon out‑of‑process for isolation, or remotely for horizontal read scaling with gRPC. (docs.erigon.tech)
When to prefer Erigon: archive‑heavy, trace‑heavy, or cost‑sensitive stacks that benefit from lean storage and flexible RPC topology.
5) Reth (Rust, Paradigm)
- Why choose it: Production‑ready with standout RPC throughput and fast sync; audited, with strong operator guidance for high‑IOPS NVMe. (paradigm.xyz)
- Performance signals: independent/partner benchmarks show multi‑x RPC gains vs Geth/Erigon in many scenarios; debug/trace particularly strong. Validate for your workload. (chainstack.com)
- Minimal config:
CLI and transport details from Reth docs. (reth.rs)reth node \ --http --http.addr 0.0.0.0 --http.port 8545 \ --http.api eth,net,trace \ --authrpc.addr 127.0.0.1 --authrpc.port 8551 \ --authrpc.jwtsecret /path/jwt.hex
When to prefer Reth: RPC providers and power users chasing highest QPS/lowest latency while keeping current with upgrades.
Practical diversity mix (2026)
- Primary: Reth or Erigon for high‑QPS reads
- Secondary: Geth or Nethermind for stability/fallback
- Optional: Besu for enterprise chains/components
This also improves Ethereum client diversity, which the ecosystem continues to push for. (ethereum.org)
Layer‑2 stacks: OP Stack and Arbitrum
OP Stack (Optimism, Base, many app‑chains)
- Components:
- op‑geth (execution/RPC, JSON‑RPC compatible)
- op‑node (consensus/rollup RPC with “optimism_” namespace)
- Operator‑relevant RPC facts:
- Don’t expect a public mempool; route txs via op‑geth’s configured sequencer HTTP endpoint; implement your own submitter retries/backoff. (docs.optimism.io)
- op‑node exposes rollup state via JSON‑RPC; use it for sync/health, not for user‑facing data reads. (docs.optimism.io)
When to prefer OP Stack: you need EVM parity + easy multi‑appchain ops; open‑source and well‑documented.
Arbitrum Nitro
- Keep Nitro updated; ArbOS 51 “Dia” activates Jan 8, 2026 on One/Nova—operators must be at v3.9.3+ to remain in sync. (docs.arbitrum.io)
- Resource note: official docs emphasize using release builds only and scaling CPU cores for RPC concurrency. (docs.arbitrum.io)
When to prefer Nitro: the largest L2 by activity; production tooling and clear upgrade calendars. (github.com)
Solana: validator‑co‑located RPC plus Geyser gRPC
- Run Agave (ex‑Solana Labs validator) or the Jito‑Solana fork, and expose:
- HTTP JSON‑RPC (8899) for compatibility reads/writes
- WebSocket subscriptions (8900) for realtime
- Geyser gRPC for high‑throughput streaming (accounts/slots/txs) via plugins like jito‑foundation’s geyser‑grpc. (solana.com)
- 2025–2026 context:
- 1.18.x train is the stable line; Solana Labs repo transitions to Agave, with deprecations and RPC cleanups on the horizon—track changelogs closely. (github.com)
- Why Geyser: move heavy index/stream work off the validator; scale read services independently (Kafka/DB/gRPC micro‑services). (docs.solanalabs.com)
Example: enable a Geyser gRPC plugin
solana-validator \ --full-rpc-api \ --rpc-bind-address 0.0.0.0 \ --geyser-plugin-config /etc/solana/geyser.json
Plugin project and wiring details in the Jito plugin repo. (github.com)
Cosmos SDK chains (CometBFT)
- Serve gRPC first (9090), REST via gRPC‑gateway (1317) for browser clients; keep CometBFT RPC (26657) internal or tightly ACL’d. (cosmos-docs.mintlify.app)
- Practical ops:
- TLS‑terminate gRPC behind your API gateway; shape 26657 traffic if you must expose it (WebSocket pubsub can be abused).
When to prefer Cosmos SDK stack: typed gRPC queries and clean module‑driven APIs; great for sovereign rollups/appchains.
Bitcoin: pair bitcoind with electrs for API scale
- bitcoind’s JSON‑RPC is correct but not optimized for wallet/explorer UX at scale. Electrs (Rust) builds SSD‑friendly indexes and serves Electrum protocol and HTTP APIs; the mempool/electrs fork is the production‑grade target in 2026 (and required by Mempool 3.x). (github.com)
- Light‑mode vs full indexing: light mode saves disk at the cost of slower lookups; production should index fully and place the HTTP behind rate limits. (github.com)
Emerging L1s you may be evaluating
- Aptos: fullnodes expose a REST API; operators should use the Node Health Checker (NHC) and meet the high‑IOPS guidance for stability. (aptos.dev)
- Sui: JSON‑RPC is being deprecated for production; enable gRPC indexing and plan a migration; consider running JSON‑RPC on a separate node during transition. (docs.sui.io)
- Starknet: open‑source nodes Pathfinder (Rust) and Juno (Go). RPC 0.6/0.7 deprecations are in effect; standardize on RPC 0.8/0.9/0.10 with compatible client/tooling versions. (community.starknet.io)
Concrete, copy‑paste server configs that work
A) High‑throughput Ethereum read tier with Reth + NGINX
- Reth node (HTTP only, read namespaces)
reth node \ --http --http.addr 127.0.0.1 --http.port 8545 \ --http.api eth,net,trace,web3 \ --authrpc.addr 127.0.0.1 --authrpc.port 8551 \ --authrpc.jwtsecret /var/lib/reth/jwt.hex
Reth transport and API flags per docs. (reth.rs)
- NGINX front (HTTP/1.1 keepalive + sane limits)
upstream reth { server 127.0.0.1:8545 max_fails=3 fail_timeout=10s; keepalive 64; } server { listen 443 ssl http2; server_name rpc.example.com; client_max_body_size 4m; # cap batch payloads proxy_read_timeout 65s; # eth_call with large state location / { proxy_http_version 1.1; proxy_set_header Connection ""; proxy_set_header Host $host; proxy_pass http://reth; } }
Then enforce application‑level limits (see batching guidance below). (json-rpc.dev)
B) Erigon 3 with standalone rpcdaemon (local mode)
# process 1 – erigon erigon \ --datadir=/data/erigon \ --private.api.addr=127.0.0.1:9090 # process 2 – rpcdaemon (same host, direct DB access) rpcdaemon \ --datadir=/data/erigon \ --http.addr=127.0.0.1 --http.port=8545 \ --http.api=eth,debug,trace,net,web3
Deployment modes and flags per Erigon 3 docs. (docs.erigon.tech)
C) OP Stack node (execution + rollup RPC)
# op-geth: user-facing RPC + sequencer routing op-geth \ --http --http.addr 0.0.0.0 --http.port 8545 \ --ws --ws.addr 0.0.0.0 --ws.port 8546 \ --rollup.sequencerhttp=http://sequencer:8550 # op-node: rollup status/service RPC (operator-only) op-node \ --rpc.addr 127.0.0.1 --rpc.port 9545
Sequencer routing and role separation per Optimism docs. (docs.optimism.io)
D) Solana validator with Geyser gRPC plugin
solana-validator \ --full-rpc-api \ --rpc-bind-address 0.0.0.0 \ --geyser-plugin-config /etc/solana/jito-geyser.json
Geyser plugin setup per jito‑foundation project; HTTP/WSS defaults per Solana docs. (github.com)
Hard‑won best practices we deploy for clients
-
Enforce batch and payload limits at the edge
- Cap JSON‑RPC batch length (e.g., 20–25) and total body size (~1 MB for public endpoints) to prevent abuse. Apply HTTP 413s when exceeded. (json-rpc.dev)
-
Cache only what’s safe
- Cache eth_call responses strictly when the block parameter is a hash (immutable) and include call data in the key; never cache “latest”.
- Cache eth_getBlockByNumber with full transactions=false at specific block numbers; respect reorg depth where relevant.
-
Prefer HTTP/1.1 keep‑alive for JSON‑RPC and WebSockets for subscriptions
JSON‑RPC over HTTP remains ubiquitous and easy to scale behind standard proxies; use WS only for subscriptions where needed. (geth.ethereum.org) -
Don’t expose sensitive namespaces or Engine API publicly
- Geth/Nethermind/Besu admin, personal, debug/tracing should stay private; Engine API (8551) must be local/authenticated only. (geth.ethereum.org)
-
Watch the right golden signals
- p50/p95 latency by method, QPS, error codes, node head lag vs network head, subscription counts, and OS I/O saturation.
- For Besu, enable Bonsai + Snap; for Reth, ensure NVMe >16K IOPS per Paradigm guidance. (besu-eth.github.io)
-
Design for client diversity on Ethereum
- Run at least two different execution clients in production to reduce correlated failure risk and to follow EF guidance on diversity. (ethereum.org)
-
Track chain‑specific deprecations and release trains
- Arbitrum Nitro v3.9.3+ for ArbOS 51 on Jan 8, 2026. (docs.arbitrum.io)
- Solana 1.18.x/Agave repo transition; follow changelogs for RPC removals. (github.com)
- Starknet RPC 0.6/0.7 deprecations; standardize on 0.8/0.9/0.10. (community.starknet.io)
- Sui: enable gRPC indexing; plan to retire JSON‑RPC where possible. (docs.sui.io)
Server selection by use case
- Exchange/wallet backend (Ethereum): Geth + Nethermind, with Reth as a read‑only tier for bursts. You’ll get mature behavior with a high‑QPS read headroom. (geth.ethereum.org)
- NFT/gaming reads (Solana): validator + Geyser gRPC; stream account changes; keep HTTP for compatibility. (docs.solanalabs.com)
- Block explorer / analytics (Bitcoin): bitcoind + mempool/electrs with full indexes; place behind an API gateway with strict limits. (github.com)
- Enterprise/regulatory (Ethereum): Besu for permissioning + Nethermind for RPC; both have strong metrics and modern sync. (besu-eth.github.io)
- OP Stack appchain: op‑geth for user RPC, op‑node for operator RPC; configure sequencer routing; add an execution client diversity plan if feasible. (docs.optimism.io)
“New details” operators often miss (that bite later)
- Geth PathDB defaults only on new databases; old hashdb stays unless you resync—plan maintenance windows accordingly. (mygit.top)
- Reth won’t open HTTP/WS unless you pass flags; by default only Engine API is up on 8551 with JWT—great for safety, don’t forget to enable user RPC explicitly. (reth.rs)
- Erigon 3 changed defaults (Full node vs Archive); set prune.mode=archive at genesis if you need historical state. (github.com)
- OP Stack has no public mempool; eth_sendRawTransaction must route to the sequencer; missing this yields “working RPC” that silently can’t accept user txs. (docs.optimism.io)
- Solana’s Geyser streams de‑load validators; without it, heavy getProgramAccounts can desync your validator under load. (docs.solanalabs.com)
- Sui plans gRPC as the primary production interface; you must enable indexing and manage rollout to avoid downtime. (docs.sui.io)
Final selection matrix (quick reference)
- Maximum production stability today: Geth, Nethermind. (geth.ethereum.org)
- Highest RPC throughput (EVM): Reth, Erigon. Validate on your hardware. (paradigm.xyz)
- Enterprise features (permissioning, Java): Besu. (besu-eth.github.io)
- L2 (OP Stack): op‑geth + op‑node; Arbitrum: Nitro at current ArbOS. (docs.optimism.io)
- Solana: Agave/Jito validator + Geyser gRPC. (docs.solanalabs.com)
- Bitcoin: bitcoind + mempool/electrs. (github.com)
- Cosmos: gRPC first; REST through gRPC‑gateway; keep 26657 private. (cosmos-docs.mintlify.app)
- Aptos: REST with strict health/IOPS; Sui: gRPC migration. (aptos.dev)
Bottom line
If you need “set‑and‑forget” stability, start with Geth or Nethermind. If you’re pushing QPS or trace‑heavy workloads, layer in Reth or Erigon. For Solana, embrace Geyser gRPC as the scaling primitive. For OP Stack and Arbitrum, track the current releases and keep sequencer plumbing correct. And across all chains, codify batch/payload limits and never expose sensitive namespaces.
7Block Labs can blueprint, benchmark, and operate a mixed‑client RPC fabric for your team—with SLAs, dashboards, and controlled cost envelopes—so you can ship faster without infra surprises.
Meta
Updated: January 7, 2026. Key sources: official client docs and recent release notes for Reth, Geth, Nethermind, Besu, Erigon; Solana/Agave and Geyser docs; OP Stack/Arbitrum Nitro notices; Sui/Aptos production guidance. (paradigm.xyz)
Description: The definitive 2026 buyer’s guide to open‑source Web3 servers—what to run for Ethereum, Solana, OP Stack, Arbitrum, Bitcoin, Cosmos, Starknet, Sui, and Aptos—with copy‑paste configs, current release gotchas, and hard limits to set at the edge.
Like what you're reading? Let's build together.
Get a free 30‑minute consultation with our engineering team.

