Native low-latency transport
Zero-copy framed protocol over TCP/QUIC for .NET clients. Designed for in-process and edge deployments where Kafka's TCP handshake overhead is too costly.
The .NET-native message streaming platform. No more JVM.
Drop-in Kafka replacement. Run it embedded, standalone, or clustered.
AI pipelines, schemas, and a plugin marketplace — built in, not bolted on.
Performance
99 % of producer write requests finish acked under one millisecond on Surgewave's native protocol, single-broker, NVMe-backed.
End-to-end produce path: client serializes record → native protocol frame over TCP → broker append to log → ack returned. Percentiles taken over a one-million-message run from the regression suite.
On identical hardware, Surgewave's native protocol delivers P99 produce latency 5–10× lower than Apache Kafka's Kafka-wire baseline. Same physical box, no special tuning.
No JVM GC pauses, no Scala-wrapped network thread pool. Surgewave's native protocol is binary and zero-copy; Kafka's protocol re-serializes per message. On the Kafka wire alone Surgewave is on par with Apache Kafka; the multiplier comes from switching to the native protocol.
A single Surgewave broker on commodity NVMe sustains over one million messages per second in batched-produce mode. Three-broker cluster: linear scale.
Commodity 8-core x64 box with consumer-grade NVMe SSD, 16 GB RAM. Confluent.Kafka producer with linger.ms=5, batch.size=64 KB. Records 100 bytes, key-balanced across 12 partitions.
Hot data stays on NVMe; once segments are sealed they tier to S3-compatible object storage. Consumers transparently fetch cold segments — no special client API.
Configurable per topic: max-segment-age, max-segment-size, target-tier. Default policy seals NVMe segments after 1 day, copies to RocksDB at 1 GB, ships to S3 after 7 days. Consumer reads stay transparent — cold segments are fetched on demand.
No JVM. No GC tuning. No heap sizing. Surgewave is a single .NET 10 executable, optionally Native-AOT compiled to a ~40 MB binary that starts in under a second.
-Xmx / -Xms tuning. .NET GC is self-managing.Numbers are conservative measurements; multipliers are targets from reproducible benchmarks against Apache Kafka on the same hardware. Click any tile for the methodology and chart.
Surgewave.Control — the built-in management UI. Browse topics, design pipelines visually, install plugins, and monitor throughput in real time.
One UI for every operation — topic management, consumer groups, schema registry, signed plugin marketplace, visual AI/pipeline editor, real-time throughput. No separate dashboards, no third-party monitoring stack.
From first connection through pipeline design to production observability — Surgewave.Control shows the right tools at the right moment.
Broker health, topic counts, partition spread, throughput sparklines — all on one screen. Drill into any topic with a click.
Per-partition offsets, replica placement, in-flight messages, consumer-group lag. Edit retention and compaction policies inline.
KIP-848 next-gen rebalance protocol visualised — see members, partition assignment, lag per-partition, and rebalance timeline.
Drag-drop node graph: Source → Filter → Enrich → AI-Node → Sink. With Surgewave.Ai installed, drop in RAG, embedders, agents, MCP tools.
KStream / KTable DSL visualised — sources, joins, windows, aggregations, state stores. Hot-reload the topology after edits in C# without restarting the broker.
Live trace of each agent step: retrieval hits, prompt tokens, tool calls, A2A hops, ONNX inference latency. Drill into a single span like in a tracing UI.
Avro, JSON-Schema, Protobuf. Version diff, compatibility check, evolution history. Confluent-Schema-Registry-API-compatible.
Browse, verify, install .swpkg plugins. ECDSA-signed packages show a “Verified” badge. One-click install, isolated AssemblyLoadContext.
100+ connectors (Postgres, S3, Snowflake, Kafka, …) configured via UI. Validate creds before deploy, watch state transitions live.
Per-topic bytes/sec, messages/sec, P50/P90/P99 latency percentiles. SignalR-driven real-time updates — no Grafana required.
Controller, brokers, partition leaders, ISR sets. Spot under-replicated partitions instantly. Surgewave.Fleet extends this to multi-cluster view.
One control plane for every cluster, every region. Geo-replication links, fleet-wide topic catalogue, rolling upgrades, single-sign-on across all of them.
OIDC + SASL identity providers, fine-grained ACLs per topic / group / transactional-id, RBAC roles. Edit live, no broker restart.
Every auth event, config change, plugin install, schema evolution — searchable, exportable, tamper-evident. SOC 2 / ISO 27001 ready.
Surgewave ships the features teams usually bolt on: native fast transport, a typed schema registry, a signed plugin ecosystem, AI pipeline nodes, a Blazor control plane, a cloud control plane for many clusters — and full Kafka 4.x wire compatibility on top.
Zero-copy framed protocol over TCP/QUIC for .NET clients. Designed for in-process and edge deployments where Kafka's TCP handshake overhead is too costly.
.swpkg packages signed with ECDSA or enterprise X.509/RFC-3161 timestamps. Every package ships a CycloneDX SBOM. Marketplace enforces on upload.
Built-in OpenAI / Anthropic / Ollama / xAI / Vertex AI nodes, Qdrant + pgvector retrievers, agent memory, guardrails, ONNX scoring — all as composable pipeline steps.
Confluent-compatible REST API, 11 formats out of the box (Avro, Protobuf, JSON, FlatBuffers, MessagePack, CBOR, Hyperion, Bond, Thrift, MemoryPack, Cap'n Proto, Orleans).
117+ source and sink connectors for databases, cloud stores, SaaS APIs, IoT, and AI. Each shipped as a signed .swpkg. Build your own in an afternoon.
Kafka-Streams-style DSL on top of Surgewave with stateful joins, windowing, and HTTP-queryable state stores. LINQ everywhere it makes sense.
MudBlazor admin UI per broker, plus Surgewave.Fleet as a single cloud control plane for many clusters across DCs with QUIC-linked health, governance, and lifecycle.
Run Surgewave in-process for tests, CI, and edge deployments. Same API, same guarantees — no broker container required.
Drop-in compatible with Confluent.Kafka, librdkafka, kafka-go and friends. Point your existing producers and consumers at Surgewave and migrate gradually.
One broker, many wires. Surgewave's native protocol is the fast path for new .NET clients; the Kafka 4.x wire keeps every existing client connected. Each protocol is a discoverable plugin — load only what you need.
Zero-copy framed protocol over TCP and QUIC/HTTP3 for new .NET clients. Shares the broker's wire endpoint with the Kafka protocol — auto-detected on the first frame, so one socket serves both Confluent.Kafka clients and the new native SDK.
Full Kafka 4.x RPC compatibility. Confluent.Kafka, kafka-go, librdkafka — they all connect without a code change. Migrate gradually, mix and match with the native protocol on the same broker.
Server reflection, all four streaming flavours, JSON-transcoding for plain HTTP clients. gRPC-Web for browser SDKs, QUIC/HTTP3 for low-latency over lossy networks. Polyglot client SDKs against the same broker.
QoS 0/1/2, retained messages, last-will. Bridges every IoT device into a Kafka-compatible event stream.
Speak RabbitMQ's wire to existing apps while landing every routed message on a Surgewave topic for replay and analytics.
Loss-tolerant streaming for mobile producers and edge gateways. 0-RTT resumption keeps cold reconnects under 50 ms.
Browser-native producers/consumers without a sidecar. Same auth, same topics, same offsets as the Kafka clients.
Each Surgewave use case starts from a real pain we kept hitting in .NET shops — here's what Surgewave actually does about it, and where to go next.
JVM cluster ops, ZooKeeper drift, KRaft surprise upgrades, Confluent licence math.
Kafka-wire compatibility means existing producers, consumers, and admin tools connect unchanged. Transactions stay exactly-once. Migrate one topic at a time.
Migration guide →Kafka-Streams + Flink + an ML cluster — three systems, three SREs, three bills, three failure modes.
Joins, windowing, and ONNX scoring inside a single .NET process. Native protocol round-trip lands risk decisions inside the tap-to-pay envelope.
Fraud-detection cookbook →Agent memory glued from Postgres + Redis + Pinecone + LangChain — four systems, four bills, brittle plumbing.
Topic-as-memory, embedded vector retrievers, signed OpenAI / Ollama / Qdrant pipeline nodes. Guardrails veto outputs in-line.
AI docs →A million vehicles × per-second state updates × replay-the-last-week = Kafka segments thrash, JVM GC stalls.
Per-entity partitioning, native sub-ms transport, RocksDB for hot keyed state, S3-direct for cold replay — weeks of history cost cents per GB.
FleetTracker & DigitalTwin samples →
Kafka and Redpanda lock you into one log-segment engine. Keyed lookups become partition scans, cold archives stay on hot SSD — or you pay extra for someone's tiered-storage add-on.
Pick the engine per topic. Arrow columnar for analytics, RocksDB for keyed state, S3-direct for cold archive, NVMe-direct for hot paths — or write your own against IStorageEnginePlugin.
Gateways speak MQTT, analytics wants Kafka — you cobble a bridge service nobody owns.
MQTT in, Kafka out — same broker, same topic, no bridge service. Embedded broker on the edge gateway itself.
IoT cookbook →A structured side-by-side — broken down by what operators care about: Admin, Performance, Cost, Reliability, Capability.
| Criterion | Surgewave | Apache Kafka | Redpanda | Aeron |
|---|---|---|---|---|
| Admin & Operations | ||||
| Deployment | Single binary, no JVM | JVM cluster + KRaft / ZK | Single binary (C++) | Library inside your process |
| Coordination | Built-in Raft | KRaft or ZooKeeper | Built-in Raft | None (transport only) |
| Embedded mode | In-process (surgewave://embedded) |
No | No | Yes (it’s a library) |
| Control plane | Per-broker Control + fleet view | Kafka Admin API + 3rd-party | Redpanda Console | External tooling |
| Performance | ||||
| P99 latency | Sub-ms (native), Kafka-baseline on Kafka wire | JVM-bounded, ~ms | Sub-ms (C++ broker) | Microsecond UDP |
| Throughput | >1M msg/s/broker | >1M msg/s/broker | ~1.5M msg/s/broker | 10M+ msg/s (in-memory) |
| Runtime | .NET 10 / C# 14, AOT-ready | JVM (Scala/Java) | C++ (Seastar) | JVM |
| Cost & Footprint | ||||
| Memory | No JVM heap, GC-aware | JVM heap tuning required | Thread-per-core (no GC) | JVM heap |
| Cold storage | Tiered to S3/Azure/GCS | 3.6+ tier (preview) | Tiered (managed only) | No |
| Disk format | Arrow, RocksDB, S3, NVMe-direct | Kafka segment log | Custom segment log | Off-heap buffers |
| Reliability | ||||
| Replication | Per-partition ISR + Raft | ISR-based | Raft (per-partition) | No persistence |
| Exactly-once | Producer Tx + WriteTxnMarkers | Yes (Kafka EOS) | Yes | App-layer |
| Geo-replication | Cluster Linking + Mirror | MirrorMaker 2 | Built-in linking | None |
| Capability | ||||
| Wire protocols | Kafka 4.x + Native + gRPC + AMQP + MQTT + WebSocket + QUIC | Kafka only | Kafka only | UDP/multicast |
| Plugin model | Signed .swpkg, ALC isolation |
JAR (Connect, MM2) | Wasm transforms | None |
| Stream processing | Surgewave.Streams (KIP-1071-aware) | Kafka Streams | Console transforms | None |
| AI pipelines | Built-in nodes (RAG, agents, ONNX) | External tooling | External tooling | None |
| Schema Registry | Confluent-API compatible, built-in | External (Confluent SR) | External (Confluent SR) | None |
Public head-to-head benchmarks land with 1.0; the table above summarises architecture, not measured numbers. See the full Surgewave vs Kafka write-up for the migration story.
Native packages for every major OS, plus a portable container image. Surgewave has no JVM dependency — the broker is one self-contained binary.
winget install Kuestenlogik.Surgewave
# or download surgewave-x.y.z-win-x64.msi from
# github.com/Kuestenlogik/Surgewave/releases
# Debian / Ubuntu
sudo apt install ./surgewave_x.y.z_amd64.deb
# RHEL / Fedora
sudo rpm -i surgewave-x.y.z.x86_64.rpm
docker run -d \
-p 9092:9092 -p 5050:5050 \
ghcr.io/kuestenlogik/surgewave:latest
helm repo add surgewave https://surgewave.io
helm install surgewave surgewave/surgewave
# Run Surgewave in-process for tests, CI, edge gateways
dotnet add package Kuestenlogik.Surgewave.Broker
# Then in code:
var broker = await SurgewaveRuntime.Create().StartAsync();
Want a deeper integration? See the embedded-broker guide, or browse the full download options.
Pick what you need. We'll show the exact lines for your setup.
Which components do you need?
Prefer code? Open the 5-minute quickstart with the .NET, Go, and Python client SDKs.
Migrating from Apache Kafka?
Surgewave speaks the Kafka 4.x wire protocol on the standard Kafka endpoint.
Existing Confluent.Kafka and librdkafka-based clients connect
unchanged. When you're ready for lower latency, swap the NuGet package and
stay on the same API.
# Before — your Kafka client
bootstrap.servers=kafka-1:9092,kafka-2:9092,kafka-3:9092
# After — same client, same config syntax, same cluster shape
bootstrap.servers=surgewave-1:9092,surgewave-2:9092,surgewave-3:9092
Built to learn from
Three complementary on-ramps. Pick the one that fits how you learn — structured tutorial, real apps to copy from, or jump straight into the CLI with your AI assistant alongside.
A hands-on, self-paced tutorial: build real applications while learning Surgewave concepts. Multiple learning paths, guided walkthroughs via Shepherd.js, exercises with starter code and reference solutions.
Open BootcampFull reference applications you can clone, run, and adapt — Kafka-compat migration, IoT fleet, RAG pipeline, event-sourcing, multi-protocol gateway, signed plugin walkthroughs and more. Each sample runs end-to-end against a local broker.
Browse samplesA first-class command line covering every cluster operation, and a built-in Model Context Protocol server so Claude, Cursor and other agentic IDEs can drive your broker directly — inspect topics, replay messages, register schemas, profile performance, all from a chat window.
CLI & MCP docsSovereign by design
Surgewave is a Küstenlogik product, engineered and maintained in Germany under EU data protection law. As the conversation about European technological sovereignty gets louder, the answer to “what do we actually own” needs to be short: this runs on your iron, under your rules.
Roadmap
What just shipped — and what’s next on the chart.
Recently shipped
Unmodified Kafka clients connect on port 9092 — Confluent.Kafka, librdkafka, tools and monitoring work unchanged. No ZooKeeper, single binary.
A low-latency framed transport for .NET clients alongside the Kafka wire, with a published spec so other languages can implement it. Magic byte SRWV selects the native handler on the same port.
86 Kuestenlogik.Surgewave.* packages on nuget.org, multi-arch container images on GHCR + Docker Hub, Windows MSI / .deb / .rpm installers.
dotnet tool install -g Kuestenlogik.Surgewave.Tool — 70+ admin commands plus broker lifecycle, all under the surgewave command.
Akka.Streams sources/sinks/flows and an Akka.Persistence journal + snapshot store, both backed by Surgewave — Kuestenlogik.Akka.Surgewave.Streams + .Persistence.
FileSystem, in-memory, Arrow, RocksDB, SQLite, Parquet, LMDB, DuckDB, NVMe-direct, S3-direct — with a hot/cold tier that offloads sealed segments to S3 / Azure / GCS, transparent on the read path.
Surgewave native and the Kafka wire on identical hardware, full configuration disclosed. The CI regression harness already tracks throughput + transport overhead; the documented run lands with 1.0.
The native protocol has a public wire spec; first-party clients in other languages extend the compatibility story beyond .NET to the full Kafka-client ecosystem.
Broker as a pure coordination layer: producers write straight to object storage without ISR replication, readers fetch from object storage. Topic-level opt-in, building on the existing S3 engine.
Five AI pipeline nodes (LLM chat, embeddings, vector read/write, prompt template) plus a single-shot RAG node move into the Apache-2.0 core, so a minimal AI pipeline runs without any commercial extension.
The in-house linearizability checker catches anomalies in our own runs; an external Jepsen run against a clustered docker-compose is the industry-standard trust signal.
Full detail and ordering live in the ROADMAP.md.
Surgewave is built and maintained by Küstenlogik. When you need production-grade Surgewave — performance tuning, custom plugins, Kafka migration, architecture review — talk to the people who wrote it.
24/7 incident response with an SLA. We pick up the pager when your cluster does. Triage, root-cause, fix, postmortem — all by the people who wrote the code paths.
Need a connector for an in-house system? A bespoke storage engine for your hot path? An AI pipeline node tied to your model registry? We build, sign, and ship it as a regular .swpkg.
Pre-deployment audit before you put Surgewave on the critical path: capacity planning, replication topology, security review, failure-mode walkthrough. Two-week engagement, written report.
Coming from Kafka, Redpanda, or a custom queue? We run the migration, train your platform team alongside, and stick around through the first week of production.
FAQ
The short version. Deeper dives live in the docs and the comparison pages.
A Kafka-wire-compatible message broker written in .NET 10. It accepts unmodified Kafka 4.x clients on port 9092 and adds a native binary protocol for lower-latency .NET workloads — broker, streams, schema registry, and control plane all on one runtime, with an embedded mode for tests and edge.
Yes. Surgewave speaks the Kafka 4.x wire protocol, so any Kafka client (Confluent.Kafka, librdkafka, …) works unchanged — just point bootstrap.servers at Surgewave. Switch to the native protocol later for lower latency, no rewrite required.
Same wire protocol, no JVM, no ZooKeeper, single binary, and an embedded mode that makes integration tests run without Docker. Full migration story on the Surgewave vs Kafka page.
Both drop the JVM — Redpanda bets on C++, Surgewave on .NET 10. If your stack is .NET, Surgewave gives you broker, streams and plugins on the same runtime, with an Apache-2.0 core (not BSL). Details on Surgewave vs Redpanda.
Aeron is a transport library, not a persistent broker — no durable log, no Kafka API. Surgewave is a broker with replayable storage that also offers a low-latency native transport. See Surgewave vs Aeron.
No. Coordination is built in (KRaft-style Raft, in-process). For tests you can run an embedded in-memory broker — no container, no external services:
await using var surgewave = new EmbeddedSurgewave();
await surgewave.StartAsync();
.NET 10 or later. Surgewave uses modern C# and is tuned for performance with Span<T>, Memory<T> and SIMD.
Yes — the core is Apache-2.0 (GitHub). Enterprise features ship as separately-licensed plugins, so the broker, clients and core tooling stay permissively licensed.
Surgewave runs a single-node broker, a full cluster, or an embedded in-process mode from the same binaries. Try it in five minutes.
Single binary. No JVM. Runs in 30 seconds.
Custom plugins, paid support, or architecture review? Talk to us · See our services