PackageTrack
Sign in Get early access

rumqttc

An efficient and robust mqtt client for your connected devices

0.25.1 7.6M downloads/mo #3602 most downloaded on crates.io bytebeamio/rumqtt

What this package is like to depend on

Last release 9 months ago

21 Nov 2025

Ships unpredictably

gaps range from 2 weeks to 1.5 years

Most releases are documented

notes for 25 of 35 stable releases

Nothing withdrawn

no release was ever pulled

6 years old

35 releases · first in 2020

2 releases in the last 12 months

see the full history below

Release timeline

35 releases · Jun 2020 to Nov 2025
2021 2022 2023 2024 2025 2026
Release Pre-release

Releases

latest 35
  1. 0.25.1 21 Nov 2025
    Release notes

    rumqttc v0.25.1

    This patch release focuses on fixing the broken WebSocket feature and includes dependency updates.

    Highlights

    WebSocket Fix: This release resolves a build issue that occurred when the websocket feature was enabled, caused by incompatibility with ws_stream_tungstenite v0.14.0. The dependency has been updated to v0.15.0, restoring full WebSocket functionality.

    Changes

    • Fixed: Build failure when compiling with the websocket feature enabled (#999)
    • Added: New use-rustls-no-provider feature for more flexible TLS configuration (#988)
    • Maintenance: Updated dependencies (#1006 )

    Contributors

    Welcome to our new contributors:

    Full Changelog: [rumqttc-0.25.0...rumqttc-0.25.1]

    Open source →
    Release notes

    Added

    • use-rustls-no-provider feature flag to allow choosing crypto backend without being forced to compile aws_lc_rs

    Changed

    Deprecated

    Removed

    Fixed

    • Fixed broken websocket feature in rumqttc-0.25.0

    Security


    Open source →
    Release notes

    rumqttc-0.25.1 Latest

    Latest

    Compare

    Choose a tag to compare

    Open source →
  2. 0.25.0 09 Sep 2025
    Release notes

    rumqttc v0.25.0 Release Notes

    We're excited to announce the release of rumqttc v0.25.0! This release brings significant improvements, new features, and important bug fixes that enhance the stability and functionality of your MQTT applications.

    🚀 What's New

    Enhanced MQTT v5 Support

    • Session Management: Added support for session_expiry_interval in MQTT v5 connections, giving you better control over session persistence
    • Authentication Packets: Implemented MQTT v5 Auth packet support for enhanced authentication flows
    • Connection Properties: Made DisconnectProperties struct public for better disconnect handling

    Security & Performance Improvements

    • Network Performance: Added TCP no_delay configuration option for reduced latency in time-sensitive applications
    • Memory Optimization: Replaced Vec with FixedBitSet for QoS 2 packet tracking, reducing memory overhead
    • Network Timeout: Set default network timeout to Duration::MAX instead of zero for better connection handling

    Developer Experience Enhancements

    • TLS Support: Added native TLS TlsConnector support for more flexible secure connections
    • Client Configuration: New set_client_id method in MqttOptions for easier client ID management
    • External Auth: Re-enabled public access to external authentication features

    🔧 Important Bug Fixes

    Connection Stability

    • Fixed panic issues on connection closure
    • Resolved MQTT v5 packet writing problems that prevented outgoing packets from reaching the network
    • Improved event ordering in poll() method for more predictable behavior

    Subscription Handling

    • Filter Validation: Added proper validation for subscription filters
    • Subscribe Many Fix: Resolved critical issue where subscribe_many always caused EmptySubscription errors

    Packet Processing

    • Write Operations: Ensured all write operations return correct byte counts
    • PubAck Filtering: Fixed filtering of unexpected PubAck packets in event loop
    • Error Handling: Removed SubAck/UnsubAck/PubAck/PubRec/PubRel/PubComp reason code errors from critical state errors

    📚 Code Quality & Maintenance

    Dependency Updates

    We've updated several critical dependencies for security and performance:

    • OpenSSL: 0.10.64 → 0.10.71
    • H2: 0.4.2 → 0.4.4
    • Rustls: 0.22.2 → 0.22.4
    • Various Go dependencies in benchmarks

    Refactoring Highlights

    • Simplified Network implementation with Framed<.., Codec>
    • Improved credential storage using Login in MqttOptions
    • Enhanced unsolicited publish handling
    • Better clippy compliance and code quality

    🎯 Breaking Changes

    While we've maintained backward compatibility where possible, please note:

    • Some internal APIs have been refactored for better performance
    • Error handling has been improved, which may affect error matching in your code
    • Default network timeout behavior has changed

    🤝 Community Contributions

    A huge thank you to our 16 new contributors who made this release possible! We're thrilled to welcome these developers to the rumqtt community:

    New Contributors:

    • @amokfa - Fixed write operation byte counting
    • @pranavgoel29 - Added subscription filter validation
    • @xiaocq2001 - Added MQTT v5 session expiry and session resume improvements
    • @wangwen-4220 - Fixed PubAck filtering in event loop
    • @hippalus - Optimized QoS 2 packet tracking with FixedBitSet
    • @FedorSmirnov89 - Added TCP no_delay configuration option
    • @silvestrpredko - Re-enabled external auth public availability
    • @FSMaxB - Fixed critical subscribe_many functionality
    • @J-Kappes - Improved TLS documentation
    • @CosminPerRam - Fixed EventLoop documentation spelling
    • @Ddystopia - Fixed default network timeout behavior
    • @edgale - Fixed function description typos
    • @elrafoon - Added MqttOptions set_client_id method
    • @jbeyerstedt - Made v5::Connection return types public

    This diverse group of contributors brought improvements ranging from security enhancements and performance optimizations to API improvements and documentation fixes. Their combined efforts have made rumqttc more robust, secure, and user-friendly.

    Special recognition goes to contributors who tackled complex issues like MQTT v5 protocol implementation, security vulnerabilities, and critical subscription handling bugs.

    🔄 Migration Guide

    For most users, upgrading should be straightforward:

    1. Update your dependency: Change your Cargo.toml to use rumqttc = "0.25.0"
    2. Review timeout handling: If you rely on specific timeout behavior, review the new default timeout settings
    3. Check error handling: Update any code that specifically catches the removed reason code errors
    4. Test MQTT v5 features: If using MQTT v5, test the improved session handling and auth features

    🔗 Resources

    • Full Changelog: View on
    • Documentation: Check our updated docs for new features and API changes
    • Issues: Report bugs or request features on our GitHub repository

    This release represents months of community effort and testing. We're confident it will provide a more stable, secure, and feature-rich MQTT experience for your applications.

    Happy coding! 🦀

    Open source →
    Release notes

    Added

    • size() method on Packet calculates size once serialized.
    • read() and write() methods on Packet.
    • ConnectionAborted variant on StateError type to denote abrupt end to a connection
    • set_session_expiry_interval and session_expiry_interval methods on MqttOptions.
    • Auth packet as per MQTT5 standards
    • Allow configuring the nodelay property of underlying TCP client with the tcp_nodelay field in NetworkOptions
    • set_client_id method on MqttOptions

    Changed

    • rename N as AsyncReadWrite to describe usage.
    • use Framed to encode/decode MQTT packets.
    • use Login to store credentials
    • Made DisconnectProperties struct public.
    • Replace Vec<Option<u16>> with FixedBitSet for managing packet ids of released QoS 2 publishes and incoming QoS 2 publishes in MqttState.
    • Accept native_tls::TlsConnector as input for Transport::tls_with_config.
    • Update thiserror to 2.0.8, tokio-rustls to 0.26.0, rustls-webpki to 0.102.8, rustls-pemfile to 2.2.0, rustls-native-certs to 0.8.1, async-tungstenite to 0.28.0, ws_stream_tungstenite to 0.14.0, native-tls to 0.2.12 and tokio-stream to 0.1.16.
    • Make error types returned by rumqttc::v5::Connection public

    Deprecated

    Removed

    Fixed

    • Validate filters while creating subscription requests.
    • Make v4::Connect::write return correct value
    • Ordering of State.events related to QoS > 0 publishes
    • Filter PUBACK in pending save requests to fix unexpected PUBACK sent to reconnected broker.
    • Resume session only if broker sends CONNACK with session_present == 1.
    • Remove v5 PubAck/PubRec/PubRel/PubComp/Sub/Unsub failures from StateError and log warnings on these failures.

    Security


    Open source →
    Release notes

    rumqttc-0.25.0

    Compare

    Choose a tag to compare

    Open source →
  3. 0.24.0 27 Feb 2024
    Release notes

    What's New?

    • 🧾 Expose EventLoop::clean to allow triggering shutdown and subsequent storage of pending requests by @de-sh in #741

    You can now shutdown the Eventloop and drain Requests, which weren't received from the channel and keep them in pending while doing cleanup to prevent any data loss. Example usage in bytebeamio/uplink.

    • 🔐 Support for all TLS key formats currently supported by Rustls: PKCS#1, PKCS#8, RFC5915 and new TLS Error variants: NoValidClientCertInChain, NoValidKeyInChain by @ijager in #752 and #752

    With this, we now practically support all RSA and ECC keys in DER/SEC1 encoding.

    • A websocket request modifier for v4 client by @swanandx in #772

    • Surfaced AsyncClient's from_senders method to the Client as from_sender by @BKDaugherty in #779


    Changes

    MqttOptions::new now accepts empty client_id and MqttOptions::set_clean_session panics if client_id is empty and clean_session flag is set to false.

    Users do not need to specify the TLS key variant in the TlsConfiguration anymore, this is inferred automatically. To update your code simply remove Key::ECC() or Key::RSA() from the initialization.

    • Certificate for client authentication is optional in native-tls variant by @swanandx in #758

    With this, the der & password fields are replaced by client_auth.

    • Make v5 RetainForwardRule public, in order to allow setting it when constructing Filter values by @brianmay in #767

    • Use VecDeque instead of IntoIter to fix unintentional drop of pending requests on EventLoop::clean by @de-sh in #780

    • Fix typo - StateError::IncommingPacketTooLarge => StateError::IncomingPacketTooLarge by @swanandx in #786

    • Update rustls and friends by @qwandor in #790

    Update tokio-rustls to 0.25.0, rustls-native-certs to 0.7.0, rustls-webpki to 0.102.1, rusttls-pemfile to 2.0.0, async-tungstenite to 0.24.0, ws_stream_tungstenite to 0.12.0 and http to 1.0.0. This is a breaking change as types from some of these crates are part of the public API in

    Fixes

    • Lowered the MSRV to 1.64.0 by @RoastVeg in #762
    • Request modifier function should be Send and Sync and removed unnecessary Box by @swanandx in #770

    New Contributors 🎉


    Full Changelog: rumqttd-0.19.0...rumqttc-0.24.0

    Open source →
    Release notes

    Added

    • Expose EventLoop::clean to allow triggering shutdown and subsequent storage of pending requests
    • Support for all variants of TLS key formats currently supported by Rustls: PKCS#1, PKCS#8, RFC5915. In practice we should now support all RSA keys and ECC keys in DER and SEC1 encoding. Previously only PKCS#1 and PKCS#8 where supported.
    • TLS Error variants: NoValidClientCertInChain, NoValidKeyInChain.
    • Drain Requests, which weren't received by eventloop, from channel and put them in pending while doing cleanup to prevent data loss.
    • websocket request modifier for v4 client
    • Surfaced AsyncClient's from_senders method to the Client as from_sender

    Changed

    • MqttOptions::new now accepts empty client id.
    • MqttOptions::set_clean_session now panics if client ID is empty and clean_session flag is set to false.
    • Synchronous client methods take &self instead of &mut self (#646)
    • Removed the Key enum: users do not need to specify the TLS key variant in the TlsConfiguration anymore, this is inferred automatically. To update your code simply remove Key::ECC() or Key::RSA() from the initialization.
    • certificate for client authentication is now optional while using native-tls. der & password fields are replaced by client_auth.
    • Make v5 RetainForwardRule public, in order to allow setting it when constructing Filter values.
    • Use VecDeque instead of IntoIter to fix unintentional drop of pending requests on EventLoop::clean (#780)
    • StateError::IncommingPacketTooLarge is now StateError::IncomingPacketTooLarge.
    • Update tokio-rustls to 0.25.0, rustls-native-certs to 0.7.0, rustls-webpki to 0.102.1, rusttls-pemfile to 2.0.0, async-tungstenite to 0.24.0, ws_stream_tungstenite to 0.12.0 and http to 1.0.0. This is a breaking change as types from some of these crates are part of the public API.

    Deprecated

    Removed

    Fixed

    • Lowered the MSRV to 1.64.0
    • Request modifier function should be Send and Sync and removed unnecessary Box

    Security


    Open source →
    Release notes

    rumqttc-0.24.0

    Compare

    Choose a tag to compare

    Open source →
  4. 0.23.0 10 Oct 2023
    Release notes

    Added

    • Added bind_device to NetworkOptions to enable TCPSocket.bind_device()
    • Added MqttOptions::set_request_modifier for setting a handler for modifying a websocket request before sending it.

    Fixed

    • Allow keep alive values <= 5 seconds (#643)
    • Verify "mqtt" is present in websocket subprotocol header.

    Security

    • Remove dependency on webpki. CVE
    • Removed dependency vulnerability, see rustsec. Update of tungstenite dependency.

    Other Changes

    New Contributors 🎉

    Open source →
    Release notes

    Added

    • Added bind_device to NetworkOptions to enable TCPSocket.bind_device()
    • Added MqttOptions::set_request_modifier for setting a handler for modifying a websocket request before sending it.

    Changed

    Deprecated

    Removed

    Fixed

    • Allow keep alive values <= 5 seconds (#643)
    • Verify "mqtt" is present in websocket subprotocol header.

    Security

    • Remove dependency on webpki. CVE
    • Removed dependency vulnerability, see rustsec. Update of tungstenite dependency.

    Open source →
    Release notes

    rumqttc 0.23.0

    Compare

    Choose a tag to compare

    Open source →
  5. 0.22.0 07 Jun 2023
    Release notes

    Added

    • Added outgoing_inflight_upper_limit to MQTT5 MqttOptions. This sets the upper bound for the number of outgoing publish messages (#615)
    • Added support for HTTP(s) proxy (#608)
      • Added proxy feature gate
      • Refactored eventloop::network_connect to allow setting proxy
      • Added proxy options to MqttOptions
    • Update rustls to 0.21 and tokio-rustls to 0.24 (#606)
      • Adds support for TLS certificates containing IP addresses
      • Adds support for RFC8446 C.4 client tracking prevention

    Changed

    • MqttState::new takes max_outgoing_packet_size which was set in MqttOptions but not used (#622)

    Deprecated

    Removed

    Fixed

    • Enforce max_outgoing_packet_size on v4 client (#622)

    Security

    Open source →
    Release notes

    rumqttc 0.22.0

    Compare

    Choose a tag to compare

    Open source →
  6. 0.21.0 01 May 2023
    Release notes

    Added

    • Added support for MQTT5 features to v5 client
      • Refactored v5::mqttbytes to use associated functions & include properties
      • Added new API's on v5 client for properties, eg publish_with_props etc
      • Refactored MqttOptions to use ConnectProperties for some fields
      • Other minor changes for MQTT5

    Changed

    • Remove Box on Event::Incoming

    Deprecated

    Removed

    • Removed dependency on pollster

    Fixed

    • Fixed v5::mqttbytes Connect packet returning wrong size on write()
      • Added tests for packet length for all v5 packets

    Security

    Open source →
  7. 0.20.0 17 Jan 2023
    Release notes

    Added

    • NetworkOptions added to provide a way to configure low level network configurations (#545)

    Changed

    • options in Eventloop now is called mqtt_options (#545)
    • ConnectionError now has specific variant for type of Timeout, FlushTimeout and NetworkTimeout instead of generic Timeout for both (#545)
    • conn_timeout is moved into NetworkOptions (#545)

    Old changelog entries can be found at CHANGELOG.md

    Open source →
  8. 0.19.0 28 Dec 2022

    Nothing published for this version

  9. 0.18.0 21 Nov 2022
    Release notes

    What's Changed

    This release fixes retained and will messages and adds support for will delay interval in MQTTv5. Rumqttd now have an enhanced release profile in Cargo.toml which would improve performance while reducing the binary size! Here are some of the other changes:

    ⚡ Added

    🚨 Changed

    • Non-consuming builder pattern for constructing Connection by @swanandx in #708
    • Removed Link and its implementation which were deprecated by @swanandx in #684

    🛠️ Fixed

    🔒 Security

    • Remove dependency on webpki to fix CVE

    🚧 Maintenance changes

    Full Changelog: rumqttd-0.17.0...rumqttd-0.18.0

    Open source →
    Release notes

    rumqttd 0.18.0

    Compare

    Choose a tag to compare

    Open source →
  10. 0.17.0 30 Sep 2022

    Nothing published for this version

  11. 0.16.0 09 Sep 2022
    Release notes

    Blog Post discussing this release - https://bytebeam.io/blog/qos2-and-websockets-support-rumqttd/

    Significant Changes

    • QoS2 support (#604) 🚀
    • Support for Websocket connections (#633) 🕸️

    Changed

    • Ability to configure segment size individually (#602)
    • LinkBuilder for constructing LinkRx/LinkTx (#659)

    Deprecated

    • Link and its implementation, use LinkBuilder instead

    Fixed

    • Include reason code for UnsubAck in v5

    New Contributors 🎉

    Open source →
    Release notes

    rumqttd 0.16.0

    Compare

    Choose a tag to compare

    Open source →
  12. 0.15.0 26 Aug 2022

    Nothing published for this version

  13. 0.14.0 12 Aug 2022
    Release notes
    • Timeouts moved up to connect() call (#408)
    • Tokio dependency version = "1" (#412)
    • Fix empty property serialization (#413)
    • Change variants in ClientError to not expose dependence on flume/SendError (#420)
    • Revert erroring out when Subscription filter list is empty (#422)
    • Remove the ability to cancel EventLoop.poll() mid execution (#421)
    • Improve documentation and fix examples (#380, #401, #416, #417)

    R13


    Open source →
  14. 0.13.0 16 Jun 2022
    Release notes
    • Add code in rumqttc::v5, moving towards support for operating the client with MQTT 5 (#351, #393, #398)
    • Add missing self.inflight += 1 in MqttState.save_pubrel() (#389)
    • Error out when Subscription filter list is empty (#392)
    • Make public rumqttc::client::Iter (#402)

    R12


    Open source →
  15. 0.12.0 21 Apr 2022
    Release notes
    • Enable compilation without rustls as a dependency using --no-default-features (#365)
    • Rework variants of ConnectionError (#370)
    • New constructor MqttOptions::parse() using url (#379)
    • Use get_mut() instead of index based access to ensure no panic (#384)
    • Better error messages (#385)
    Open source →
  16. 0.11.0 03 Mar 2022
    Release notes
    • Enable compilation without rustls as a dependency using --no-default-features (#365)
    • Better error messages (#385)

    R11


    Open source →
  17. 0.10.0 30 Oct 2021
    Release notes
    • tokio_rustls upgraded to 0.23.2

    NOTE: mqttbytes moved into separate repo, dependency on the same from rumqtt client and broker crates are hence forth removed.

    R10


    Open source →
  18. 0.9.0 07 Oct 2021
    Release notes
    • Use updated mqttbytes

    R9


    Open source →
  19. 0.8.0 09 Jun 2021
    Release notes
    • Add server side password check

    R8


    Open source →
  20. 0.7.0 31 May 2021
    Release notes
    • changed Update to mqttbytes 0.4
    • changed Native tls support

    R7


    Open source →
  21. 0.6.0 14 May 2021
    Release notes
    • More public fields in v5
    Open source →
  22. 0.5.0 19 Jan 2021
    Release notes
    • Make username and password public in connect packet
    • Make protocol field in v5 public
    Open source →
  23. 0.4.0 06 Jan 2021
    Release notes
    • Make publish len public
    Open source →
  24. 0.3.0 13 Dec 2020
    Release notes
    • fix Connack and suback packet mixup during mqtt 5 implementation [breaking]
    Open source →
  25. 0.2.0 27 Oct 2020
    Release notes
    • feature Complete mqtt 5 implementation
    • fix Split mqtt 4 and 5 into modules [breaking]
    Open source →
  26. 0.1.2 12 Oct 2020
    Release notes
    • Move integration tests outside eventloop
    • Improve integration tests
    • Fix panics by properly handling connection failure
    Open source →
  27. 0.1.1 30 Sep 2020

    Nothing published for this version

  28. 0.1.0 29 Sep 2020
    Release notes
    • changed Deprecate mqtt4/5bytes to combine them in mqttbytes
    Open source →
  29. 0.0.7 11 Sep 2020

    Nothing published for this version

  30. 0.0.6 19 Aug 2020
    Release notes
    • Manually setup 1 router thread and 1 io thread
    • Add names to threads
    • Compatibility with rumqttlog
    Open source →
  31. 0.0.5 26 Jul 2020

    Nothing published for this version

  32. 0.0.4 07 Jul 2020

    Nothing published for this version

  33. 0.0.3 21 Jun 2020

    Nothing published for this version

  34. 0.0.2 21 Jun 2020

    Nothing published for this version

  35. 0.0.1 21 Jun 2020

    Nothing published for this version

Every package, every release, already written down.

The archive is open and free. Watching your own project is what we are building next.

Browse the archive