MCPcopy Index your code
hub / github.com/apache/iggy

github.com/apache/iggy @cli-0.13.1-edge.1

Chat with this repo
repository ↗ · DeepWiki ↗ · release cli-0.13.1-edge.1 ↗ · + Follow
16,522 symbols 60,723 edges 2,465 files 2,457 documented · 15%
What it actually does AI analysis from the code graph — generated when you open this
loading…
README
<a href="https://trendshift.io/repositories/14204" target="_blank"><img src="https://trendshift.io/api/badge/repositories/14204" alt="apache%2Figgy | Trendshift" style="width: 250px; height: 55px;" width="250" height="55"/></a>















<img alt="Apache Iggy" src="https://raw.githubusercontent.com/apache/iggy/refs/heads/master/assets/logo/SVG/iggy-apache-color-lightbg.svg" width="400">

Website | Getting started | Documentation | Blog | Discord | Crates

Latest Release Crate NPM PyPI Maven Central NuGet License: Apache 2.0

Crate Downloads Code Coverage Dependency Status Closed Pull Requests

Monthly Commit Activity Last Commit

Follow Apache Iggy on X Follow Apache Iggy on LinkedIn

Chat with Apache Iggy community on Discord


What is Apache Iggy (Incubating)?

Iggy is a persistent message streaming platform written in Rust, supporting QUIC, WebSocket, TCP (custom binary specification) and HTTP (regular REST API) transport protocols, capable of processing millions of messages per second at ultra-low latency.

Iggy provides exceptionally high throughput and performance while utilizing minimal computing resources.

This is not yet another extension running on top of existing infrastructure, such as Kafka or SQL database.

Iggy is a persistent message streaming log built from the ground up using low-level I/O with thread-per-core shared nothing architecture, io_uring and compio for maximum speed and efficiency.

The name is an abbreviation for the Italian Greyhound - small yet extremely fast dogs, the best in their class. See the lovely Fabio & Cookie ❤️


Features

  • Highly performant, persistent append-only log for message streaming
  • Very high throughput for both writes and reads
  • Low latency and predictable resource usage thanks to the Rust compiled language (no GC) and io_uring.
  • User authentication and authorization with granular permissions and Personal Access Tokens (PAT)
  • Support for multiple streams, topics and partitions
  • Support for multiple transport protocols (QUIC, WebSocket, TCP, HTTP)
  • Fully operational RESTful API which can be optionally enabled
  • Available client SDK in multiple languages
  • Thread per core shared nothing design together with io_uring guarantee the best possible performance on modern Linux systems.
  • Works directly with binary data, avoiding enforced schema and serialization/deserialization overhead
  • Custom zero-copy (de)serialization, which greatly improves the performance and reduces memory usage.
  • Configurable server features (e.g. caching, segment size, data flush interval, transport protocols etc.)
  • Server-side storage of consumer offsets
  • Multiple ways of polling the messages:
  • By offset (using the indexes)
  • By timestamp (using the time indexes)
  • First/Last N messages
  • Next N messages for the specific consumer
  • Possibility of auto committing the offset (e.g. to achieve at-most-once delivery)
  • Consumer groups providing the message ordering and horizontal scaling across the connected clients
  • Message expiry with auto deletion based on the configurable retention policy
  • Additional features such as server side message deduplication
  • Multi-tenant support via abstraction of streams which group topics
  • TLS support for all transport protocols (TCP, WebSocket, QUIC, HTTPS)
  • Connectors - sinks, sources and data transformations based on the custom Rust plugins
  • Model Context Protocol - provide context to LLM with MCP server
  • Optional server-side as well as client-side data encryption using AES-256-GCM
  • Optional metadata support in the form of message headers
  • Optional data backups and archiving to disk or S3 compatible cloud storage (e.g. AWS S3)
  • Support for OpenTelemetry logs & traces + Prometheus metrics
  • Built-in CLI to manage the streaming server installable via cargo install iggy-cli
  • Built-in benchmarking app to test the performance
  • Single binary deployment (no external dependencies)
  • Running as a single node (clustering based on Viewstamped Replication will be implemented in the near future)

