Noureddine RAMDI / Uptime Kuma: A modern self-hosted uptime monitor with real-time reactive UI

Created Sun, 26 Apr 2026 17:51:11 +0000 Modified Sat, 23 May 2026 20:41:27 +0000

louislam/uptime-kuma

Uptime Kuma is a solid alternative to commercial uptime monitoring services like Uptime Robot, designed for those who prefer a self-hosted, open-source solution with a modern UI and real-time responsiveness. What sets it apart is its reactive frontend built with Vue 3 and Vite.js, paired with WebSocket connections to push live updates instantly rather than relying on periodic REST polling. This approach improves user experience significantly, especially when monitoring multiple services with frequent status changes.

What uptime kuma does and its architecture

Uptime Kuma is an open-source uptime monitoring tool that supports multiple protocols out of the box, including HTTP(s), TCP, WebSocket checks, and Docker container monitoring. It targets homelab users and small teams who want to keep tabs on their infrastructure without relying on third-party services.

The backend is primarily JavaScript-based, running on Node.js, and the frontend uses Vue 3 with Vite.js for fast hot module replacement and a reactive interface. This stack is a modern choice that prioritizes developer experience and smooth UI interactions.

Uptime checks run at configurable intervals — the default is every 20 seconds. The system supports multiple status pages, allowing you to create public or restricted views of your monitored services. It also offers over 90 notification integrations, including popular platforms like Discord, Slack, Telegram, email, and many more. Two-factor authentication (2FA) is supported for added security.

Deployment is flexible: you can run Uptime Kuma inside Docker containers via Docker Compose or a single Docker run command. There’s also support for a non-Docker setup using Node.js and PM2, catering to users who prefer or require direct Node.js deployments.

The reactive UI with WebSocket updates: technical strengths and tradeoffs

The standout feature under the hood is the frontend’s use of Vue 3 combined with Vite.js, which offers a snappy development and runtime experience. Unlike many monitoring dashboards that poll the server via REST requests every few seconds, Uptime Kuma uses WebSockets to deliver status updates in real time. This means the UI reflects changes as soon as they happen, reducing lag and improving the feel of the application.

This design choice involves tradeoffs. WebSockets require a persistent connection, which can be more complex to maintain in some network environments compared to REST. However, the benefits for user experience and reduced server load from avoiding constant polling are clear. The codebase for this part is surprisingly clean and well-structured, making good use of modern Vue composition API patterns.

The backend handles checks asynchronously and pushes results through the WebSocket channel. This reactive architecture ensures scalability for moderate workloads typical in homelab or small business environments.

Another technical highlight is the broad support for notification services. The repo integrates with over 90 different platforms, which is impressive and useful for real-world setups. This wide coverage means you can receive alerts wherever you and your team communicate.

On the downside, the project explicitly warns against using network file systems (NFS) for data persistence, recommending local volumes instead. This is an operational limitation to keep in mind depending on your infrastructure.

Quick start

To get Uptime Kuma up and running with Docker Compose, the README provides these exact commands:

mkdir uptime-kuma
cd uptime-kuma
curl -o compose.yaml https://raw.githubusercontent.com/louislam/uptime-kuma/master/compose.yaml
docker compose up -d

This will start the service on port 3001 accessible on all network interfaces.

Alternatively, you can run it directly with Docker:

docker run -d --restart=always -p 3001:3001 -v uptime-kuma:/app/data --name uptime-kuma louislam/uptime-kuma:2

If you want to restrict access to localhost only, adjust the port binding accordingly.

For non-Docker setups, you need Node.js >= 20.4, Git, and pm2. Then:

git clone https://github.com/louislam/uptime-kuma.git
cd uptime-kuma
npm run setup

Who should consider uptime kuma?

Uptime Kuma is a practical choice for developers, sysadmins, and homelab enthusiasts who want a self-hosted uptime monitor with a polished, real-time UI. Its multi-protocol support and notification flexibility make it suitable for tracking a variety of service types.

While it’s not designed for enterprise-scale monitoring of thousands of nodes, it covers the needs of smaller environments well. The reliance on WebSockets and Vue 3 suggests a modern codebase with good developer experience, but also means some overhead in maintaining persistent connections and modern JavaScript dependencies.

The explicit warning about NFS and unsupported platforms like FreeBSD means it’s best suited for typical Linux or Windows server setups.

Overall, Uptime Kuma balances usability, real-time responsiveness, and deployment flexibility, making it a reliable tool in the self-hosted monitoring space without overcomplicating the architecture.


→ GitHub Repo: louislam/uptime-kuma ⭐ 85,936 · JavaScript