Releases: x-name15/tinymq
Releases · x-name15/tinymq
v2.1.0: Expand Dashboard Functionality
Added
- Dashboard: Upgraded the embedded HTML interface to support advanced broker controls without adding any external dependencies. The dashboard now features:
- Live Search: Filter queues in real-time.
- Native Dark Mode: With
localStoragepreference saving. - Toast Notifications & Clipboard Integration: Replaced native browser alerts with custom toasts and added 1-click "Copy Payload" buttons for easier debugging.
- Advanced Publish Control: The UI now exposes the full power of the Go SDK. Users can publish messages with
TTL,Delay, andBroadcastflags directly from the browser. - Destructive Queue Management: Added
Purge(empty queue) andDelete(destroy queue and log file) capabilities directly to the UI. - Webhook Inspection: Users can now click the Webhook badge in the dashboard to view the exact URLs registered to a specific topic.
- New API Endpoints: Introduced
DELETE /api/queues/purge,DELETE /api/queues/delete, andGET /api/queues/webhooksto support the new dashboard features.
Changed
- Storage Engine Extensions: Upgraded
internal/storage/storage.gowithClearLogandDeleteLogmethods to natively support truncating or removing.logfiles without blocking the global mutex.
Fixed
- Critical Persistence Bug (Empty Queues): Fixed an issue in
LoadExistingTopicswhere fully consumed queues (0 messages in RAM, but existing.logfile) were ignored during broker startup. Empty queues are now properly loaded into RAM, ensuring they remain visible in the dashboard and are correctly auto-compacted after a container restart.
📦 Downloads
| Operating System | Broker Server | CLI Tool (tmq) |
|---|---|---|
| Windows (x64) | tinymq-windows-amd64.exe |
tmq-windows-amd64.exe |
| Linux (x64) | tinymq-linux-amd64 |
tmq-linux-amd64 |
| macOS (Intel) | tinymq-darwin-amd64 |
tmq-darwin-amd64 |
| macOS (Apple Silicon) | tinymq-darwin-arm64 |
tmq-darwin-arm64 |
Docker Image: docker pull ghcr.io/x-name15/tinymq:2.1.0
View Full CHANGELOG
v2.0.0: The "Featherweight Fortress" Update
Added
...
- Interactive Self-Service Dashboard: The embedded UI now acts as a complete control center. Added interactive modals allowing users to directly Publish JSON payloads, Consume (Pop) messages to view them, and Peek into queues natively from the browser without writing any code.
- Queue Inspection API (Peek): Introduced the
GET /api/queues/peekendpoint and internalbroker.Peek()method. This allows administrators to safely inspect up to X messages currently held in RAM without acknowledging or removing them from the queue. - UI API Suite: Added dedicated JSON endpoints (
/api/queues/publishand/api/queues/consume) specifically designed to serve frontend interactions and external non-standard clients cleanly. - Independent CLI Binary (
cmd/tmq): Built a standalone administrative terminal tool (tmq). It brings rich terminal diagnostics featuring multi-environment binding (TINYMQ_URL), raw RAM inspections (tmq peek), real-time queue streaming (tmq tail), and tabwriter-aligned telemetry matrices (tmq list/status).
Changed
- Docker Image: Migrated to a pure
scratchbase image for the final stage. The production image now weighs a mere ~13 MB, stripping out all OS-level bloatware and achieving 0 system vulnerabilities (CVEs). - Go SDK (
client/client.go): Extensively overhauled to support a single, unified, variadicPublishAPI. Developers can now map advanced routing parameters (TTL,Delay,Broadcast) using fluentPublishOptionsin a single invocation, drastically cleaning up implementation code. - Dashboard Visuals: Redesigned the data tables to include a new "Actions" column with dedicated, color-coded buttons for queue management.
- CI/CD Pipeline: Updated the GitHub Actions workflow (
release.yaml) to compile using Go 1.26, perfectly syncing the build matrix with thego.modspecification.
Security
- OOM Protection: Implemented
http.MaxBytesReaderacross all publish endpoints (/publishand/api/queues/publish). Payloads are now strictly capped at 2MB to prevent Out-Of-Memory denial-of-service attacks from unbounded requests. - RAM Backpressure: Added a hard memory ceiling (
MaxMessagesPerTopic = 100000). If a queue reaches this limit because workers are offline, the broker will now protect its host environment by returningHTTP 429 Too Many Requestsinstead of infinitely accumulating messages in RAM.
v1.5.0: Enterprise Features, Resiliency, and Dashboard Revamp
Added
- Dead Letter Queues (DLQ): Introduced automatic isolation for "poison pill" messages. Messages that fail to process 3 times via the SDK are now safely routed to a
{topic}.dlqqueue to prevent pipeline blocking. - Time-Based Routing (TTL & Delay): Added native support for scheduled messages (
?delay=X) and Lazy Expiration (?ttl=X) without introducing background polling threads. - Consumer Batching / Prefetch: Implemented multi-message extraction (
?limit=X). Consumers can now fetch arrays of messages in a single HTTP request, drastically reducing network overhead. - Broadcast Mode (Fan-out): Added ephemeral pub/sub capabilities (
?broadcast=true) to dispatch a single event to multiple independent consumers simultaneously. - Push Consumers (Webhooks): Implemented native passive integration. The broker can now be configured (
/webhook/{topic}) to automaticallyPOSTnew messages to external URLs (Fire-and-Forget). - Manual Topic Creation: Added a secure API endpoint (
/api/topics) to pre-initialize topics safely, enforcing alphanumeric regex validation and idempotency.
Changed
- Interactive Dashboard: Completely revamped the embedded UI (
/dashboard). It now features Vanilla JS Auto-Refresh, Uptime tracking, Webhook indicators, DLQ badges, and a manual topic creation interface—all remaining under 1KB of JS/CSS. - Go SDK (
client/client.go): Upgraded the worker subscription model. It now handles exponential backoff (1s to 32s) and automatically calls the new/requeueendpoint when a handler returns an error to preserve the retry count. - Core Engine: Refactored the internal
PublishandConsumemethods to support arrays, batching, and delayed message skipping without locking the global mutex. - Documentation: Fully updated
README.mdandDOCUMENTATION.mdto reflect the new enterprise-grade features while retaining the ~25MB image size and zero-dependency promises.
v1.0.5: Embedded dashboard, Makefile and Readme Enhancements
Added
- Asset Embedding: Moved
dashboard.htmlto an external file and utilized//go:embedto include it within the binary, maintaining a single-file delivery while improving maintainability. - Improved README: Added "Why use TinyMQ?" rationale and comprehensive "Configuration & depl
Changed
- Workflow: Optimized
Makefileto focus on essential tasks (fmt, build, clean).
Downloads
| Operating System | File Name |
|---|---|
| Windows (x64) | tinymq-windows-amd64.exe |
| Linux (x64) | tinymq-linux-amd64 |
| macOS (Intel) | tinymq-darwin-amd64 |
| macOS (Apple Silicon) | tinymq-darwin-arm64 |
Docker Image: docker pull ghcr.io/x-name15/tinymq:1.0.5
View CHANGELOG completo
v1.0.1: TinyMQ is NOW completely zero-dependency
Removed
- External UUID package: Completely removed the
github.com/google/uuiddependency from the broker to strictly fulfill the project's promise of zero external dependencies. go.sumfile: Removed from the repository, as third-party module integrity checks are no longer needed.go mod downloadstep: Removed from the build phase in theDockerfile, which also speeds up the image build process.
Changed
- Native UUID generator: Implemented an internal Go helper using exclusively the standard library (
crypto/rand) to securely generate unique message identifiers. go.modcleanup: Cleared the file by removing all external requirement blocks, leaving the project in a pure standard-library state.
Downloads
| Operating System | File Name |
|---|---|
| Windows (x64) | tinymq-windows-amd64.exe |
| Linux (x64) | tinymq-linux-amd64 |
| macOS (Intel) | tinymq-darwin-amd64 |
| macOS (Apple Silicon) | tinymq-darwin-arm64 |
Docker Image: docker pull ghcr.io/x-name15/tinymq:1.0.1
View CHANGELOG completo
v1.0.0: Official initial release of TinyMQ
TinyMQ - Official Release Notes
This is the first official release of TinyMQ. It evolves the initial prototype into a robust, lightweight, and production-ready message broker.
Added
- Disk Persistence (WAL): Implemented a write-ahead log using append-only
.logfiles per topic to ensure zero message loss. - Auto-Compaction: Automatic purge algorithm on server boot to clean up acknowledged (ACK) records and free disk space.
- Reactive Long Polling: Efficient message consumption by suspending goroutines via Go channels with timeout support.
- Wildcard Routing: Support for consuming topics using patterns (e.g.,
events.*) with a pre-compiled regex caching system. - Official Go SDK: Native client at
client/client.gowith robust subscription mechanisms, exponential backoff (1s up to 32s), and re-queuing on failures. - Integrated Web Dashboard: Lightweight UI at
/dashboardfor monitoring topics, pending messages, and RAM usage. - CI/CD Pipeline: GitHub Actions workflow (
release.yaml) for multi-platform binaries and Docker image publishing to GHCR.
Architecture & performance
- Lock-Free Routing: Minimize global lock contention by releasing the broker mutex before disk I/O.
- Graceful Shutdown: Intercept
SIGTERM/SIGINTto flush and close files cleanly. - Memory Leak Prevention: Explicit nil assignments before reslicing and handling of
r.Context().Done()to free blocked goroutines. - File Descriptor Caching: Reuse open
*os.Filehandles to reduce OS-level open/close overhead.
Deployment
- Multi-stage Docker image based on Alpine, final image under ~20MB.
- Production orchestration via
docker-compose.yml, mounting a persistent./datadirectory.
Downloads
| Operating System | File Name |
|---|---|
| Windows (x64) | tinymq-windows-amd64.exe |
| Linux (x64) | tinymq-linux-amd64 |
| macOS (Intel) | tinymq-darwin-amd64 |
| macOS (Apple Silicon) | tinymq-darwin-arm64 |
Docker Image: docker pull ghcr.io/x-name15/tinymq:1.0.0
View CHANGELOG completo