server

files structure


Architecture

This is the high-level architecture of the Iggy message streaming server, where extremely high performance and ultra low and stable tail latencies are the primary goals. The server is designed to handle high throughput and very low latency (sub-millisecond tail latencies), making it suitable for real-time applications. For more details, please refer to the documentation.

server


Version

The official releases follow the regular semver (0.7.0) or have latest tag applied (apache/iggy:latest).

We do also publish edge/dev/nightly releases (e.g. 0.7.0-edge.1 or apache/iggy:edge), for both, SDKs and the Docker images, which are typically compatible with the latest changes, but are not guaranteed to be stable, and as the name states, are not recommended for production use.


Roadmap

  • Clustering & data replication based on VSR (coming soon)

Supported languages SDK

C++ is work in progress.


CLI

The interactive CLI is implemented under the cli project, to provide the best developer experience. This is a great addition to the Web UI, especially for all the developers who prefer using the console tools.

Iggy CLI can be installed with cargo install iggy-cli and then simply accessed by typing iggy in your terminal.

CLI

Web UI

There's a dedicated Web UI for the server, which allows managing the streams, topics, partitions, browsing the messages and so on. This is an ongoing effort to build a comprehensive dashboard for administrative purposes of the Iggy server. Check the Web UI in the /web directory. The docker image for Web UI is available, and can be fetched via docker pull apache/iggy-web-ui.

Web UI


Connectors

The highly performant and modular runtime for statically typed, yet dynamically loaded connectors. Ingest the data from the external sources and push it further to the Iggy streams, or fetch the data from the Iggy streams and push it further to the external sources. Create your own Rust plugins by simply implementing either the Source or Sink trait and build custom pipelines for the data processing.

## Configure a sink or source connector, depending on your needs in its own config file.
type = "sink"
key = "quickwit"
enabled = true
version = 0
name = "Quickwit sink"
path = "target/release/libiggy_connector_quickwit_sink"
plugin_config_format = "yaml"

[[streams]]
stream = "qw"
topics = ["records"]
schema = "json"
batch_length = 1000
poll_interval = "5ms"
consumer_group = "qw_sink_connector"

[transforms.add_fields]
enabled = true

[[transforms.add_fields.fields]]
key = "service_name"
value.static = "qw_connector"

[[transforms.add_fields.fields]]
key = "timestamp"
value.computed = "timestamp_millis"

[transforms.delete_fields]
enabled = true
fields = ["email", "created_at"]

Model Context Protocol

The Model Context Protocol (MCP) is an open protocol that standardizes how applications provide context to LLMs. The Iggy MCP Server is an implementation of the MCP protocol for the message streaming infrastructure. It can be used to provide context to LLMs in real-time, allowing for more accurate and relevant responses.

server


Docker

The official Apache Iggy images can be found in Docker Hub, simply type docker pull apache/iggy to pull the image.

You can also find the images for all the different tooling such as Connectors, MCP Server etc. at Docker Hub.

Please note that the images tagged as latest are based on the official, stable releases, while the edge ones are updated directly from latest version of the master branch.

You can find the Dockerfile and docker-compose in the root of the repository. To build and start the server, run: docker compose up.

Additionally, you can run the CLI which is available in the running container, by executing: docker exec -it iggy-server /iggy.

Keep in mind that running the container on the OS other than Linux, where the Docker is running in the VM, might result in the performance degradation.

Also, when running the container, make sure to include the additional capabilities, as you can find in docker-compose file:

cap_add:
  - SYS_NICE
security_opt:
  - seccomp:unconfined
ulimits:
  memlock:
    soft: -1
    hard: -1

Configuration

The default configuration can be found in config.toml file in core/server directory.

