v0.40.1 · open source · self-hosted

Self-hosted server monitoring, deployed in minutes.

A single Hub, one lightweight agent per host. Live metrics every 30 seconds, package inventory updated daily, threshold-based alerts by email or webhook.

Live metrics

CPU Usage

34.2%

Memory Usage

6.1 GB

Disk I/O

R: 4.8 MB/s / W: 1.2 MB/s

Network

↓ 1.4 MB/s / ↑ 0.6 MB/s
Dashboard preview
Watchflare dashboard with real-time host metrics, package inventory and alerts Watchflare dashboard with real-time host metrics, package inventory and alerts
Features

Everything you need to keep an eye on your servers.

Live metrics, container telemetry, package inventory, and threshold alerts. Collected every 30 seconds by a lightweight agent and centralized in a single Hub.

Real-time streaming

CPU, memory, disk, network, load average, temperature, disk IO, swap. SSE on the Hub side, gRPC on the agent side. Live updates without client-side polling.

sse · grpc · 30s interval

Container metrics

Per-container CPU, memory, and network via the Docker or Podman API. Opt-in: one option at install, nothing to add inside your containers.

docker · podman · per-container

Package inventory

~30 package managers scanned daily. Watchflare logs every change per host and flags pending updates, security ones included, on supported managers.

apt · dnf · brew · pip · npm · many more

Secure by default

TLS 1.3 end-to-end with auto-generated CA (or bring your own), gRPC requests with HMAC-SHA256 signatures and anti-replay, JWT sessions, bcrypt passwords.

tls 1.3 · hmac · jwt · bcrypt

Write-ahead log

Hub offline? The agent buffers metrics to disk and sends them in order on reconnect. No gaps within the buffer (10 MB by default, configurable).

local wal · replay on reconnect

Alerting & history

Thresholds (CPU, memory, disk, load, temperature) and host-offline detection. Alerts by email or webhook, every trigger and resolution kept per host.

smtp · thresholds · incident timeline
Screens

Inside the dashboard.

Watchflare hosts list with per-host CPU, memory, disk, temperature and package counters Watchflare hosts list with per-host CPU, memory, disk, temperature and package counters
Watchflare host detail page with real-time CPU and memory graphs Watchflare host detail page with real-time CPU and memory graphs
Watchflare package inventory view with package versions, status and outdated/security counts Watchflare package inventory view with package versions, status and outdated/security counts
Watchflare alert rules panel with per-host thresholds for host offline, CPU, memory and disk Watchflare alert rules panel with per-host thresholds for host offline, CPU, memory and disk
Architecture

How it all fits together.

Monitored hosts
linux · systemd prod-web-01 WAL local
macos · homebrew mac-mini WAL local
linux · systemd worker-02 WAL local + container metrics
gRPC · TLS 1.3 · HMAC
Watchflare Hub
Go binary gRPC SSE SvelteKit
SQL · SSE · HTTP
Storage & outputs
postgres + extension TimescaleDB hypertables · continuous aggregates
browser · SSE Web dashboard sveltekit · uPlot
outbound Notifications email · webhooks · thresholds · host offline
Agent
Go · gRPC client · WAL
A lightweight unprivileged binary on each host. Collects metrics, buffers them locally if the Hub is unreachable, sends them on reconnect.
Hub
Go · Gin · gRPC · SvelteKit
A single binary with the SvelteKit dashboard embedded via go:embed. Deployed via Docker Compose (or as a standalone binary).
Database
TimescaleDB
PostgreSQL + extension. Hypertables, compression, and continuous aggregates for long-term retention.
Security
TLS 1.3 · HMAC · JWT
Auto-generated CA (or bring your own). Pinned on each agent at registration. gRPC requests signed with HMAC-SHA256 and anti-replay, JWT sessions, bcrypt passwords.
Install

Docker for the Hub, a one-liner on each host.

Start the Hub with Docker Compose, then enroll each host with a one-time token and a copy-paste install command. Full guide at docs.watchflare.io.

# 1. Create a working directory and download the compose file $ mkdir watchflare && cd watchflare && \ curl -sSLO https://get.watchflare.io/hub/docker-compose.yml # 2. Generate the three required secrets (POSTGRES_PASSWORD, JWT_SECRET, SMTP_ENCRYPTION_KEY) $ printf "POSTGRES_PASSWORD=%s\nJWT_SECRET=%s\nSMTP_ENCRYPTION_KEY=%s\n" \ "$(openssl rand -base64 32)" \ "$(openssl rand -base64 32)" \ "$(openssl rand -base64 32)" > .env # 3. Start the Hub $ docker compose up -d # Open http://your-server:8080 and create your admin account
# Install and enroll the agent (managed by systemd) $ curl -sSL https://get.watchflare.io | sudo bash -s -- \ --token wf_reg_YOUR_TOKEN \ --host YOUR_HUB_IP \ --port 50051 # Check the agent service status $ watchflare-agent status
# Install and enroll the agent via Homebrew (no sudo) $ curl -sSL https://get.watchflare.io/brew | bash -s -- \ --token wf_reg_YOUR_TOKEN \ --host YOUR_HUB_IP \ --port 50051 # Check the agent service status $ watchflare-agent status
Requirements
Hub Docker Engine 20.10+ with Compose v2+ · ports 8080 (Hub) and 50051 (gRPC)
Agent Linux (systemd) or macOS (Homebrew) · x86_64 and ARM64
FAQ

Common questions about Watchflare.

Watchflare is AGPL-3.0 licensed and free to self-host. The Hub runs in Docker on any modern Linux machine you already have. Your only cost is the hardware it runs on.
Linux (x86_64 and ARM64) on any modern distribution with systemd, and macOS (Intel and Apple Silicon) via Homebrew. Windows support is planned.
The agent is a small unprivileged binary that collects metrics every 30 seconds with minimal CPU and memory usage. No noticeable impact on a Raspberry Pi or a $5 VPS.
The agent writes to a local Write-Ahead Log (10 MB by default, configurable). When the Hub comes back, all buffered metrics are sent in order, with no gaps within the buffer size. Container metrics are point-in-time and not buffered.
All metrics live in the bundled PostgreSQL + TimescaleDB instance. By default, the database runs on the same machine as the Hub, on a Docker volume you control. You can also point the Hub at an external instance, as long as it has the TimescaleDB extension installed.
Issues and PRs are open on GitHub. New collectors, OS ports, and field feedback are especially welcome. See CONTRIBUTING.md to get started.

Monitor your servers, simply.

Open source, self-hosted, ready to deploy.