Ember does the five things a working MQTT client must do — connect, subscribe,
watch, publish, and get your existing connections in — without shipping a
browser engine's worth of overhead.
The real interface1440 × 950 · dark · two brokers, live stream
01 / What it does
Five jobs, done properly.
Connect, subscribe, watch, publish, import. Ember does not chart, script, mock
a broker or sync a team, because a feature that does not beat what is already
there is not a feature.
Connections
TCP, TLS, WebSocket and secure WebSocket; MQTT 3.1.1 and 5.0. A username and
password, your own client ID, keep-alive, clean session and a connect timeout.
TLS takes a custom CA or a client certificate and key. Last will, auto-reconnect
with backoff and automatic re-subscription belong to the connection, not to a
wizard.
mqtt://mqtts://ws://wss://MQTT 5.0
Several brokers, one window
One tab per connection, each with its own buffer, filter, subscription state and
compose draft. File them into groups you create yourself — Production, Client A,
Testing — then drag, right-click or use the row menu. Search reaches into
collapsed groups, and deleting a group never deletes a connection.
groupstabssearch
The message stream
Direction, timestamp, topic, payload, QoS and retain on a 29px row. Copy the
payload, reuse it in the composer, pin the topic or filter to it without leaving
the list. Two independent searches — by topic, and by payload, hex for binary. A
virtualised grid holds 50,000 messages without slowing the window.
QoS 0/1/2retainduplicatepause
Inspector and topics view
Click a row for pretty JSON with syntax colour, raw text, a hex dump and MQTT 5
properties; binary payloads are decoded in Rust. The topics view is one row per
topic with its latest payload, age and count, and the topic tree carries subtree
counts with one-click filtering.
JSONhexproperties
Publishing
Topic autocomplete from everything you have seen. Payloads as text, JSON, base64
or hex — binary-safe, encoded in Rust. QoS 0/1/2, retain, and MQTT 5 publish
properties: user properties, content type, response topic, correlation data,
expiry. Publish history recalls any of them in one click, and the payload field
resizes by dragging the band above it.
textbase64hexhistory
Import and export
MQTTX exports import without blocking the window, from the usual OS paths or
dropped onto it — existing connections are the usual way in. Export JSONL or CSV.
Every message is appended to a local daily log for seven days and can be replayed
read-only.
MQTTXJSONLCSV
Every day, not just the first hour
Full keyboard operation, including the stream itself. Light, dark, or follow the
system. Buffers, filters, drafts, groups and the panel size survive a restart
unless you clear them. No telemetry, no accounts, no network call you did not ask
for.
keyboardthemesrestore
Anatomy of a message row
Everything a line in the stream carries, at the density the window uses. Data is
monospace; status and direction each keep their own colour.
About 81 MB, because it bundles WebKitGTK so it runs on any distribution. Prefer
the .deb or .rpm when the system already has webkit2gtk-4.1.
git clone https://github.com/alexsofroniev/ember
cd ember
npm install
npm run app:build
Rust 1.77+ and Node 22+, plus the Tauri system dependencies for your platform.
Bundles land in src-tauri/target/release/bundle.
04 / Local
Local, and that is a promise.
No telemetry, no accounts, no update pings. Ember talks to the brokers you point
it at and nothing else.
Nothing phones home
No analytics, no crash reporting, no version check. The binary makes no network request of its own.
Passwords in the keyring
Secret Service, Keychain or Credential Manager. If no keyring exists they stay in
connections.json with mode 0600 — and Settings says so.
Session logs on disk
The daily log is a local file under the data folder, kept seven days. Settings →
Data folder shows the exact path.
05 / Credits
Made by one person.
AS
Alex Sofroniev
Design and code
Ember is designed and built by Alex Sofroniev — the interface, the Rust engine,
the releases. The source is public, the licence is MIT, and nothing in the product
depends on a private service.