IgnisQ is an asynchronous Firebase Cloud Messaging (FCM) relay engine engineered in Rust.
300
IgnisQ is an industrial-grade, asynchronous Firebase Cloud Messaging (FCM) relay engine engineered in Rust.
It serves as a high-performance buffer and scheduling layer between your backend services and Google's FCM infrastructure. By offloading the complexity of rate limiting, batching, and persistent queuing to a dedicated, low-footprint service, IgnisQ ensures that your notifications are delivered with millisecond precision and zero message loss.
Why IgnisQ?
send_at timestamps.sent and failed records older than 24h to keep the database slim.The service consists of three main components:
All endpoints (except /health) require authentication via Bearer Token.
Header: Authorization: Bearer <YOUR_API_TOKEN>
Simple endpoint to verify if the service is up and running.
/healthGET200 OK | All okQueue a single message for a specific device or topic.
/pushPOSTSend to Device Token
{
"token": "fCM_dEvIcE_tOkEn_123",
"title": "Welcome!",
"body": "Thanks for joining IgnisQ."
}
Send to Topic
{
"topic": "fCM_dEvIcE_tOkEn_123",
"title": "Big Sale!",
"body": "50% off for all items!"
}
Scheduled Push
{
"token": "fCM_dEvIcE_tOkEn_123",
"title": "Delayed Hello",
"body": "This notification was scheduled for later.",
"send_at": "2026-02-25T10:00:00Z"
}
Queue multiple messages in a single request. The payload is an array of objects with the same structure as in the Single Push endpoint.
/push/manyPOSTMaximum 500 messages per request.Example Payload:
[
{
"token": "fCM_dEvIcE_tOkEn_123",
"title": "First Message",
"body": "Hello Alpha"
},
{
"topic": "news",
"title": "Second Message",
"body": "Hello World!",
"send_at": "2026-02-15T20:00:00Z"
}
]
The service requires the following environment variables. Create a .env file in the root directory:
# Mode: set to 'true' to enable FCM "validate_only" mode (test dry-run)
# If false or unset, notifications will be delivered to real devices.
DEBUG=false
# Security token for your API (used in Bearer Auth)
API_TOKEN=your_secure_token_here
# Server host (defaults to 0.0.0.0)
HOST=0.0.0.0
# Google Service Account JSON
# IMPORTANT: This must be the entire JSON string.
# Ensure the "private_key" field contains literal '\n' characters for correct parsing.
FCM_SERVICE_ACCOUNT_JSON={"type": "service_account", "project_id": "...", "private_key": "-----BEGIN PRIVATE KEY-----\n...\n-----END PRIVATE KEY-----\n", ...}
This project is licensed under the GNU General Public License v3.0. We believe that software should be open, transparent, and accessible to everyone. Open source is not just a development model — it’s a commitment to collaboration, freedom, and shared progress. You are free to use, study, modify, and distribute this software, including for commercial purposes. However, any distributed modifications or derivative works must also be licensed under GPL-3.0 and include the source code. By choosing GPL-3.0, this project ensures that improvements remain open and benefit the entire community.
Content type
Image
Digest
sha256:f9a4c8592…
Size
9.9 MB
Last updated
5 months ago
docker pull ctrlart/ignisq:0.1.0