Skip to content

Releases: lileding/iotd

v0.5.0 - QoS=2 Support

27 Feb 09:34
36eec21

Choose a tag to compare

v0.5.0 - QoS=2 Support (Milestone 5)

This release completes Milestone 5 with full QoS=2 "exactly once" delivery support.

What's New

QoS=2 Implementation

  • Exactly-once delivery guarantee - Full MQTT 3.1.1 QoS=2 support
  • PUBREC/PUBREL/PUBCOMP handshake - Complete four-step protocol
  • QoS=2 state machine - AwaitingPubRec and AwaitingPubComp states
  • Inbound QoS=2 tracking - Broker receives and processes QoS=2 messages
  • Outbound QoS=2 delivery - Broker sends QoS=2 to subscribers
  • QoS=2 retransmission - Automatic retry for PUBLISH and PUBREL
  • QoS=2 persistence - State survives server restarts
  • Comprehensive tests - 5+ integration tests covering all scenarios

Full Changelog

  • feat(qos2): add PUBREC/PUBREL/PUBCOMP packet encoding/decoding
  • feat(qos2): add QoS=2 state machine to session
  • feat(qos2): implement QoS=2 packet handlers
  • feat(qos2): update retransmission logic for QoS=2
  • feat(qos2): enable QoS=2 in router
  • feat(qos2): extend persistence for QoS=2 state
  • feat(qos2): add QoS=2 integration tests
  • docs: update documentation and website for Milestone 5

Installation

Build from source:

cargo build --release

v0.4.0 - Security (TLS, Authentication, ACLs)

27 Feb 05:24

Choose a tag to compare

Milestone 4: Security Complete 🔐

This release completes Milestone 4, bringing production-grade security to IoTD.

New Features

TLS/SSL Support (4c)

  • Encrypted connections via tls:// listener prefix
  • Multiple simultaneous listeners — serve TCP and TLS on different ports
  • Certificate and key file configuration via [tls] TOML section
  • tokio-rustls integration with rustls-pemfile for certificate parsing
  • Backward-compatible listen field: accepts a single string or an array
  • TLS integration tests using self-signed certificates (rcgen)

Username/Password Authentication (4a)

  • File-based credential management
  • CONNECT packet credential validation
  • Pluggable auth backend: allowall (default) and file
  • Configurable via [auth] TOML section

Topic-based ACLs (4b)

  • Per-user publish/subscribe access control rules
  • Wildcard-aware topic matching in ACL rules
  • Pluggable ACL backend: allowall (default) and file
  • Configurable via [acl] TOML section

Configuration Example

# Multiple listeners
listen = ["tcp://0.0.0.0:1883", "tls://0.0.0.0:8883"]

[tls]
cert_file = "server.crt"
key_file  = "server.key"

[auth]
backend = "file"
password_file = "passwd"

[acl]
backend = "file"
acl_file = "acl.conf"

What's Next: Milestone 5 — QoS=2

The next milestone will implement exactly-once delivery with the PUBREC/PUBREL/PUBCOMP four-packet flow.

Changelog

  • e100310 Add username/password authentication support (Milestone 4a)
  • 6d456b4 Add topic-based access control (ACL) support (Milestone 4b)
  • 393d55d Add TLS support and multi-listener architecture (Milestone 4c)
  • d3a011f Update docs and website for Milestone 4 completion

v0.3.0 - Persistence Layer

25 Jan 12:31

Choose a tag to compare

v0.3.0 - Persistence Layer

Milestone 3 Complete: Full persistence support for MQTT sessions and messages.

✨ Features

💾 Storage Layer

  • Unified Storage trait with pluggable backends
  • InMemoryStorage for development/testing
  • SqliteStorage for production persistence
  • Config-based backend selection (memory/sqlite)

🔄 Session Persistence

  • Session state persistence for clean_session=false clients
  • Subscription persistence across reconnects
  • In-flight QoS=1 message persistence
  • Atomic session state save (all-or-nothing)
  • CONNACK session_present flag on restore

