Pulse.Mqtt.Client
2.29.0
dotnet add package Pulse.Mqtt.Client --version 2.29.0
NuGet\Install-Package Pulse.Mqtt.Client -Version 2.29.0
<PackageReference Include="Pulse.Mqtt.Client" Version="2.29.0" />
<PackageVersion Include="Pulse.Mqtt.Client" Version="2.29.0" />
<PackageReference Include="Pulse.Mqtt.Client" />
paket add Pulse.Mqtt.Client --version 2.29.0
#r "nuget: Pulse.Mqtt.Client, 2.29.0"
#:package Pulse.Mqtt.Client@2.29.0
#addin nuget:?package=Pulse.Mqtt.Client&version=2.29.0
#tool nuget:?package=Pulse.Mqtt.Client&version=2.29.0
Pulse.Mqtt.Client
The high-level resilient MQTT client for .NET. It wraps the core protocol layer with reconnect supervision, re-subscription, bounded offline publishing, route templates, typed payloads, request/reply, and route-local delivery modes.
Install
dotnet add package Pulse.Mqtt.Client
Add optional packages for hosting, serializers, durable storage, alternate transports, or analyzers as needed.
Connect
var transport = new TcpTransportFactory(new TcpTransportOptions
{
Host = "broker.example.com",
Port = 8883,
UseTls = true,
});
await using var client = new ResilientMqttClient(
transport,
new ResilientMqttClientOptions
{
Connect = new MqttConnectPacket { ClientId = "service-1" },
});
await client.ConnectAsync(cancellationToken);
await client.WaitUntilConnectedAsync(TimeSpan.FromSeconds(10), cancellationToken);
Route messages
SubscribeAsync controls broker delivery. Routes control local dispatch.
var template = MqttRouteTemplate.Parse("orders/{id}");
await client.SubscribeAsync(
[template.ToTopicFilter(MqttQualityOfService.AtLeastOnce)],
cancellationToken);
using var route = client.RegisterRoute(template, async (message, values, ct) =>
{
var orderId = values["id"];
await ProcessOrderAsync(orderId, message.Payload, ct);
});
Manual acknowledgement per route
Automatic acknowledgement is the default. Use manual acknowledgement only on routes that must finish local work before the broker is acknowledged.
await using var route = await client.Route("orders/{id}")
.AtLeastOnce()
.ManualAcknowledgement()
.HandleAsync(async (message, ct) =>
{
await PersistAsync(message.Message, ct);
await message.AcknowledgeAsync(ct);
}, cancellationToken);
Typed messaging
Configure one serializer, then publish and consume typed payloads.
await client.PublishAsync(
"telemetry/device-7",
new Reading("device-7", 21.5),
MqttQualityOfService.AtLeastOnce,
cancellationToken);
Serializer packages:
Pulse.Mqtt.Serialization.JsonPulse.Mqtt.Serialization.MessagePackPulse.Mqtt.Serialization.Protobuf
Full docs: https://araxis.github.io/pulse-mqtt/guide/quick-start
| Product | Versions Compatible and additional computed target framework versions. |
|---|---|
| .NET | net8.0 is compatible. net8.0-android was computed. net8.0-browser was computed. net8.0-ios was computed. net8.0-maccatalyst was computed. net8.0-macos was computed. net8.0-tvos was computed. net8.0-windows was computed. net9.0 was computed. net9.0-android was computed. net9.0-browser was computed. net9.0-ios was computed. net9.0-maccatalyst was computed. net9.0-macos was computed. net9.0-tvos was computed. net9.0-windows was computed. net10.0 is compatible. net10.0-android was computed. net10.0-browser was computed. net10.0-ios was computed. net10.0-maccatalyst was computed. net10.0-macos was computed. net10.0-tvos was computed. net10.0-windows was computed. |
-
net10.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.17)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.17)
- Pulse.Mqtt.Core (>= 2.29.0)
-
net8.0
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.17)
- Microsoft.Extensions.Logging.Abstractions (>= 9.0.17)
- Pulse.Mqtt.Core (>= 2.29.0)
- System.IO.Pipelines (>= 9.0.17)
NuGet packages (5)
Showing the top 5 NuGet packages that depend on Pulse.Mqtt.Client:
| Package | Downloads |
|---|---|
|
Pulse.Mqtt.DependencyInjection
Dependency-injection integration for the Pulse MQTT client: AddPulseMqttClient, named clients, options binding, hosted lifecycle, and health checks. |
|
|
Pulse.Mqtt.Testing
In-memory loopback transport and test server for testing Pulse clients without a broker. |
|
|
Pulse.Mqtt.Dataflow
Dataflow source blocks for Pulse MQTT client messages, routes, acknowledged routes, and connection state transitions. |
|
|
Pulse.Mqtt.Endpoints
Minimal-API-style MapMqtt endpoints for the Pulse MQTT client: route templates with typed constraints, per-message service scopes, and subscribe-on-map. |
|
|
FluxFlow.Components.Mqtt.PulseMqtt
Concrete MQTT transport adapter for FluxFlow. Maps resolved client configuration, exact message bytes, subscriptions, and broker acknowledgements while the provider-neutral MQTT core owns client policy and workflow behavior. |
GitHub repositories
This package is not used by any popular GitHub repositories.
| Version | Downloads | Last Updated |
|---|---|---|
| 2.29.0 | 352 | 7/9/2026 |
| 2.29.0-preview.219 | 78 | 7/9/2026 |
| 2.29.0-preview.218 | 84 | 7/9/2026 |
| 2.29.0-preview.217 | 76 | 7/6/2026 |
| 2.28.0 | 172 | 7/6/2026 |
| 2.28.0-preview.215 | 73 | 7/6/2026 |
| 2.28.0-preview.214 | 71 | 7/6/2026 |
| 2.28.0-preview.213 | 83 | 7/6/2026 |
| 2.28.0-preview.212 | 78 | 7/6/2026 |
| 2.28.0-preview.211 | 73 | 7/4/2026 |
| 2.28.0-preview.210 | 82 | 7/4/2026 |
| 2.28.0-preview.209 | 73 | 7/4/2026 |
| 2.28.0-preview.208 | 96 | 7/4/2026 |
| 2.27.0 | 181 | 7/4/2026 |
| 2.27.0-preview.206 | 77 | 7/4/2026 |
| 2.27.0-preview.205 | 83 | 7/4/2026 |
| 2.27.0-preview.204 | 91 | 7/3/2026 |
| 2.27.0-preview.203 | 75 | 7/3/2026 |
| 2.27.0-preview.202 | 76 | 7/3/2026 |
| 2.27.0-preview.201 | 75 | 7/3/2026 |