🍃 TinyMQ — The Featherweight Fortress
Version: 2.0.0 | License: GPL v3 | Language: Go (pure stdlib)
TinyMQ is a message broker built from scratch in pure Go, with zero external dependencies, designed for developers who need reliable, enterprise-grade async messaging without the operational overhead of Kafka or RabbitMQ.
The Zero-Bloat Philosophy
Modern message brokers are engineering marvels — and they are massive overkill for most projects.
Setting up an Erlang runtime (RabbitMQ), managing JVMs and Zookeeper clusters (Kafka), or configuring 12 YAML files just to pass JSON messages between three microservices is not a productivity win — it's an operational tax.
TinyMQ was built on a single principle:
You shouldn't need a DevOps team to deploy a message queue.
This translates into hard technical constraints:
| Constraint | Value |
|---|---|
| External dependencies | 0 |
| Docker image size | ~13.12 MB (from scratch) |
| Docker Scout CVEs | 0 |
| Config files required | 0 |
| Setup time | < 60 seconds |
Why Not Kafka or RabbitMQ?
This is not a criticism of those tools — it's an honest assessment of fit.
RabbitMQ
- Requires an Erlang/OTP runtime
- Complex cluster setup with dedicated nodes
- High memory baseline even at idle
- AMQP protocol adds client complexity
Apache Kafka
- Requires a JVM (or native binary 500MB+)
- Previously required ZooKeeper; now requires KRaft
- Designed for log streaming at scale, not simple task queues
- Steep learning curve for operators
TinyMQ
- Pure Go binary, compiles to a single static executable
- No runtime dependencies — runs from Docker
scratch - HTTP API works with
curl, any language, any framework - Operational complexity:
docker run -p 7800:7800 flez71/tinymq:latest
Who Is TinyMQ For?
TinyMQ is the right tool when:
- ✅ You're building a homelab, side project, or MVP
- ✅ You have limited server resources ($4/month VPS is enough)
- ✅ You want zero-config deployment — no XML, no YAML, no DSL
- ✅ You need disk persistence with WAL guarantees without Kafka overhead
- ✅ You're integrating heterogeneous services (PHP, Go, Python, Node.js) via HTTP
- ✅ You need enterprise patterns (DLQ, TTL, Broadcast, Webhooks) without enterprise complexity
TinyMQ is not the right tool when:
- ❌ You need to process millions of events per second
- ❌ You need multi-node distributed clustering with replication and consensus
- ❌ You need Kafka-style topic partitioning and consumer groups
Core Feature Matrix
| Feature | Description |
|---|---|
| WAL Persistence | Append-only .log files per topic, auto-compaction on boot |
| Dead Letter Queues | Auto-isolation of poison-pill messages after 3 retries |
| Time-Based Routing | Native ?delay=10s and ?ttl=5m support |
| Push Consumers | Webhook-based fire-and-forget delivery to external URLs |
| Batching | Extract N messages per call with ?limit=N |
| Broadcast | Fan-out to all waiting consumers simultaneously |
| Interactive Dashboard | Embedded HTML/JS UI at /dashboard |
| Native CLI | tmq binary with status, pub, sub, peek, tail |
| Go SDK | Official client with long-polling and exponential backoff |
| OOM Protection | 2MB payload cap + 100k message RAM backpressure |
Architecture Overview
The broker maintains messages in RAM for fast reads and simultaneously writes to a WAL log file for durability. On restart, the log is replayed and compacted automatically.
Next Steps
- Installation → — Get TinyMQ running in under 60 seconds via Docker or binary
- Storage & Core Concepts → — Understand the PUT/ACK lifecycle and safety limits
- Enterprise Features → — DLQ, Webhooks, Broadcast, and Time-Based Routing