The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.


mqtt-simple - Very simple MQTT implementation


 mqtt-simple -h -c -s "sensors/#" -s "debug/#" -s "#"

 mqtt-simple -h -p "example/unretained" -m "message"

 mqtt-simple -h -r -p "example/retained" -m "message"

 tail -f logfile | mqtt-simple -h -p "log/example"

 mqtt-simple --ssl --insecure ...

 mqtt-simple --ssl --ca ca.crt --cert client.crt --key client.key


This is just a simple utility program. It doesn't do much. Specifically, all the QoS features are unsupported. Also, don't expect fancy error messages and such :-)


-h --host

MQTT server to connect to, required.

-p --publish topic

Publish a message. Uses the message given with -m, or will read lines from stdin, and publish a message for each given line.

-m --message message

Message to publish. Requires -p.

-r --retain

Causes messages published with -p to have the "retain" flag on.

-s --subscribe filter

Subscribe to the given topic filter. Use the standard MQTT wildcards like + and #. Outputs matching published messages on stdout. Can be given multiple times.

-e --except filter

Suppress published messages that match filter. Can be given multiple times.

--count number

Quit after receiving number messages.


Output only the message values, without the topics.

-1 --one

Shortcut for --count 1 --message-only.


For each given -s, print the matching topic in a different color. Note that the first matching topic will be used for color selection, so specify the topics with the most specific one first, the least specific one (like #) last.

Color is enabled by default if stdout is a terminal.


Pass ASCII control characters unaltered. By default, they're replaced by ^@ notation or, when --color is enabled, reverse video characters. For example, an ASCII newline would be displayed as ^J unless --raw is used.

-d --datetime format

Prefix messages with a timestamp. Optionally, a format for strftime can be supplied.

-u --user --username username

Specify a username. Overrides the environment variable MQTT_SIMPLE_USERNAME.

--pass --password password

Specify a password. Overrides the environment variable MQTT_SIMPLE_PASSWORD.

SSL options


Use SSL instead of unencrypted connection.


Disable SSL certificate validation and enable clear text passwords. Useful for testing, bad idea in production.


--ca path

The Certificate Authority to validate against. path can be a file or a directory. If unspecified, IO::Socket::SSL attempts to use the system wide CA configuration.

Overrides the environment variable MQTT_SIMPLE_SSL_CA.

--cert path
--key path

A client certificate with its key.

Override the environment variables MQTT_SIMPLE_SSL_CERT and MQTT_SIMPLE_SSL_KEY.


Pick your favourite OSI approved license :)


Juerd Waalboer <>