stem_mqtt

An MQTT 3.1.1 / 5.0 client and embeddable broker for Elixir and Erlang, implemented in Rust (stem-mqtt) and shipped as a precompiled NIF: no Rust toolchain needed.

{:stem_mqtt, "~> 0.5"}
{:ok, broker} = StemMqtt.Broker.new(port: 0)
:ok = StemMqtt.Broker.start(broker)

{:ok, client} = StemMqtt.Client.new(host: "127.0.0.1", port: StemMqtt.Broker.port(broker))
{:ok, _} = StemMqtt.Client.connect(client)
{:ok, _} = StemMqtt.Client.subscribe(client, "sensors/#", qos: 1)
:ok = StemMqtt.Client.publish(client, "sensors/t", "21.5", qos: 1)

id = client.id
receive do
  {:stem_mqtt, ^id, {:message, %StemMqtt.Message{topic: t, payload: p}}} -> {t, p}
end

Precompiled for Linux x86_64/aarch64 (glibc), macOS x86_64/arm64 and Windows x86_64; OTP 25+.

Guide: docs/languages/elixir.md. License: MIT.