A JavaScript MQTT client using async/await support QOS-0 and QOS-1.
for use in modern ES6 environments: the Browser, NodeJS, and Deno.
Use ExpressJS-like router to handle publish messages for matching topics.
- Static (
/foo
, /foo/bar
)
- Parameter (
/:title
, /books/:title
, /books/:genre/:title
)
- Parameter w/ Suffix (
/movies/:title.mp4
, /movies/:title.(mp4|mov)
)
- Optional Parameters (
/:title?
, /books/:title?
, /books/:genre/:title?
)
- Wildcards (
*
, /books/*
, /books/:genre/*
)
(Thanks to @lukeed and the excellent regexparam library!)
Docs
Targeting MQTT-3.1.1 (v4) and MQTT-5.0.0 (v5) compatibility.
Use
import mqtt_client from 'https://cdn.jsdelivr.net/npm/u8-mqtt/esm/web/index.js'
// or import mqtt_client from 'u8-mqtt'
let my_mqtt = mqtt_client()
.with_websock('wss://test.mosquitto.org:8081')
// or .with_tcp('tcp://test.mosquitto.org:1883')
.with_autoreconnect()
await my_mqtt.connect()
my_mqtt.subscribe_topic(
'u8-mqtt/demo-simple/:topic',
(pkt, params, ctx) => {
console.log('topic packet', params, pkt, pkt.json())
})
await my_mqtt.json_send(
'u8-mqtt/demo-simple/live',
{ note: 'from README example',
live: new Date().toISOString() })
Module size
Built for small bundle footprint with ES Modules (ESM) using embedded u8-mqtt-packet and regexparam libraries.
(See BundlePhobia page)
module | brotli | minified |
---|
u8-mqtt | 6587 B | 19962 B |
u8-mqtt/esm/v5.min.js | 6504 B | 19789 B |
u8-mqtt/esm/v4.min.js | 5420 B | 15379 B |
(automated sizing report)
MQTT Client sizes
minifeid | (x) | Project | Measurement |
---|
187.0KB | 12x | MQTT.js | curl -sL https://cdn.jsdelivr.net/npm/mqtt@4.0.1/dist/mqtt.min.js | wc -c |
32.3KB | 2x | paho | curl -sL https://cdn.jsdelivr.net/npm/paho-mqtt@1.1.0/paho-mqtt.min.js | wc -c |
19.8KB | 1.3x | u8-mqtt v5 | cat ./u8-mqtt/esm/web/v5.min.js | wc -c |
15.4KB | 1x | u8-mqtt v4 | cat ./u8-mqtt/esm/web/v4.min.js | wc -c |
Prior Art
The u8-mqtt
project was inspired by mqtt and mqtt-packet written for NodeJS.
The codecs of those project are written with a NodeJS ecosystem in mind: Buffer, EventEmitter, Streams.
License
BSD-2-Clause