shanewholloway / js-u8-mqtt

MQTT Client using u8-mqtt-packet -- suitable for use in the Browser, NodeJS, and Deno.land.
https://shanewholloway.github.io/js-u8-mqtt/
BSD 2-Clause "Simplified" License
57 stars 5 forks source link

u8-mqtt npm published version

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.

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