Self-hosting & deploy

UptimeStatus is MIT-licensed and fully self-hostable. The entire application — web dashboard, JSON API, check workers, and scheduler — is open source at github.com/stacksjs/status. You can run it on hardware you control, or let the UptimeStatus team run it for you (see below).

Requirements

  • Bun >= 1.3
  • A reverse proxy (Caddy, nginx, or similar) to terminate TLS
  • A database (SQLite is fine to start; Postgres for scale) and optionally Redis for the queue

Deploy in five steps

# 1. Clone the repo
git clone https://github.com/stacksjs/status.git
cd status

# 2. Install dependencies
bun install

# 3. Configure your environment
cp .env.example .env
# edit .env — see Configuration for the vars that matter

# 4. Create the schema
./buddy migrate

# 5. Ship it
./buddy deploy

See the Configuration page for the environment variables to set, and the CLI reference for what each buddy command does.

What runs on the box

For most self-hosters, a single box runs everything, behind a reverse proxy that terminates TLS and forwards to the app:

  • web + APIbuddy serve, the dashboard and the JSON API.
  • workerbuddy queue:work, which executes the checks that flip monitor status.
  • schedulerbuddy schedule:run, which dispatches due checks every minute.
  • realtime (optional) — buddy realtime, the WebSocket broadcaster for live status dots.

This single-box layout comfortably handles a real monitoring workload. When you outgrow it — more monitors, or a second geographic check region — see Scaling & multi-region, which explains how to split the worker onto its own hosts and add regions without touching the primary.

Fully-managed alternative

If you'd rather not operate the box yourself, the UptimeStatus team offers fully-managed hosting at uptime-status.org — the same open-source application, run and updated for you, with multi-region checks already provisioned. Self-hosting and managed hosting run identical code, so you can move between them without changing how you use the product.