Changelog¶
0.4.0 (2026-09-29)¶
Breaking changes are marked with !.
Added¶
iotcore.Broker: a stoppable embedded broker withstart(),stop(), context manager support andlisteners. Runs rumqttd in a child process that exits with the parent.python -m iotcore --port 1883 [--config mqtt.toml]command line broker.IotCore.stop()/ context manager: disconnects the client and stops a broker it started.- Unique client id per
IotCoreinstance and aclient_id=argument. Two clients no longer kick each other off the broker. - MQTT wildcard matching (
+,#) for subscriptions; a message is delivered to every matching subscription. - Callbacks may take
(topic, data)as well as(data), and may beasync def. publish(topic, data, qos=1, retain=False)acceptsstrorbytes;subscribe(..., qos=0).- Broker options without a config file:
listen,port,max_connections, ... - Errors are raised as Python exceptions (
OSErrorfor busy ports,ValueErrorfor bad config,RuntimeErrorfor client failures) instead of aborting the process. - Rust log output is routed to Python
logging(iotcore.*,rumqttd.*). - Test suite (unit, broker and end-to-end) run in CI on Linux and macOS.
Changed¶
- !
mqtt.tomlis no longer read implicitly from the working directory. PassBroker(config_path=...)orIotCore(broker_config=...). - !
IotCoreRscallback now receives(topic: str, payload: bytes);IotCoreBrokertakes keyword arguments andrun_forever()blocks. Use theIotCore/Brokerwrappers. - Callback exceptions are logged instead of crashing the delivery thread.
background_loop_forever()is kept as an alias ofstart().- Wheels for aarch64/armv7 Linux are built on manylinux_2_28; Python 3.9+ is required.
Removed¶
iotcore.request.Requestand the emptyiotcore.djangoiotDjango app.- Rust-only examples (
examples/rumqttcl,examples/mqtt_rs).
0.3.0 (2023-09-16)¶
- Last release of the 0.3 line. See the git history for earlier changes.