Uptime Kuma is a self-hosted monitoring application designed for developers and DevOps teams who need reliable, real-time visibility into the status of their services. It solves the problem of relying on third-party uptime monitors by providing a fully controllable, open-source alternative with a modern interface and deep integration options. Built with Vue 3, Vite.js, and WebSocket-based communication, it runs as a single-page app and supports deployment via Docker, Node.js, or PM2 on Linux and Windows.
The tool integrates with popular notification services like Telegram, Discord, Slack, and SMTP, and supports monitoring HTTP(S), TCP, DNS, Ping, WebSockets, Steam servers, and Docker containers. Its architecture avoids REST APIs in favor of WebSocket streaming for live updates, and it includes multi-language support, 2FA, and status page customization for public sharing.
What You Get
- HTTP(S) Monitoring - Tracks website availability with keyword and JSON query validation to detect content changes or API response errors.
- TCP Port Monitoring - Monitors TCP services (e.g., databases, game servers) for connection failures and response timeouts.
- Docker Container Monitoring - Directly monitors Docker container health via container name or ID without external scripts.
- 90+ Notification Integrations - Supports Telegram, Discord, Slack, Gotify, Pushover, Email (SMTP), and more via configurable webhooks and APIs.
- Real-Time WebSocket Dashboard - Live updates without page refresh using WebSocket, with ping charts and certificate expiry alerts.
- Public Status Pages - Generate customizable, domain-mapped status pages to share service health with customers or teams.
Common Use Cases
- Monitoring a production API stack - A DevOps engineer uses Uptime Kuma to track HTTP endpoints, Docker containers, and TCP ports for microservices, triggering Discord alerts on downtime.
- Running a SaaS product with public status pages - A startup publishes a branded status page at status.myapp.com to inform customers of outages in real time.
- Tracking home lab services - A hobbyist monitors their NAS, Plex server, and Pi-hole via TCP and ping checks, receiving Telegram alerts when services go offline.
- Ensuring game server uptime - A Minecraft server owner configures Uptime Kuma to monitor Steam game servers and notify players via Discord when the server restarts or crashes.
Under The Hood
Architecture
- Monolithic server architecture with tightly coupled routing, database, and notification logic centered around a single entry point, lacking service boundaries or dependency injection
- Frontend components are modular but lack a unified interface or plugin system, limiting extensibility of notification providers
- Backend and frontend are physically separated but share no formal API contract or type safety, relying on hardcoded endpoints and untyped HTTP calls
- Notification system is hardcoded with no abstract interface or registry, preventing dynamic extension or runtime plugin loading
- State management is ad-hoc via Vue root instance properties, violating unidirectional data flow and scattering application state
Tech Stack
- Node.js backend powered by Express and RedBeanNode with TypeScript tooling for type safety and maintainability
- Vue 3 frontend built with Vite, leveraging scoped CSS and composables for component modularity and fast development cycles
- Multi-database support with MySQL, SQLite, and optional MongoDB, backed by a migration system and Dockerized deployment
- Comprehensive testing infrastructure with Playwright for E2E UI tests and built-in Node.js test runner for backend unit tests
- Docker-based multi-stage builds and compose orchestration enable consistent development and production environments
Code Quality
- Extensive test coverage across unit, integration, and end-to-end scenarios with realistic test containers for external services
- Robust error handling with precise assertions and validation for edge cases like certificate mismatches and protocol non-compliance
- Clear separation between frontend and backend concerns, with typed props and modular monitor types enhancing maintainability
- Strong type safety through consistent TypeScript usage and domain-specific enums, reducing runtime failures
- Semantic naming conventions and well-structured test files promote readability and ease of onboarding for new contributors
What Makes It Unique
- Deep integration with niche messaging platforms featuring template parsing and API URL customization not found in generic tools
- Built-in Telegram bot configuration with dynamic chat ID discovery and support for local API servers, minimizing external dependencies
- Client-side service worker implementation for WebPush notifications without requiring a backend message queue
- Template-driven notification system supporting HTML, Markdown, and plain text with dynamic field substitution for highly customized alerts
- Progressive web app features including offline capability, theme persistence, and service worker caching, creating a desktop-like monitoring experience