The configuration file is loaded from the current working directory, but you can specify the path to the configuration file by setting IGGY_CONFIG_PATH environment variable, for example export IGGY_CONFIG_PATH=core/server/config.toml (or other command depending on OS).

When config file is not found, the default values from embedded config.toml file are used.

For t

Extension points exported contracts — how you extend this code

MessageBus (Interface)
Point-to-point message delivery between consensus participants. `Ok(())` means "accepted for delivery" - NOT "delivered [7 …
core/message_bus/src/lib.rs
PostgresOps (Interface)
Trait for PostgreSQL fixtures with common container operations. [6 implementers]
core/integration/tests/connectors/fixtures/postgres/container.rs
StateHandler (Interface)
Per-command handler for a given state type. Each command struct implements this for the state it mutates. Returns a `Byt [19 …
core/metadata/src/stm/mod.rs
Sizeable (Interface)
Trait for types that return their size in bytes. [9 implementers]
core/common/src/traits/sizeable.rs
WireEncode (Interface)
Encode a wire type into a caller-owned buffer. Buffer-first design: the caller controls allocation. The `to_bytes()` co [98 …
core/binary_protocol/src/codec.rs
CommandCode (Interface)
TCP command codes for Iggy wire protocol. Used by both blocking and async TCP clients. [10 implementers]
foreign/java/java-sdk/src/main/java/org/apache/iggy/serde/CommandCode.java
Plane (Interface)
Shared consensus lifecycle interface for control/data planes. This abstracts the VSR message flow: - request -> prepare [5 …
core/consensus/src/lib.rs
CliCommand (Interface)
(no doc) [49 implementers]
core/cli/src/commands/cli_command.rs

Core symbols most depended-on inside this repo

unwrap
called by 4218
foreign/java/java-sdk/src/main/java/org/apache/iggy/client/blocking/tcp/FutureUtil.java
map
called by 1049
foreign/java/external-processors/iggy-connector-flink/iggy-flink-examples/src/main/java/org/apache/iggy/flink/example/StreamTransformJob.java
push
called by 572
core/consensus/src/impls.rs
clone
called by 564
core/shard/src/lib.rs
get
called by 542
core/consensus/src/vsr_timeout.rs
clone
called by 501
core/common/src/locking/tokio_lock.rs
iter
called by 422
core/common/src/types/send_messages2.rs
decode
called by 375
core/server/src/binary/dispatch.rs

Shape

Method 8,993
Function 4,731
Class 1,980
Struct 321
Enum 284
Interface 193
TypeAlias 16
FuncType 4

Languages

Rust67%
Java14%
Go9%
C#7%
TypeScript2%
Python1%

Modules by API surface

foreign/go/errors/errors_gen.go817 symbols
core/server/src/metadata/reader.rs124 symbols
core/consensus/src/impls.rs116 symbols
core/common/src/types/message/user_headers.rs104 symbols
core/connectors/sinks/http_sink/src/lib.rs96 symbols
core/connectors/sinks/influxdb_sink/src/lib.rs80 symbols
foreign/csharp/Iggy_SDK/IggyClient/Implementations/TcpMessageStream.cs67 symbols
core/connectors/sources/influxdb_source/src/lib.rs65 symbols
core/harness_derive/src/attrs.rs58 symbols
foreign/csharp/Iggy_SDK/IggyClient/Implementations/HttpMessageStream.cs56 symbols
core/connectors/sources/postgres_source/src/lib.rs56 symbols
foreign/java/java-sdk/src/test/java/org/apache/iggy/message/HeaderValueTest.java55 symbols

Datastores touched

(mongodb)Database · 1 repos
mydbDatabase · 1 repos
dbDatabase · 1 repos
analyticsDatabase · 1 repos
logsDatabase · 1 repos
storageDatabase · 1 repos

For agents

$ claude mcp add iggy \
  -- python -m otcore.mcp_server <graph>

⬇ download graph artifact

Ask about this repo answers extend the page