
Back to Blog

Agave 4.0 Patch Notes: What's Coming
Written By
Brian Wong - DevRel, Anza
May 19, 2026
Agave 4.0 is the latest major release shipping from the Anza team. This release dramatically accelerates Turbine retransmit via XDP, moves transaction ingestion to QUIC, speeds up Replay Stage with asynchronous verification, and activates a long list of feature-gated SIMDs across the runtime, stake program, and cryptography. Agave 4.0 is currently a mainnet upgrade candidate and targets a full mainnet rollout in May 2026.
Notable Agave 4.0 Updates
Feature | Summary |
XDP for Turbine | Turbine retransmit accelerated by orders of magnitude. Linux capability handling hardened. |
Faster Replay Stage | PoH entry verification and Ed25519 signature verification moved off the critical path. |
QUIC-Only TPU | UDP transaction ingestion removed. QUIC is now the only option for submitting transactions. |
SIMD-0406 | Caps instruction account references at 255 for builtins and precompiles, aligning with the Transaction V1 format. |
Cost Model | Simple vote transactions no longer use statically defined CU costs. |
External Scheduler Bindings | New |
Agave Validator exit |
|
Accounts Index | The |
Direct I/O for Snapshots | Snapshot unpacking now uses direct I/O by default, bypassing the OS page cache. |
Agave Unstable API | All non-SDK monorepo crates are now private. Enable the |
Geyser Notifications | Account update notifications now use post-execution values. Most programs already zero out accounts on close, so the end result is largely the same. |
Version Format | New wire format encodes prerelease state (alpha, beta, RC, stable) in gossip version messages. |
XDP for Turbine
XDP (eXpress Data Path) is the high-performance networking path Agave uses to accelerate Turbine. It loads an eBPF program close to the network interface card, letting shred traffic bypass much of the standard Linux packet-processing path.
With Agave 4.0, XDP is ready for wider validator adoption. It has been stress-tested, hardened, and seen routing improvements. Production results on large mainnet validators show Turbine retransmit dropping from 600ms to ~0.8ms — orders of magnitude faster. This matters as Solana pushes toward higher block limits and the long-term goal of 100M CU blocks. XDP now also works over DoubleZero.
For setup instructions and benchmarks, see the Agave XDP Setup Guide.
XDP & Linux Capability Hardening
Linux capability handling has been significantly hardened for validators using XDP. (#9133)
It is now an explicit error + exit if the process hasn't been permitted a capability required by the current configuration.
A warning is logged if the process has capabilities permitted that aren't required by any supported configuration.
All permitted capabilities not required by the current configuration are dropped at startup, including for all validator subcommands which never require capabilities.
Capability-requiring operations are now performed on the main thread and capabilities are dropped before any other threads are spawned, with two exceptions: one thread retains
cap_net_adminfor netlink socket reinitialization, and if niceness flags are passed, all threads retaincap_sys_nice.
For operators, the setup instructions are as follows. Choose whichever fits your operational procedures:
Option 1 — Systemd: Add the following to your [Service] section:
AmbientCapabilities=CAP_NET_RAW CAP_NET_ADMIN CAP_BPF CAP_PERFMON
CapabilityBoundingSet=CAP_NET_RAW CAP_NET_ADMIN CAP_BPF CAP_PERFMON
Option 2 — setcap: Set xattr capabilities directly on the binary (must be repeated after every binary update):
sudo setcap cap_net_raw,cap_net_admin,cap_bpf,cap_perfmon=p /path/to/agave-validator
Faster Replay Stage
Agave 4.0 speeds up replay by moving two expensive verification steps off the replay threads' critical path.
PoH entry verification is now dispatched asynchronously. Previously, replay verified the entry hash chain inline before continuing.
Transaction signature verification is split: transaction hash/message verification still runs up front so transactions can be sanitized and executed safely, while the more expensive Ed25519 signature checks run in the background and are joined before the block is accepted.
The practical impact is a much less blocked replay stage, especially during busy slots where signature checks scale with transaction count.
Wincode Serialization
Wincode is a serialization and deserialization library developed by Anza, built for in-place initialization and direct memory writes to minimize intermediate buffering. It delivers top-tier performance among Rust serializers while remaining fully compatible with bincode. In Agave 4.0, more performance-critical serialization paths are transitioning from bincode to wincode. Since nearly all data written to disk or sent over the network in Solana relies on bincode, optimizing these paths has broad impact.
SIMD-0459 & SIMD-0460: Direct Mapping
We're shipping two related SIMDs authored by Alexander Meißner that tighten the sBPF execution environment. These are critical for cross-client consistency with Firedancer.
SIMD-0459 enforces that syscall parameters can only reference valid memory regions — input, heap, or stack — preventing undefined memory access patterns during syscall invocations like
sol_logandsol_invoke_signed. (#10348)SIMD-0460 reorganizes how the sBPF VM maps its memory regions (program text, stack, heap, input data), creating clearer boundaries.
SIMD-0406: Maximum Instruction Accounts
We're capping the number of account references per instruction at 255 for all instruction types, including builtins and precompiles. The feature gate was rekeyed for testnet activation in 4.0. (#11033)
QUIC-Only TPU
We've removed support for ingestion of transactions via UDP. QUIC is now the only option for submitting transactions to the validator. This has been the recommended path for several releases and finalizes the transition.
--public-tpu-addressand--public-tpu-forwards-addressnow specify QUIC ports, not UDP.The
setPublicTpuAddressandsetPublicTpuForwardsAddressRPC methods also now refer to QUIC ports.CLI arguments
--use-quicand--use-udphave been removed since there's nothing to toggle anymore.solana-test-validatornow shows the TPU QUIC address instead of the TPU UDP address in its dashboard.
Agave Unstable API
From 4.0 onward, all monorepo crates falling outside the backward compatibility policy have had their symbols made private. You must explicitly opt in with features = ["agave-unstable-api"] to use them.
Only five crates carry stability guarantees:
solana-sdk,solana-program,solana-client,solana-cli-config, andagave-geyser-plugin-interface.Everything else — including
solana-accounts-db,solana-runtime,solana-core,solana-ledger, andsolana-stake-program— falls under the unstable designation. Projects depending on any internal crate must add the feature flag to theirCargo.toml.On-chain program developers using only
solana-programorsolana-sdkare completely unaffected.
External Scheduler Bindings
We've added --enable-scheduler-bindings, which binds an IPC server at <ledger-path>/scheduler_bindings.ipc. This allows external schedulers to connect and manage transaction scheduling outside the validator process. This is a new extension point for teams building custom scheduling logic.
RPC Updates
Added a
clientIdfield to each node in thegetClusterNodesresponse, improving node identification for monitoring and tooling.getSignaturesForAddressnow returns an error with code-32020if thebeforeoruntilsignatures are not found in the ledger. Previously, the method returned a successful response with an empty array, which made it difficult to distinguish between "no matching transactions" and "invalid signature parameter." App developers relying on the old empty-array behavior will need to handle this new error code.
Accounts Index & AccountsDB
The accounts index is now kept entirely in RAM by default. The new --accounts-index-limit flag gives operators direct control over the memory threshold for the accounts index.
The
--disable-accounts-disk-indexflag has been removed (no longer needed since in-memory is the default).The
--enable-accounts-disk-indexflag is deprecated. Use--accounts-index-limitinstead. To retain the old disk-backed behavior, use--accounts-index-limit minimal.Using
mmapfor--accounts-db-access-storages-methodis now deprecated.
We also split monitoring metrics and fixed edge cases in the accounts storage layer:
Store stats separated into unfrozen (active slot processing) and frozen (bank freeze/snapshot) categories, giving operators granular visibility into performance bottlenecks. (#10918, #10986)
Zero-size file handling fixed — an edge case where account files with zero size or zero limit could cause panics during memory-mapped reads. (#10900)
Direct I/O for Snapshot Unpacking
Agave 4.0 changes snapshot unpacking to use direct I/O by default, instead of routing snapshot writes through the operating system page cache. This improves startup time and snapshot restore performance, especially because snapshot data is typically streamed to disk and does not need to displace hotter validator data from memory. Operators can opt out with --no-accounts-db-snapshots-direct-io if their filesystem does not support O_DIRECT. Direct I/O is expected to be extended to snapshot creation in a future release.
Blockstore Legacy Format Removal
We've removed fallback support for several legacy blockstore column formats: SlotMeta (pre-v2.2), Index (pre-v3.1), PerfSamples (pre-v1.15), and the transaction metadata columns TransactionStatus, TransactionMemos, and AddressSignatures (pre-v1.18).
Tiered Storage Removed
The experimental Tiered Storage backend has been fully removed from the codebase. This was a proposed alternative accounts storage format that never reached production readiness. Removing it simplifies the AccountsDB code path and reduces maintenance. (#10992)
Cost Model: Simple Votes Removed
The transaction scheduler's cost model previously counted vote transactions against the block's compute budget alongside user transactions. They're now accounted for using the same cost model as normal transactions, and the dedicated vote CU limit has been removed. This frees up block capacity that was previously reserved for votes. (#10855)
Geyser Plugin Changes
We've updated how account notifications work for Geyser consumers.
Account update notifications now have their fields populated from the post-execution account values. In practice, most programs already zero out accounts on close, so the end result is largely the same for most consumers.
Validator Changes
agave-validator exit now saves bank state before exiting. Most validators have snapshot generation disabled, meaning every reboot requires downloading or copying a snapshot from another machine. Now, exiting via agave-validator exit saves local state so the validator can restart without needing a new snapshot archive, significantly speeding up restarts.
Version Format
We've changed the interpretation of the Version struct fields in gossip ContactInfo to support semver prerelease notation. The top two bits (14 and 15) of the minor field are now reserved for prerelease status: 3 = alpha, 2 = beta, 1 = release candidate, 0 = stable. When prerelease status bits are non-zero, the patch field is interpreted as the prerelease number and the actual patch value is implicitly zero. (#10883)
Implementations lacking this support will observe a larger-than-expected minor version field from nodes publishing from a prerelease version.
CLI & Platform Tools
Support for Trezor hardware wallets using
usb://trezor.cargo-build-sbf --debugnow outputsprogram.so.debugand places debug objects insidetarget/deploy/debug.
Feature Gate Activations During the 4.0 Cycle
Several feature-gated SIMDs are scheduled to activate on mainnet during the Agave 4.0 release cycle. These are protocol-level changes that go live independently of the client release itself but are part of the broader 4.0 rollout.
P-token program — A drop-in compute-optimized replacement for the SPL Token program, built on Pinocchio. Same instruction set and account layouts, dramatically lower CU costs. The original SIMD estimates roughly 12% of block capacity freed up across the network.
Stake Program v5 (SIMD-0490) — Minimum stake delegation raised from 1 lamport to 1 SOL. Existing accounts below the threshold are grandfathered. Tooling and dapps that interact with the stake program will need to check their logic for the new minimum.
SBPFv3 program support (SIMD-0178, SIMD-0189, SIMD-0377) — Static syscalls, stricter ELF layout, and a VM update aligning with modern eBPF generated by LLVM.
Prefunded account creation (SIMD-0312) — New
CreateAccountAllowPrefundsystem program instruction that consolidates transfer + allocate + assign into a single call.ZK ElGamal Proof Program re-enabled — Re-activated on mainnet after the June 2025 vulnerability fix and audits.
BLS12-381 syscalls (SIMD-0388) — Native support for BLS12-381 elliptic curve operations. Key enabler for Alpenglow's on-chain BLS Proof-of-Possession verification.
G2 arithmetic for alt_bn128 (SIMD-0302) — Adds G2 curve operations (addition, subtraction, scalar multiplication) to existing alt_bn128 syscalls.
Little-endian alt_bn128 (SIMD-0284) — Adds little-endian compatibility for alt_bn128 syscalls.
Chained Block ID validation (SIMD-0340) — Defines explicit chain validation rules so validators can verify block ancestry consistently under both TowerBFT and Alpenglow.
Fast Leader Handover Markers (SIMD-0337) — Standardizes how validators detect a slot is fully transmitted, enabling faster leader transitions for Alpenglow.
Important Breaking Changes
UDP transaction ingestion removed. QUIC is the only option.
--public-tpu-addressand--public-tpu-forwards-addressnow specify QUIC ports.Agave Unstable API enforced. All monorepo crates outside the backward compatibility policy require the
agave-unstable-apifeature flag. Symbols are private without it.Linux capability handling hardened. Missing required capabilities now cause an explicit error and exit.
Geyser notifications changed. Account update notifications now use post-execution values for closed accounts.
Legacy blockstore column formats no longer supported.
Removed validator arguments:
--accounts-db-clean-threads,--accounts-db-hash-threads,--accounts-db-read-cache-limit-mb,--accounts-hash-cache-path,--disable-accounts-disk-index,--dev-halt-at-slot,--monitor,--wait-for-exit,--tpu-disable-quic,--tpu-enable-udp,--block-verification-method blockstore-processor(switch tounified-scheduler).Removed CLI arguments:
--use-quic,--use-udp.
Deprecations:
--enable-accounts-disk-index— use--accounts-index-limitinstead.--accounts-db-access-storages-method mmapCLI
pingcommand (removed in v4.1).
Agave 4.0 lays the groundwork for Alpenglow and the Anza 2026 roadmap ahead. Validators and developers are encouraged to begin testing with Agave 4.0 on testnet and prepare for the mainnet rollout. Stay tuned for future updates as Anza continues to improve the protocol and help Solana remain competitive at scale.