Skip to main content
Better Uptime Hero

What is Better Uptime?

Better Uptime is a self-hosted uptime monitoring platform that helps you track the health and performance of your websites and services. Built with modern technologies and designed for scalability, it provides real-time monitoring, status pages, and comprehensive analytics.

Real-time Monitoring

Monitor your websites with configurable check intervals and instant notifications

Public Status Pages

Share your uptime status with customers using beautiful, customizable status pages

Custom Domains

Host status pages on your own domain for a seamless brand experience

Advanced Analytics

Time-series data storage with ClickHouse for powerful insights and reporting

Key Features

Better Uptime automatically checks your websites every 3 minutes. The system:
  • Publishes website checks to Redis streams
  • Distributes work across multiple worker instances
  • Records response times and HTTP status codes
  • Tracks uptime/downtime with millisecond precision
Built on a modern tech stack designed for reliability:
  • tRPC for type-safe API communication
  • Redis Streams for distributed job processing
  • ClickHouse for time-series data storage
  • Prisma for database operations
  • Bun runtime for blazing-fast performance
Deploy workers in different regions to:
  • Monitor from multiple geographic locations
  • Reduce latency for global services
  • Detect region-specific outages
  • Scale horizontally with ease
The worker system ensures zero data loss:
  • Consumer groups for distributed processing
  • Automatic reclaim of stale messages (PEL)
  • Graceful handling of failures
  • Client-side timeouts prevent hanging operations

System Architecture

Better Uptime uses a distributed architecture with specialized services: Better Uptime Architecture

Explore Full Architecture

View the detailed architecture diagram on Excalidraw

Core Components

1

Publisher Service

Fetches active websites from the database every 3 minutes and publishes them to Redis streams for processing.
const websites = await prismaClient.website.findMany({
  where: { isActive: true },
  select: { url: true, id: true }
});
await xAddBulk(websites);
2

Worker Service

Consumes messages from Redis streams, performs HTTP checks, and stores results in ClickHouse.
const messages = await xReadGroup({
  consumerGroup: REGION_ID,
  workerId: WORKER_ID
});
// Process checks and record to ClickHouse
await recordUptimeEvents(events);
3

Backend API

Provides tRPC endpoints for managing websites, viewing status, and configuring monitors.
// Create a new monitor
const website = await prismaClient.website.create({
  data: { url, name, userId, isActive: true }
});
4

Frontend Client

Next.js application for the dashboard and status pages with real-time updates.

Tech Stack

Backend

  • tRPC - Type-safe APIs
  • Prisma - Database ORM
  • Zod - Schema validation

Data Layer

  • PostgreSQL - Primary database
  • ClickHouse - Time-series data
  • Redis - Message streams

Frontend

  • Next.js - React framework
  • Turborepo - Monorepo tool
  • Bun - JavaScript runtime

Get Started

Set up Better Uptime in minutes with Docker

Architecture Guide

Understand how the system works under the hood

API Reference

Integrate with the tRPC API programmatically

Deployment Guide

Deploy to production with best practices
Try the Demo: Use the test credentials to explore a live instance:

Build docs developers (and LLMs) love