📌 Retained Message Persistence

  • Retained messages survive server restarts
  • Storage-backed retained message operations
  • Configurable retained message limits

⚙️ Configuration

[persistence]
backend = "sqlite"  # or "memory"
database_path = "iotd.db"

📊 Test Coverage

  • 95+ tests covering all functionality
  • Storage trait tests for both backends
  • Session persistence integration tests

🔜 What's Next

Milestone 4: Security - TLS encryption, authentication, and ACLs


Full changelog: v0.2.0...v0.3.0

v0.2.0

26 Jul 05:17

Choose a tag to compare

Milestone 2 Complete: Full MQTT QoS=1 implementation with at-least-once delivery.

Key Features:

  • Message acknowledgment (PUBACK) handling
  • Automatic retransmission with DUP flag
  • Multiple concurrent in-flight messages
  • Packet ID management (1-65535)
  • Duplicate detection and prevention
  • QoS downgrade support
  • Configurable retransmission intervals

MQTT 3.1.1 specification compliant with 85+ tests.

Full Changelog: v0.1.0...v0.2.0

IoTD v0.1.0 - Milestone 1 Complete

24 Jul 16:37

Choose a tag to compare

IoTD v0.1.0 - Full MQTT v3.1.1 Server with QoS=0 Support

🎉 We're excited to announce the first release of IoTD!

This release marks the successful completion of Milestone 1, delivering a fully functional MQTT v3.1.1 server implementation.

✨ Features

  • Complete MQTT v3.1.1 protocol support - All packet types implemented and tested
  • Message routing - Full wildcard support (+ single-level, # multi-level)
  • Clean session - Session takeover and proper cleanup
  • Keep-alive mechanism - Configurable timeouts with automatic disconnect
  • Retained messages - Storage limits and wildcard delivery
  • Will messages - Last Will and Testament support
  • Protocol compliance - Validation, error codes, and client ID rules
  • Topic validation - Both topic names and subscription filters
  • Race-condition-free - Built with CancellationToken architecture
  • Comprehensive testing - 74 tests ensuring reliability

🚀 Quick Start

# Download and build
git clone https://github.com/lileding/iotd.git
cd iotd
cargo build --release

# Run the server
./target/release/iotd

# Check version
./target/release/iotd --version
# Output: iotd 0.1.0-e39be53

The server listens on 0.0.0.0:1883 by default.

📦 Installation

From Source

cargo install --git https://github.com/lileding/iotd.git --tag v0.1.0

Docker

docker build -t iotd:v0.1.0 .
docker run -p 1883:1883 iotd:v0.1.0

🖥️ Platform Support

IoTD has been tested on:

  • ✅ macOS (Apple Silicon)
  • ✅ Linux GNU (aarch64)
  • ✅ Linux musl (aarch64)
  • ✅ Linux GNU (x86_64)
  • ✅ Linux musl (x86_64)

📊 Performance

  • Low memory footprint
  • Async I/O with Tokio
  • Zero-copy message routing
  • Supports thousands of concurrent connections

🧪 Testing

Connect with any MQTT client:

# Using mosquitto
mosquitto_sub -h localhost -t "test/+"
mosquitto_pub -h localhost -t "test/hello" -m "Hello IoTD\!"

# Using mqttx
mqttx sub -h localhost -t "#"
mqttx pub -h localhost -t "test/world" -m "Hello World\!"

📚 Documentation

🎯 What's Next?

This is just the beginning! Upcoming milestones include:

  • Milestone 2: QoS=1 support with acknowledgments
  • Milestone 3: QoS=2 and persistent storage
  • Milestone 4: Authentication and authorization
  • Milestone 5: TLS/SSL and WebSocket support
  • Milestone 6: Pluggable architecture
  • Milestone 7: Production-ready features

🙏 Acknowledgments

Thank you to everyone who has contributed to making this first release possible!


Full Changelog: https://github.com/lileding/iotd/commits/v0.1.0