Firedancer vs Agave: Solana's Validator Client Showdown
Firedancer vs Agave validator: tile architecture, throughput claims, and what multi-client consensus on Solana actually means for bots and infra.
Two clients, one chain, and a history of bad days
Solana went down hard in September 2021, again in January 2022, and had a five-hour outage in February 2024. Every one of those incidents shared a root cause pattern that had nothing to do with the chain's design and everything to do with its software supply chain: nearly every validator ran the exact same binary. When that binary hit an edge case — a duplicate block bug, a resource-exhaustion loop, an account-loading race — the whole network hit it at once. There was no fallback client absorbing the blast radius the way there is on Ethereum, where Geth, Nethermind, Besu, and Erigon each catch different bugs.
That single point of failure is the entire reason Firedancer exists, and it's why the comparison between it and Agave matters more than a typical benchmark-off.
What Agave actually is
Agave is the renamed Solana Labs validator client, now maintained by Anza after Solana Labs spun out its core engineering team in 2024. It's the Rust codebase that has run the network since genesis — TPU, TVU, gossip, Turbine, the whole stack. It's mature, it has the deepest RPC feature coverage, and every tool in the ecosystem — Geyser plugins, indexers, most RPC providers — was built and tested against it first. If you're running infrastructure that depends on real-time data streaming, this is still the client most Geyser-based pipelines assume you're pointed at, which is a big part of why we cover Yellowstone gRPC's real-time streaming model as an Agave-native pattern.
The tradeoff is architectural age. Agave's networking stack does userspace socket I/O through the kernel like any normal Rust service, its transaction ingestion path wasn't designed around today's spam volumes, and its multithreading model wasn't built for the kind of core-pinned, lock-free pipeline Jump set out to build from scratch.
What Firedancer actually is
Firedancer is a full validator client written in C by Jump Crypto's Firedancer team, and it is not a Rust rewrite in a different syntax — it's a different systems design. The core idea is a "tile" architecture: each functional stage (QUIC ingestion, signature verification, dedup, transaction packing, execution, PoH, shredding) runs as its own single-threaded process pinned to a dedicated CPU core, communicating with neighboring tiles through lock-free shared-memory ring buffers (Jump calls the messaging layer "Tango"). There's no shared mutable state fought over by a thread pool — each tile does one job, fast, and hands off data without blocking.
That design is why Firedancer's synthetic benchmarks reported north of 1 million non-vote TPS in isolated lab conditions with a custom load generator. That number gets misquoted constantly. It's a bandwidth ceiling for one component of the pipeline under ideal conditions, not a mainnet throughput figure — mainnet TPS is bounded by every other validator, network propagation, and the runtime's actual execution speed, not just the fastest validator's ingestion path. Where the gains are real and already measurable: faster sigverify (SIMD-heavy Ed25519 batching), lower-latency QUIC handling under spam, and a leader that can pack blocks and produce shreds with far less jitter than a general-purpose thread pool.
Frankendancer: the actual thing running today
Full Firedancer — meaning its own execution engine and consensus implementation, not just Agave's — has been a multi-year build. The intermediate step, and the one that matters for anyone running infrastructure right now, is Frankendancer: Firedancer's networking, verification, and block-assembly tiles bolted onto Agave's runtime and consensus code. It's been running on mainnet carrying real stake for a while now, which is the actual client-diversity milestone — not a testnet demo, but validators voting with Frankendancer's networking stack in production and staying in consensus with Agave-only peers.
That's the part worth understanding if you build anything latency-sensitive: a meaningful and growing slice of stake is now voting through a completely different network I/O path than it was two years ago, which changes propagation timing, leader block-production variance, and the assumptions your bot's timing model was tuned against.
Comparison
| Dimension | Agave (Anza) | Firedancer / Frankendancer |
|---|---|---|
| Language | Rust | C, tile-based |
| Networking | Standard userspace sockets | Custom, kernel-bypass-oriented, lock-free tile pipeline |
| Maturity | Production since genesis | Frankendancer live on mainnet; full consensus client still maturing |
| Consensus engine | Native, canonical | Frankendancer uses Agave's; full Firedancer has its own (independent implementation) |
| Sigverify/ingest throughput | Solid, thread-pool bound | Substantially faster under load (SIMD, dedicated cores) |
| RPC/Geyser ecosystem support | Deepest, first-class | Catching up; some plugin gaps |
| Client-diversity value | None — it's the incumbent | High, once independent consensus ships |
| Ops complexity | Familiar, well-documented | Newer tooling, steeper ops learning curve |
| Team | Anza | Jump Crypto / Firedancer team |
What this means if you're shipping bots, not validators
You almost certainly don't run a validator, but client diversity still touches your stack in three concrete ways.
First, timing assumptions. If you're running latency-sensitive strategies — anything in our MEV/arbitrage bot work or sniper bot builds — your slot-timing and leader-schedule heuristics were probably tuned against Agave-only block production. As Frankendancer share grows, block timing variance shifts, and strategies that assumed uniform propagation delay need re-tuning. This compounds with Jito bundle and priority-fee dynamics, since bundle landing rates are sensitive to exactly this kind of leader-side jitter.
Second, RPC provenance. You can't assume every RPC endpoint you hit is backed by the same client internals anymore. A simple version check before you commit to aggressive retry/fanout logic is cheap insurance:
import { Connection } from "@solana/web3.js";
async function clientFingerprint(rpcUrl: string) {
const conn = new Connection(rpcUrl, "confirmed");
const version = await conn.getVersion();
// Frankendancer/Firedancer nodes report distinct feature-set and
// sometimes a "solana-core" string that diverges from stock Agave builds.
return {
core: version["solana-core"],
featureSet: version["feature-set"],
};
}
Use that to bucket your RPC pool and stop treating every endpoint as interchangeable, especially for anything doing rapid wallet tracking or copy-trading where a slow or lagging node silently costs you fills.
Third, market-making and volume infrastructure need to keep working through this transition regardless of which venue you're quoting on or which validator client packed the block — the client story is orthogonal to your DEX-side logic, whether that's DLMM vs CLMM liquidity design for a market maker or execution timing for a pump.fun volume bot.
The verdict
If you operate a validator today: run Frankendancer if you want measurable networking-layer performance gains and you're comfortable with slightly newer ops tooling — it's in production, carrying stake, and the diversity benefit to the network is real even before the full consensus client ships. Stay on stock Agave if your priority is maximum operational familiarity and the deepest plugin compatibility, and you're not chasing the throughput edge.
If you build on top of Solana rather than validate it, don't wait for "Firedancer to win." Multi-client is already your reality — build retry logic, timing models, and RPC selection that don't assume a single implementation behind every endpoint you talk to. That's less a prediction and more an operational requirement for anyone running production trading infrastructure on Solana right now.
Need your bot's execution and data layer rebuilt to hold up across a multi-client validator set? Our infrastructure and data engineering work is built around exactly this kind of resilience.
Need a bot like this built?
We design, build and run trading bots on Solana, Hyperliquid and Polymarket.
Start a projectMore from the blog
Public vs Paid RPC: How to Run a Fair Benchmark
A fair comparison of public and paid RPC endpoints must account for quotas, workload, freshness and support guarantees.
Read articleRPC Benchmark Percentiles Explained: p50, p95 and p99
Why averages hide the latency spikes that break trading bots, wallets and production blockchain applications.
Read articleHyperliquid REST vs WebSocket Benchmark: What to Measure
A benchmark plan for Hyperliquid market data that separates request latency from streaming freshness and recovery.
Read article