Connect
Standard MQTT over TLS or WebSocket. mosquitto, paho-mqtt, mqtt.js or a browser client — no SDK, no sidecar, no proxy. Two commands bring the stack up and exercise an allowed message end to end.
TrailMQ is an MQTT broker built for auditable, policy-controlled messaging.
TrailMQ authenticates standard MQTT clients, enforces role and topic rules, and records attributable allow and deny decisions for later review—without a TrailMQ SDK, proxy or sidecar.
This is what TrailMQ 3.1.0 does today, from a clean clone, in about five minutes plus the first image pull.
Standard MQTT over TLS or WebSocket. mosquitto, paho-mqtt, mqtt.js or a browser client — no SDK, no sidecar, no proxy. Two commands bring the stack up and exercise an allowed message end to end.
Every action passes two independent gates: the role's own permissions and the topic rule that scopes where it applies. Unknown namespaces are denied by default. Evaluation rules are managed through the REST API and configuration.
Allowed operations and refusals become structured records with the authenticated account, MQTT client id, action, topic, outcome and a canonical reason for denials.
Reviewers can inspect what the broker allowed or denied without reconstructing the basic decision from raw logs. TrailMQ keeps MQTT decision records distinct from its narrower system/action integrity check.
# A publisher attempts a topic its role does not cover
$ mosquitto_pub -t restricted/ops/config -m '{"setpoint":42}' -q 1 ...
Publish error: Not authorized
# The intended subscriber receives nothing on that topic — verified by byte count,
# with a permitted control subscriber proving the absence is not vacuous.
# In the product, Activity → filter Outcome: Denied
Publish refused restricted/ops/config Denied Recorded
Actor testuser
Client plantops-lf12-probe9182
Reason publish refused: acl_role_not_in_topic_scope
| Question | Broker dashboard | ACL configuration | Raw logs | TrailMQ |
|---|---|---|---|---|
| Who may publish here? | Not shown | Readable, if you know the file | Not shown | Access page, per topic and role |
| Why was this refused? | Not shown | Inferable | Correlate by hand | On the row, with the topic that was evaluated |
| Who was refused? | Connection counts | Not applicable | Client id or username, rarely both | Both, and either one finds the record |
| Was it recorded? | Not applicable | Not applicable | If retention allowed | Stated per record |
| Can edits to the history be detected? | No | No | Needs an external pipeline | For system/action entries only; MQTT decisions are outside the current check |
Scroll the table sideways to see all four columns →
Future context, baseline and plugin concepts are kept in the public product-direction notes; none ships in 3.1.0. See the current Evaluation Preview and screenshots.
A recorded allow means TrailMQ authorized and accepted the operation at the broker. It does not show message payloads or name which subscribers received them. Delivery must be checked with a real subscriber, and the public verification does exactly that.
The chain checks internal consistency over system and action entries — sign-ins, administrative changes, policy and rule changes. It is not externally anchored, not digitally signed, and does not cover message evidence, including publish and subscribe refusals. If your requirement is a tamper-checked record of individual MQTT decisions, TrailMQ 3.1.0 does not provide that today.
TrailMQ is a technical building block for traceability-sensitive systems. It is not a compliance certification, not WORM storage, and not a notarization service. A denied QoS 0 publish is silently discarded because the protocol carries no acknowledgement to refuse — documented, not hidden.
Evaluating TrailMQ with a real MQTT use case? Share your setup experience or request onboarding support. TrailMQ sends no telemetry: no topics, payloads, identities or operational metadata leave your machine.
Months later, teams need to explain who acted, which topic was evaluated and why an MQTT operation was allowed or blocked. TrailMQ keeps those access decisions attributable and reviewable instead of leaving teams to reconstruct them from unrelated configuration and logs.
A standard MQTT client requests connect, publish or subscribe.
TrailMQ resolves the account, MQTT client id and assigned role.
Role permission and namespace/topic rule must both allow the request.
The operation, identity, client, topic, outcome and denial reason remain reviewable.
You keep standard MQTT clients. TrailMQ becomes the broker endpoint for the evaluated message path and adds policy enforcement plus decision records at that boundary. Why MQTT alone is not GxP compliant
TrailMQ focuses on the broker boundary: authenticated MQTT transport, two-gate policy enforcement and attributable decision records for later review.
Define which roles may publish or subscribe and which namespace or topic rule brings an action into scope. Both gates must allow the request; unknown namespaces fail closed.
MQTT operations and refusals are recorded in a dedicated decision store. The separate hash-linked integrity verdict covers system and action entries, with that boundary stated per record.
Connect clients, users, services and configuration changes to the evidence record so later reviews can see who acted under which authority.
Not raw logs. Not binary blobs. Structured records a validation engineer, auditor, QA team or OT owner can review without a developer in the room.
Use the self-hosted Preview to review Overview, Access, Clients and Activity. Use /api/v1 and configuration for operational changes such as topic rules and user lifecycle.
See which MQTT clients are connected and what topics they access. Inspect queue state and dead-letter entries through the REST API without broker-level access.
A broker for MQTT paths whose access decisions must remain attributable, inspectable and understandable later.
Review who attempted an MQTT action, which client and topic were involved, and why the broker allowed or denied it.
You operate under GMP, and reviewers ask questions months later. Evaluate structured MQTT decision records and technical controls without treating the broker as a compliance certification.
You build the infrastructure others rely on. TrailMQ runs as a Docker-based evaluation stack, accepts existing MQTT clients and exposes reviewable records through its UI and REST API.
A conventional broker can be secured with TLS, identities and ACLs. TrailMQ combines that enforcement path with attributed decision review in one product.
TrailMQ is the MQTT broker for the evaluated path. Existing standard MQTT clients connect directly while enforcement and decision review stay in one product path.
TrailMQ serves as a technical control in support of compliance processes. It does not replace regulatory assessment or validation, but it makes the technical decisions behind MQTT traffic easier to inspect and retain.
TrailMQ is a technical control, not a compliance guarantee, certification, GMP/GxP validation, Annex 11 package or 21 CFR Part 11 package. Validation, risk assessment and procedural controls remain the responsibility of the regulated organization.
MQTT QoS, durable sessions and retained messages help with transport behavior. GMP-relevant reliability also requires evidence that the right client acted, the right policy was active, failures were handled explicitly and the record can be reviewed later.
Choose QoS, retained state and session behavior deliberately, then document where message loss, duplication, replay and reconnect behavior can affect process decisions.
Design each publish and subscribe path so client identity, role, effective topic policy and configuration state can be reviewed when an allowed or blocked action is investigated.
Review identity, client, operation, topic, outcome and denial reason as structured records instead of relying on broker logs alone. Assess the separate integrity scope explicitly.
For a deeper checklist, read how to ensure reliable MQTT messaging in GMP-regulated manufacturing
Start the public evaluation recipe, then exercise real MQTT and REST behavior with seven automated checks.
quickstart prepares runtime folders, creates local demo certificates, generates evaluation credentials and starts Secure MQTT Core.
verify checks runtime health, authenticated MQTT TLS, an end-to-end allowed publish, a blocked publish, its attributed denial, REST authentication and the system/action audit chain.
Standard MQTT clients need no TrailMQ SDK, proxy or sidecar. Point them to the TrailMQ endpoint with the intended credentials and CA.
The public 3.1.0 package is for local, non-production evaluation. Review the release notes and validation status; production or commercial use requires a separate agreement.
# Clone the TrailMQ deployment repo
git clone https://github.com/RainerGewalt/TrailMQ.git
cd TrailMQ
# Prepare and start the evaluation
./trailmq quickstart
# Exercise the product, not only container health
./trailmq verify
[PASS] Runtime ready
[PASS] MQTT TLS accepts authenticated clients
[PASS] Authorized publish reached subscriber
[PASS] Unauthorized publish was blocked
[PASS] Denial recorded with context
[PASS] REST authentication issues a token
[PASS] System/action audit chain intact
7/7 checks passed
Web UI http://localhost/trailmq/
REST API http://localhost/api/v1
MQTT TLS localhost:8883
MQTT WS ws://localhost/mqtt
MQTT can be used in regulated manufacturing, but a broker alone is not enough. The real question is whether message decisions can be controlled, explained and reviewed later.
TrailMQ moves MQTT messages, enforces access policy
and keeps attributable decisions reviewable.