| Crates.io | mqtt5-wasm |
| lib.rs | mqtt5-wasm |
| version | 0.10.0 |
| created_at | 2025-11-26 00:57:30.628283+00 |
| updated_at | 2026-01-23 02:14:39.627193+00 |
| description | MQTT v5.0 WebAssembly client and broker for browser environments |
| homepage | |
| repository | https://github.com/LabOverWire/mqtt-lib |
| max_upload_size | |
| id | 1950733 |
| size | 770,781 |
MQTT v5.0 and v3.1.1 WebAssembly client and broker for browser environments.
ws:// or wss://npm install mqtt5-wasm
[dependencies]
mqtt5-wasm = "0.10"
Build with wasm-bindgen:
cargo build --target wasm32-unknown-unknown --release --features client,broker,codec
wasm-bindgen --target web --out-dir pkg target/wasm32-unknown-unknown/release/mqtt5_wasm.wasm
import init, { WasmMqttClient } from "mqtt5-wasm";
await init();
const client = new WasmMqttClient("browser-client");
await client.connect("wss://broker.example.com:8084/mqtt");
await client.subscribe_with_callback("sensors/#", (topic, payload) => {
console.log(`${topic}: ${new TextDecoder().decode(payload)}`);
});
await client.publish("sensors/temp", new TextEncoder().encode("25.5"));
await client.disconnect();
const client = new WasmMqttClient("browser-client");
client.on_connect((reasonCode, sessionPresent) => {
console.log(`Connected: reason=${reasonCode}, session=${sessionPresent}`);
});
client.on_disconnect(() => {
console.log("Disconnected from broker");
});
client.on_error((error) => {
console.error(`Error: ${error}`);
});
await client.connect("wss://broker.example.com:8084/mqtt");
import init, { WasmBroker, WasmMqttClient } from "mqtt5-wasm";
await init();
const broker = new WasmBroker();
const port = broker.create_client_port();
const client = new WasmMqttClient("local-client");
await client.connect_message_port(port);
Monitor broker activity with lifecycle callbacks:
const broker = new WasmBroker();
broker.on_client_connect((event) => {
console.log(`Client connected: ${event.clientId}, cleanStart: ${event.cleanStart}`);
});
broker.on_client_disconnect((event) => {
console.log(`Client disconnected: ${event.clientId}, reason: ${event.reason}`);
});
broker.on_client_publish((event) => {
console.log(`Publish: ${event.topic} (${event.payloadSize} bytes, QoS ${event.qos})`);
});
broker.on_client_subscribe((event) => {
console.log(`Subscribe: ${event.clientId} -> ${event.subscriptions.map(s => s.topic)}`);
});
broker.on_client_unsubscribe((event) => {
console.log(`Unsubscribe: ${event.clientId} -> ${event.topics}`);
});
broker.on_message_delivered((event) => {
console.log(`Message delivered: packetId=${event.packetId}, QoS ${event.qos}`);
});
See the main repository for complete documentation and examples.
Licensed under either of Apache License, Version 2.0 or MIT license at your option.