Apache Iggy 0.7.0 Release
By piotr
Release 0.7.0
Less than three months after 0.6.0, we're excited to release Apache Iggy 0.7.0 — a massive step toward production-ready clustering.
While 0.6.0 was about the io_uring rewrite, 0.7.0 is about what comes next: replication. We've built the foundations for Viewstamped Replication (VSR) consensus, redesigned how the server manages metadata, added NUMA awareness and socket migration, embedded the Web UI directly into the server binary, and shipped important improvements across all SDKs and connectors.
New Committer
We're thrilled to welcome Łukasz Zborek as a new Apache Iggy committer! Łukasz has been a core contributor to our C# SDK and is the #8 contributor in our repository. His work goes far beyond building a top-notch C# SDK — he has helped find and fix issues across many areas of the project. His contributions span CI, BDD testing, core features like TLS support, reconnection handling, and the high-level consumer/publisher APIs. Congratulations, Łukasz!
Iggy Server
Clustering & VSR Consensus
The primary focus of 0.7.0 is laying the groundwork for clustering with Viewstamped Replication (VSR) — a critical milestone for fault-tolerant, replicated deployments.
We've implemented the core consensus building blocks that will power the upcoming cluster mode:
- VSR view_change — the view change protocol from the VSR-revisited paper, enabling leader election and fault recovery
- Replication pipeline — core replication machinery including
on_ack,send_prepare_ok, andreplicate, with on_replicate for data propagation between nodes - Deterministic tick-based timeouts — precise, deterministic timeout mechanism essential for correct consensus behavior
- Metadata snapshots — a three-layer snapshot system enabling state transfer between replicas for recovery and bootstrapping
- Partitions module — extracted partition and segment logic into a dedicated crate, with a unified Partitions trait that abstracts both single-node and replicated operations behind the same interface
- Pipeline decoupling — made
VsrConsensusgeneric over thePipelinetrait, so implementations can be swapped and memory usage is reduced by keeping only headers in the pipeline - Message bus — internal message bus for inter-component communication
- Simulator — initial version of a distributed system simulator for testing VSR behavior in a controlled, deterministic environment
LeftRight-Based Global Metadata
We've replaced the distributed slab ECS approach with a centralized LeftRight-based global metadata store. This is one of the largest refactoring efforts in this release — shards now read from a shared, lock-free snapshot while shard 0 exclusively handles writes. The result is consistent metadata across all shards without per-read synchronization, and a much simpler concurrency model that's easier to reason about and extend for clustering.
NUMA Awareness
The server now features NUMA awareness with configurable CPU affinity and memory binding per NUMA node. On multi-socket machines, this keeps each shard's memory local to its CPU, reducing cross-socket latency and improving cache efficiency — an important optimization for high-throughput deployments.
Socket Migration Across Shards
TCP socket migration eliminates cross-shard forwarding overhead. When a client connects to a shard that doesn't own its target partition, the socket is migrated to the correct shard instead of forwarding every request. This significantly reduces latency for workloads spread across multiple shards.
Embedded Web UI
The Web UI can now be embedded directly into the server binary, served at the /ui endpoint. No separate deployment needed — just start the server and open the dashboard. The feature is enabled by default and can be toggled via http.web_ui in the server config.
Cooperative Partition Reassignment
Cooperative partition reassignment for consumer groups eliminates message duplicates during rebalancing. Previously, partitions were moved instantly on join — the old consumer could still be mid-processing while the new one polled the same uncommitted offset. The new approach introduces a "pending revocation" phase where partitions are held until the committed offset catches up or a timeout is reached, ensuring clean handoff without duplicates.
Log Rotation
Configurable log rotation based on file size and retention policies prevents unbounded log growth in long-running deployments.
Breaking Changes
- Reserved u64 in message header — added for forward-compatible protocol extensions (all SDKs updated)
- Arbitrary header key kinds —
HeaderKeynow supports non-string types, matchingHeaderValuecapabilities - MessagePack replaces bincode — state persistence switched to
msgpackfrom the unmaintainedbincode - Compile-time env var mappings — new
configs_derivecrate replaces runtime path inference, making environment variable handling explicit and unambiguous;server.tomlrenamed toconfig.toml - Legacy C++ client removed — the old C++ client has been removed from the repository
Security Improvements
- Hardened deserializers — all command deserializers now use checked reads instead of direct byte indexing, preventing malformed packets from crashing the server
- Password hashing before state log — fixed a critical bug where plaintext passwords were persisted to the state log, causing login failures after server restart
- Auth required for stats — the
/statsendpoint now requires authentication - Permission inheritance fixes — consolidated permissions into the metadata crate and fixed broken inheritance (e.g.,
manage_streamnow correctly impliesread_stream)
Notable Bug Fixes
- Memory leak in segment rotation — sealed segments retained index buffers and open file writers indefinitely; under heavy load, memory could grow unbounded
- Message cleaner — new segments ignored the topic's configured
message_expiry, causing messages to never be cleaned up - Stream stats corruption — purging one topic incorrectly zeroed stats for the entire stream
- Segment rotation race — prevented panic when segment rotates during async persistence
- IOV_MAX overflow — chunked vectored writes for large message batches
- Message availability during persistence — messages remain readable during async disk I/O
- Graceful shutdown — all shards shut down cleanly when one panics, with panic propagation from connection handlers and critical task failure handling
- Consumer group leave race — fixed race condition in consumer group leave and index corruption in
append_messages - Stale consumer group clients — properly handled stale clients in consumer group operations
- PAT broadcast across shards — personal access tokens created via HTTP are now broadcast to all shards, fixing cross-protocol visibility
- Empty permission maps crash — fixed server crash on restart when users had empty permission maps
- Entity ID gaps on bootstrap — handled ID gaps after deletions during server restart
Docker images are available on Docker Hub.
SDKs
All SDKs now have auto-publishing enabled — edge and RC versions are automatically published to their respective package registries on every merge.
- Rust — improved high-level producer/consumer with ordered sharding, graceful
shutdown(), and message loss prevention; fixedmax_in_flightpermit acquisition and client reconnection after disconnect - C# — .NET 10 support,
DeleteSegmentsandGetSnapshotmethods,TimeSpan-based expiry handling, source link for debugging - Java — fluent builder API (
Iggy.tcpClientBuilder().blocking()), semantic exception hierarchy, BDD tests with Cucumber, user headers support, TLS for HTTP, memory leak detection in CI - Python —
AsyncIteratorinterface forIggyConsumer,message_expiryparameter increate_topic, Windows build support - Node.js (TypeScript) — comprehensive JSDoc comments for improved API documentation and IDE support
- Go — leader redirection for cluster failover handling
Connectors
New connectors and runtime improvements:
- Apache Pinot connector — new external connector for Apache Pinot integration
- Postgres sink & source — extended with JSON and raw message format support, multiple processing modes (mark/delete), and comprehensive integration tests
- Prometheus metrics —
/metricsand/statsendpoints for monitoring connector runtime, per-connector message counters, CPU/memory tracking - Quickwit sink tests — integration test coverage for the Quickwit sink
- Telemetry logging — structured logging with telemetry for connectors and MCP
- Retry mechanism — configurable retry with exponential backoff for the HTTP config provider
- State loss prevention and memory leak fix — critical reliability improvements for long-running connectors
Learn more in the documentation.
Web UI
- Embedded into the server binary (see above)
- User headers now display decoded values based on their type (string, int, float, bool, etc.) with expandable rows for type details
- Checksum displayed as hex alongside raw value
- Fixed root user ID (now 0 instead of 1)
- Fixed logout side-effect on page load
- Refactored from SSR to SPA with client-side authentication
- Benchmark dashboard upgraded to Yew 0.22
Helm Charts
- Fixed volume mount path and added io_uring requirements for proper Kubernetes deployment
CI/CD & Infrastructure
- ARM64 builds — native ARM64 runners with shared Docker cache, aarch64 builds in pre-merge and release workflows
- Edge releases — rolling pre-releases with versioned Docker tags (e.g.,
0.6.1-edge.2) and binary tarballs - Auto-publish — all SDKs (Rust, C#, Java, Python, Node.js, Go) automatically publish edge/RC versions on merge
- Code coverage — Codecov integration for Rust and Java
- Pre-commit hooks — local validation for all SDKs matching CI tools and versions
- Test harness —
iggy_harnessproc macro for consistent, boilerplate-free test infrastructure with crash detection
What's Next
Our primary focus remains completing the clustering implementation with VSR consensus. The foundations laid in 0.7.0 — view change, replication pipeline, metadata snapshots, partitions module — will come together into a fully functional replicated cluster in the upcoming releases.
Other upcoming efforts:
- Server core optimizations: kTLS, DirectIO, and continued NUMA and socket migration tuning
- SDK evolution with synchronous clients and sans-io architecture for better testability and portability
- More connector integrations and runtime hardening
- Web UI enhancements — building on the newly embedded dashboard
- Agentic AI exploration for streaming-based agent coordination
Thanks to our amazing community and contributors for making Apache Iggy better with every release. A special welcome to our new committer Łukasz Zborek!
Join us on Discord and help shape the future of the project!