Apache Iggy 0.8.0 Release
By piotr
Release 0.8.0
Less than two months after 0.7.0, we're excited to release Apache Iggy 0.8.0 - a release focused on deep internal restructuring and hardening the path to clustering.
While 0.7.0 laid the foundations for Viewstamped Replication (VSR) consensus, 0.8.0 is about unifying the architecture: a complete wire protocol rewrite that eliminates three redundant serialization paths, a new shard crate with proper request routing, a persistent WAL journal for metadata durability, a WAL-backed ClientTable with view-change safety, new memory primitives for zero-copy message handling, initial A2A (Agent-to-Agent) protocol support for agentic workloads, and significant security improvements including user header encryption. On the SDK side, the C++ client is being revived with low-level bindings and Bazel infrastructure, while the Go SDK gained full TCP/TLS support and the Java SDK shipped async connection pooling.
Iggy Server
Wire Protocol Rewrite
The largest refactoring effort in this release is the complete unification of the wire protocol. The binary protocol layer previously had three redundant serialization paths: ServerCommand enum with a hand-rolled binary_mapper, the BytesSerializable trait for domain type serialization, and WireEncode/WireDecode for wire protocol types - all doing the same job with different APIs.
This release collapses them into one:
- Wire protocol codec and types - new
WireEncode/WireDecodetypes in thebinary_protocolcrate - Wire types for all commands - wire types and zero-copy message primitives for every command
- Sans-IO frame codec - frame codec and command dispatch table, decoupled from I/O for better testability
- ServerCommand/BytesSerializable removal - the
ServerCommandenum,binary_mapper, 45+ command structs, andBytesSerializabletrait are all deleted; wire types flow directly from transport through shard dispatch to handlers - Partitions rework - partitions refactored around
Message<H, B>with explicit ownership model, removing the old prefix/tail copy-on-write design and its aliasing problems
Clustering & VSR Consensus
Building on 0.7.0's VSR foundations, this release introduces the structural primitives needed to wire consensus into the server:
- Shard crate & IggyShard - new dedicated
shardcrate with a genericIggyShardthat dispatches incoming network messages to the correct consensus plane viaPlaneIdentity - Shard router - routes requests within shards to the appropriate handlers
- Plane trait - a unified abstraction for dispatching requests to different subsystems based on plane demux logic
- MuxPlane handles - metadata and partition handles for MuxPlane, wiring subsystems into the consensus layer
- Namespaced pipelines - independent commit progress across namespaces with per-namespace VecDeques under one global operation sequence and hash chain
- Loopback queue - loopback queue for primary self-addressed messages in consensus
- STM response threading - state machine responses now propagated back through consensus Reply body, so clients receive assigned IDs without a second query
- VSR types consolidation - consolidated VSR types into
binary_protocol - server-ng binary - new
iggy-server-ngbinary crate for the next-generation server with clustering support - ClientTable with WAL-backed commit path - client request tracking with at-most-once semantics, durably persisted through the WAL and safe across view changes
The simulator also advanced significantly with a PacketSimulator for deterministic testing, poll_messages support, Network wired into the tick loop with per-replica outboxes and replica crash simulation, and the view change protocol wired end-to-end so leader failover can now be exercised deterministically.
Persistent WAL Journal
Persistent WAL journal with recovery and compaction - metadata changes are now durably persisted to a write-ahead log with recovery and compaction support, a critical building block for cluster state durability. The partition journal was also refactored to use the Storage trait as backing storage rather than inline data.
Memory & Buffer Primitives
New memory management primitives for high-throughput message handling:
- Aligned buffer memory pool - pre-allocated aligned buffers for efficient I/O operations
- TwoHalves buffer - a split buffer using
Vec<u8>instead ofBytes, with mutable and immutable halves that share the same allocation initially and diverge on first clone - the mutable part is copied while the immutable part uses thread-safe reference counting for cheap sharing
Agentic Workloads
- A2A (Agent-to-Agent) protocol support - initial server-side support for the A2A protocol, backed by JWKS so agents from different tenants can authenticate with their own public keys, with key rotation handled without server restarts. This lands the first piece of the agentic story outlined in 0.7.0's roadmap.
Security Improvements
- User header encryption - both server-side and client-side encryption now encrypt user-defined headers alongside the message payload; previously headers were left in plaintext on disk (BREAKING)
- Random JWT secrets - empty JWT secret defaults now trigger secure random generation at startup, preventing all instances from sharing the same signing key
- SecretString credentials - credentials wrapped in
SecretStringto prevent accidental leaks in logs and debug output - Consensus header validation - fixed undefined behavior where untrusted bytes from the network were reinterpreted as Rust enum discriminants without validation
- Plaintext secrets regression test - ensures secrets are never persisted as plaintext
- Dependabot security fixes - swept up outstanding Dependabot-flagged vulnerabilities across the workspace
Notable Bug Fixes
- Consumer offset skip - prevented consumer offset from being skipped during concurrent produce and consume operations
- Consumer offsets beyond max partition range - prevented storing consumer offsets beyond the valid partition range
- Correct offset after segment deletion -
current_offsetnow reports the correct value after segment deletion - Stats semver wire alignment - fixed wire format alignment for stats using a zero sentinel
- io_uring EINVAL diagnostics - added diagnostics for shard executor io_uring failures
- Windows build fix - fixed broken Windows build for SDK and CLI
- Hostnames in server address config - SDKs accept hostnames (not just IPs) in server addresses across all transports
- Non-tty password read - CLI no longer breaks when stdin is not a tty (piped input, scripted usage)
- CLI context home directory - ensures the home directory exists before writing context files
- Iceberg sink credential provider chain - the Iceberg connector now honors the default AWS credential provider chain
Other Improvements
- Threads count and disk space in sysinfo stats - extended system stats reporting
- Delete segments via HTTP - added the delete segments command to the HTTP transport
- ServerConfig extraction - moved
ServerConfigtypes from the server into a dedicatedconfigscrate - IggyMessagesBatch::last_offset O(1) - performance improvement for batch offset lookups
Breaking Changes
- User header encryption - encryption now covers user headers in addition to payload (all SDKs updated)
- Wire protocol unification -
BytesSerializabletrait and 45+ command structs removed; wire types are the single serialization path - Stats semver wire alignment - wire format change for stats using a zero sentinel for forward compatibility
Docker images are available on Docker Hub.
SDKs
Rust
- Rust client bumped to 0.10.0
- Sans-IO frame codec and command dispatch table - decoupled from I/O for better testability and portability
- Wire types for all commands with zero-copy message primitives - foundation for the unified wire protocol
- Auto-reconnect on transport errors - automatic reconnection after server restart
- Hostname support for QUIC and WebSocket - clients now accept hostnames, not just IP addresses
- iobuf inlined into
iggy_binary_protocol- one less crate boundary for the hot path - TCP/TLS producer and consumer examples
C++
The C++ SDK is being actively revived with foundational work:
- Low-level bindings with e2e CI config - initial low-level bindings, tests, and end-to-end CI pipeline
- Consumer group functions - consumer group support in the C++ client
- Bazel building and testing infrastructure - proper build system for the C++ SDK
Java
- Async connection pooling -
FixedChannelPool-based async connection pooling for improved throughput - Async API parity with blocking client - full async API matching all blocking client methods
- Connection timeout support
- Generation-based auth for pooled channels - correct re-authentication when pooled connections are recycled
- Unified blocking TCP client - blocking client reimplemented as a thin wrapper over the async client
- TCP/TLS integration tests and examples
C#
- Async method naming convention - all async methods renamed with
Asyncsuffix following .NET conventions - SDK version in login requests
- TCP/TLS producer and consumer examples
- Integration tests rewrite - removed
DependsOnfor independent, parallelizable tests - Fixed .NET node redirection in TCP client
Go
- TCP/TLS connection - full TCP/TLS transport implementation
- Binary reader/writer - native binary protocol encoding and decoding
- Command interface - improved request handling abstraction
- SDK version in login requests
- Infinite reconnection - upgraded to go-retry v5 with infinite reconnection support
- TLS integration tests and examples
- Fixed permissions serialization and TCP client connect
- Fixed CreateUser / UpdatePermissions buffer size and stats field deserialization aligned with Rust SDK
Python
- TLS and auth args in getting-started examples
- Migrated from pip to uv for faster dependency management
Node.js (TypeScript)
- TCP/TLS integration tests and examples
- Fixed hostname verification - uses localhost instead of disabling verification
CLI
- Context create/delete commands - completes the login/logout workflow with persistent context management
- Cluster metadata command - inspect cluster metadata from the CLI
Connectors
New connectors and runtime improvements:
- InfluxDB Sink and Source - new connector for InfluxDB integration
- MongoDB sink connector - new connector for MongoDB
- Generic HTTP sink connector - configurable HTTP sink for forwarding messages to any HTTP endpoint
- Hot reload - restart a connector with new configuration without restarting the entire runtime
Learn more in the documentation.
Benchmark Dashboard
- Embeddable chart endpoints with PNG rendering - share benchmark charts via image URLs
- Latency distribution chart - log-normal fit visualization for latency analysis
- LTTB downsampling - efficient time series chart rendering for large datasets
- Auth support -
--username/--passwordflags for authenticated benchmarks - Iggy brand colors - dark mode updated to match Iggy branding
- Prettier benchmark table output - cleaner CLI reporting of benchmark runs
Web UI
- Fixed login form Enter key - Enter now submits the form instead of toggling password visibility
- Improved message_expiry handling
- UI /healthz endpoint - health check for the embedded Web UI
- Frontend dependencies updated
- Web UI bumped to 0.3.0
Helm Charts
- Helm chart validation added to CI
- Fixed install guidance and deployment defaults
- helm-docs, yamllint, and helmfmt wired into chart quality checks
CI/CD & Infrastructure
- Parallel Rust CI - tests partitioned across 2 parallel CI machines for faster feedback
- DAG-scoped test selection - Rust CI now computes the dependency DAG and runs only the tests reachable from the changed crates, with follow-ups to include binary packages for
CARGO_BIN_EXEand fix connector plugin / multi-crate PRs - Codecov everywhere - coverage uploads added for Python, Go, Node.js, and C# SDKs alongside existing Rust and Java coverage
- Post-merge CI split - monolithic post-merge job broken into focused components with hardened Codecov uploads
- Publish pipeline hardening - crate publish chain reworked, release tags gated on proven registry availability, and further publish-pipeline hardening so tag pushes only happen once the corresponding artifacts are actually live
- HTTP healthcheck container readiness - integration tests wait for real HTTP health endpoints instead of log-scraping, applied to Elasticsearch and Iceberg containers
- Binary artifact detection - pre-commit and CI checks to prevent accidental binary commits
- Typos checks - automated typo detection across the repository
- Version bump tooling - automated version bump with consistency checks across all crates
- Unified example runner - single entrypoint for running all SDK examples with TLS support
- BDD coverage -
--coverageflag for BDD tests across all SDKs - Docker actions pinned to SHA per ASF GitHub Actions allowlist
- Third-party attribution for the bundled Gradle Wrapper
- WASM build fix for
comfy-table - Rust bumped to 1.94
What's Next
Our primary focus remains completing the clustering implementation with VSR consensus. The iggy-server-ng binary introduced in 0.8.0 will become the cluster-ready server, integrating the shard crate, plane abstractions, persistent WAL journal, and namespaced pipeline work into a fully functional replicated cluster.
Other upcoming efforts:
- Server core optimizations: kTLS, DirectIO, and continued NUMA tuning
- SDK evolution with sans-IO architecture - the frame codec and wire types shipped in 0.8.0 are the foundation for transport-agnostic, fully testable client implementations
- C++ SDK completing its low-level bindings and reaching feature parity
- More connector integrations and runtime hardening
- Web UI enhancements - building on the embedded dashboard
- Agentic AI - building on the initial A2A protocol support in 0.8.0
Thanks to our amazing community and contributors for making Apache Iggy better with every release.
Join us on Discord and help shape the future of the project!