NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3912 most downloaded on PyPI
The idiomatic asyncio MQTT client
Last release 6 months ago
02 Apr 2026
Release timing varies
gaps range from 8 days to 8 months
Nearly every release is documented
notes for 18 of 18 stable releases
1 version withdrawn
withdrawn after publishing
9 years old
20 releases · first in 2017
Replace paho-mqtt dependency with mqtt5
Client parameters are now keyword-onlymqtt5.PublishPacket instances instead of aiomqtt.Messagepublish payload is now a positional bytes argument instead of keyword payload=client.messages is now client.messages() (method call)message.mid renamed to message.packet_idmessage.properties replaced by individual attributes (e.g. message.content_type, message.user_properties)packet_id parameter for QoS>0 publishes, enabling retries via client.packet_idsreconnect=Trueclient.connected() and client.disconnected() awaitables for connection statereceive_maxunix_socket parameterssl_context replaces tls_context, tls_params, and tls_insecureqos subscription parameter renamed to max_qosConnectError, ProtocolError, and NegativeAckError replace MqttErrorprotocol, transport, proxy, socket_options, timeout, queue_type, max_queued_incoming_messages, max_queued_outgoing_messages parametersmessage.topic.matches() (see guides for routing with regular expressions)One column per quarter.
Fix failure to load TLS with tls_params and tls_insecure=True (@okaresz in 386)
tls_params and tls_insecure=True (@okaresz in 386)Fix the type hint for Message.payload from PayloadType to bytes (@meronepy in #370)
Message.payload from PayloadType to bytes (@meronepy in #370)Client.__aexit__ instead of suppressing them (@yujia21 in #375)Allow proxy_port to be passed to the underlying paho proxy_set() function (@NickJHoffmann in #339)
proxy_port to be passed to the underlying paho proxy_set() function (@NickJHoffmann in #339)Test for Python 3.13 (@empicano in #359)
Replace deprecated get_event_loop with get_running_loop
sock.fileno() to identify socket for monitoring (@airtower-luna in #357)get_event_loop with get_running_loopImplement len(client.messages) to return number of messages in queue (@empicano in #323)
len(client.messages) to return number of messages in queue (@empicano in #323)Bump paho-mqtt to 2.1 (@empicano in #305)
Client.messages not being reusable (@ryan-summers in #312)Migrate to paho-mqtt 2.0 (@JonathanPlasse in #286)
Configure poetry-dynamic-versioning to replace __version__ and __version_tuple__ variables (@vvanglro in #273)
poetry-dynamic-versioning to replace __version__ and __version_tuple__ variables (@vvanglro in #273)__aenter__ times out (@empicano in #285)This release introduces breaking changes. You can find a migration guide in the documentation.
Client.id attribute to identifier (@empicano in #262)__aexit__ (@spacemanspiff2007 in #263)connect/disconnect methods (@empicano in #262)filtered_messages and unfiltered_messages methods (@empicano in #262)message_retry_set client argument (@empicano in #262)This release introduces breaking changes. You can find a migration guide in the documentation.
Deprecate connect and disconnect in favor of direct calls to __aenter__ and __aexit__. (@empicano in #247)
connect and disconnect in favor of direct calls to __aenter__ and __aexit__. (@empicano in #247)__aexit__ only if acquired (@spacemanspiff2007 in #249)Drop support for Python 3.7. Contributed by Felix Böhm (@empicano) in #246
__aenter__ failing to release lock when initial connection fails. Contributed by Peanut (@vvanglro) in #245Expose paho's tls_insecure argument. Contributed by Bob Steers (@steersbob) in #234
tls_insecure argument. Contributed by Bob Steers (@steersbob) in #234__aexit__. Contributed by Robert Resch (@edenhaus) in #232topic/subtopic with topic/subtopic/# wildcard according to MQTT documentation. Contributed by Bob Steers (@steersbob) in #241Move documentation from README to Sphinx. Contributed by Felix Böhm (@empicano) in #159
README to Sphinx. Contributed by Felix Böhm (@empicano) in #159Client.pending_calls_threshold public. Contributed by Jonathan Plasse (@JonathanPlasse) in #185master branch to main. Contributed by Jonathan Plasse (@JonathanPlasse)Problem is that the _old_ aiomqtt (by mossblaser) was still in use. These users suddenly experienced a breaking change when they updated from v0.1.2 t…
Yanked. We recently renamed the project from asyncio-mqtt to aiomqtt. Problem is that the old aiomqtt (by mossblaser) was still in use. These users suddenly experienced a breaking change when they updated from v0.1.2 to v0.17.0. Our mitigation is to yank v0.17.0 and release a v1.0.0 in it's place. It was about time for a v1.0.0 release anyhow!
Fix how keyword arguments are forwarded in Client.publish and Client.subscribe.
Client.publish and Client.subscribe.Remove log call that was erroneously put in while debugging the latest release.
Add missing parameters to Client.publish.
Client.publish.Client.publish when paho-mqtt publishes immediately.Initial release.
Initial release.
Your coding agent can read these notes before it upgrades. Set up the MCP server →