OnRabble is a modern, self-hostable real-time chat platform designed for security, scalability, and observability. It combines WebSocket messaging, Keycloak-based authentication, PostgreSQL for persistence, Valkey for caching, and a React-based admin dashboard — all orchestrated behind a Caddy reverse proxy.
- Secure Authentication – Keycloak provides robust user management and JWT-based authentication.
- Real-Time Messaging – Go-based WebSocket server for fast, reliable chat delivery.
- Scalable Storage – PostgreSQL stores messages, users, and analytics data.
- High-Speed Caching – Valkey (a Redis-compatible engine) caches recent messages and enforces rate limits.
- Reverse Proxy (HTTPS) – Caddy terminates TLS and securely routes traffic.
- Admin Dashboard – A web-based React app for user moderation and analytics.
- Relational database backing for users, messages, channels, and sessions.
- Configured via environment variables from
./postgres/.env.[mode]. - Health checks used for startup synchronization.
- Manages authentication, user roles, and client credentials.
- Auto-imports realm config from
./keycloak/chat-realm.[mode].json.
- Go-based WebSocket backend, located in
./chatserver. - Communicates with PostgreSQL and Valkey.
- Handles routing, caching, rate limiting, and moderation.
- Redis-compatible caching system.
- Supports message buffering, rate limiting, and recent history.
- See
chatserver/internal/cache/README.mdfor implementation details.
- Handles HTTPS and request routing.
- Uses automatic TLS via Let's Encrypt in production.
- Configuration in
./caddy/Caddyfile.devandCaddyfile.prod.
- React-based admin dashboard.
- Communicates with the
chatserverover WebSockets and REST. - Provides analytics, message history, server settings, and user moderation tools.
- Trust Caddy’s internal root certificate if running locally.
- Run:
docker compose -f docker-compose.dev.yml up -d --build - Open the dashboard at: https://localhost
⚠️ Ensure your browser trusts Caddy's local CA or HTTPS will be blocked.
- Refactor message types for better modularity
- Add pardon/unban functionality for admins
- Include unsaved cached messages in search results
- Allow configuration of cache size from the admin dashboard
- Enable updating and deleting of chat channels
- Expand developer documentation
- Add a full “Getting Started” guide
This project is licensed under the MIT License (LICENSE).
The services defined in docker-compose.dev.yml and docker-compose.prod.yml use external software (e.g., Keycloak, PostgreSQL, Valkey, etc.), documented in THIRD_PARTY_SERVICES.md.
Each subproject may have additional third-party dependencies:
chatserver/: seechatserver/THIRD_PARTY_LICENSES.mdweb/: seeweb/THIRD_PARTY_LICENSES.md