mqttdeck 0.2.0

MQTT 3.1.1 / 5.0 · Linux · Windows · macOS

A featherweight MQTT workbench.

MQTT Deck 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.

MIT licensed · No account · No telemetry

formerly Ember. The first start of 0.2.0 moves your connections, history and passwords across for you — nothing to re-enter, nothing to export.

6.6MB
Binary
3.1MB
.deb package
50,000
Messages held
0
Network calls of its own
The MQTT Deck window: a rail of connections on the left, a topic tree, and a message stream with timestamps, topics and payloads in monospace.
The interface 1440 × 950 · dark · demo data

01 / What it does

Five jobs, done properly.

Connect, subscribe, watch, publish, import. MQTT Deck 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. An agent can drive the same five jobs over MCP.

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.

groups tabs search

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, and every topic carries a live message rate so a device going quiet is a number falling.

QoS 0/1/2 retain rate/s pause

Inspector and topics view

Click a row for a collapsible JSON tree, syntax-coloured text, raw, a hex dump and MQTT 5 properties; binary payloads are decoded in Rust. A diff shows what changed since the previous message on that topic, line by line. The topics view is one row per topic with its latest payload, age and count.

JSON tree diff hex properties

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.

text base64 hex history

Subscriptions with options

Every filter carries the MQTT 5 options that change what the broker sends: No Local, Retain As Published, Retain Handling and a subscription identifier. They are editable after the fact, shown as badges beside the filter, and refused on a 3.1.1 connection instead of being dropped without a word.

no-local rap rh 0/1/2 sid

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. Connections travel as JSON, YAML, XML, CSV or XLSX, one row each, subscriptions and last will included. Every message is appended to a local daily log for seven days and can be replayed read-only.

MQTTX YAML XML CSV XLSX

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.

keyboard themes restore

Agents can drive it

mqttdeck-mcp exposes the same engine to any MCP client: list connections, connect, subscribe, publish, read the stream, wait for a message. It is a bridge, not a second client — what the agent does is what you see in the window. Loopback only, token in a 0600 file, one switch to turn it off.

MCP loopback 14 tools

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.

Row actions
  • Copy the payload
  • Reuse it in the composer
  • Pin the topic
  • Filter to it

02 / Keyboard

Reachable without the mouse.

Every primary workflow has a key path, the message stream included. ⌘ replaces Ctrl on macOS.

Shortcuts

Command paletteCtrlK
New connectionCtrlN
ImportCtrlI
Topic filterCtrlF
PublishCtrlEnter
Clear this connectionCtrlShiftX
Walk the stream↑↓PgUpPgDn
Open the inspectorEnter
Connection logCtrlL
SettingsCtrl,

03 / Install

Four ways onto the machine.

Linux is where MQTT Deck is developed, tested and released from. Windows and macOS build from the same source and are expected to work, best-effort.

Package

sudo dpkg -i mqttdeck_0.2.0_amd64.deb

Needs webkit2gtk-4.1, which most current distributions already have. The package is 3.1 MB.

04 / Local

Local, and that is a promise.

No telemetry, no accounts, no update pings. MQTT Deck 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 / Agents

The window an agent can operate.

MQTT Deck speaks MCP. Point Claude Code, Cursor, Codex or any MCP client at mqttdeck-mcp and the agent works the same engine you do — same sockets, same buffer, same subscriptions.

Setup

claude mcp add mqttdeck -- mqttdeck-mcp

Anyone who can read agent.json can drive the app, so the file is mode 0600 and holds a token regenerated on every start. Settings → Agent access turns the listener off completely.

06 / Credits

Made by one person.

Alex Sofroniev

Design and code

MQTT Deck 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.

Built with

Engine
Rust · rumqttc
Shell
Tauri · system WebView
Interface
React 19 · Zustand
Text
Inter — Rasmus Andersson
Data type
JetBrains Mono — JetBrains
Protocol
MQTT 5.0 — OASIS

MIT © 2026 Alex Sofroniev Licence text