Releases: lileding/iotd
v0.5.0 - QoS=2 Support
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 --releasev0.4.0 - Security (TLS, Authentication, ACLs)
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-rustlsintegration withrustls-pemfilefor certificate parsing- Backward-compatible
listenfield: 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) andfile - 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) andfile - 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
e100310Add username/password authentication support (Milestone 4a)6d456b4Add topic-based access control (ACL) support (Milestone 4b)393d55dAdd TLS support and multi-listener architecture (Milestone 4c)d3a011fUpdate docs and website for Milestone 4 completion
v0.3.0 - Persistence Layer
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=falseclients - Subscription persistence across reconnects
- In-flight QoS=1 message persistence
- Atomic session state save (all-or-nothing)
- CONNACK
session_presentflag 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
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
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-e39be53The 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.0Docker
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