Silverback is a message bus and broker integration library for .NET. It helps you build event-driven architectures and asynchronous workflows with first-class support for Apache Kafka and MQTT.
Silverback aims to be both high-level (consistent configuration and developer experience) and broker-aware. Kafka is a first-class citizen: features like partition-based parallelism, keys/partitioning, tombstones, Schema Registry integration, idempotency, and transactions are surfaced where they matter, instead of being abstracted away.
- Kafka-first, not Kafka-only – a consistent API across brokers, while still leveraging Kafka-specific capabilities.
- Reliable by design – transactional outbox, error policies, and storage-backed features.
- Operational usability – structured logging, diagnostics, and tracing.
- Built-in cross-cutting features – headers, validation, encryption, chunking, batching.
- Testability – in-memory broker mocks and end-to-end helpers.
Documentation, guides, and samples are available here: https://silverback-messaging.net
Silverback is modular – reference only what you need.
Core:
- Silverback.Core – message bus and core messaging components.
- Silverback.Core.Model – message semantics for event-driven/CQRS scenarios.
Broker integration:
- Silverback.Integration.Kafka – Kafka support.
- Silverback.Integration.Mqtt – MQTT support.
Optional features:
- Silverback.Core.Rx – Rx.NET integration.
- Silverback.Newtonsoft – Newtonsoft.Json serialization.
- Silverback.Kafka.SchemaRegistry – Confluent Schema Registry integration.
Storage (for outbox, client-side offsets, distributed locks):
- Silverback.Storage.PostgreSql
- Silverback.Storage.Sqlite
- Silverback.Storage.EntityFramework
- Silverback.Storage.Memory
Testing:
Starting with v5, Silverback targets the latest .NET LTS version only.
services.AddSilverback()
.WithConnectionToMessageBroker(options => options.AddKafka())
.AddKafkaClients(clients => clients
.WithBootstrapServers("PLAINTEXT://localhost:9092")
.AddProducer(producer => producer
.Produce<MyMessage>(endpoint => endpoint.ProduceTo("my-topic")))
.AddConsumer(consumer => consumer
.Consume<MyMessage>(endpoint => endpoint.ConsumeFrom("my-topic"))));See the docs site for guides, API reference, and runnable examples:
See CONTRIBUTING.md.
MIT License. See LICENSE.