A production-ready notification microservice you deploy, not integrate.
REST API in, WebSocket notifications out — with persistent queuing, an admin GUI, and zero client-side library requirements.
Deploy one JAR, get a fully operational notification backend with auth, persistence, delivery tracking, and a built-in admin panel.
Send notifications to users, topics, or broadcast — via POST /api/notifications/*. Secure with JWT or API key. No SDK required on the caller side.
Notifications for offline users are stored in queued_notifications and flushed on reconnect. Topic subscriptions and audit logs survive restarts.
Admin access via short-lived JWTs with rotating refresh tokens. Machine-to-machine via X-API-Key. End-users authenticate WebSocket connections with per-user tokens.
Online users receive notifications instantly. ACK-based delivery tracking with automatic retries. Heartbeat ping/pong keeps connections alive and stale ones are cleaned up.
Built-in admin panel at /admin.html — no extra deployment. Full Vue 3 dashboard available separately with user management, topic management, API key admin, and a live WebSocket test client.
Interactive API explorer at /swagger-ui/index.html. Every notification send, ACK, and retry failure is recorded in the notification_audit table.
Your backend calls the API. NotiFlow handles routing, queuing, retry, and delivery.
Start the database, run the JAR, set your admin password, and start sending notifications.
Use the included docker-compose.yaml to start both PostgreSQL and the application.
On first boot, set the admin password, then obtain a JWT for authenticated API calls.
Create an end-user to get their WebSocket token. Create an API key for your backend service.
The user connects with their token. Your backend sends a notification via the API.
Check the full documentation for the complete REST API reference, database schema, configuration options, and Docker deployment guide.