Self-hosted uptime monitoring with real-time WebSocket updates, beautiful status pages, and multi-region distributed monitoring. Track HTTP, TCP, databases, and 8 more protocols.
A complete monitoring solution with real-time updates, beautiful status pages, and flexible alerting - all self-hosted and privacy-respecting.
Instant status updates via WebSocket connections. No polling, no delays - see changes as they happen.
15 stunning themes, responsive design, and customizable branding. Public or password-protected pages.
Organize monitors into nested groups with customizable health strategies: any-up, all-up, or percentage.
Track up to 3 custom numeric values per monitor. Player counts, connections, memory usage - anything you need.
Discord webhooks, email (SMTP), and Ntfy notifications. Down, still-down, and recovery alerts.
Deploy PulseMonitor agents globally for distributed monitoring. Check from multiple locations simultaneously.
Raw pulses for 24h, hourly aggregates for 90 days, daily aggregates forever. Powered by ClickHouse.
Update configuration without restarts. Add monitors, change intervals, or modify groups on the fly.
100% self-hosted. Your data stays on your infrastructure. No external dependencies or tracking.
From web endpoints to databases, email servers to game servers - PulseMonitor supports 11 protocols out of the box with configurable timeouts and authentication.
A modular architecture with distributed monitoring agents, real-time WebSocket updates, and high-performance ClickHouse storage.
Distributed agents that check services and send heartbeats
Central server processing pulses and managing state
High-performance storage for pulses and aggregations
Real-time dashboard with WebSocket updates
Simple TOML configuration makes setup straightforward. Add monitors, groups, and status pages with just a few lines.
# ClickHouse connection [clickhouse] url = "http://user:pass@clickhouse:8123/uptime_monitor" # Define a monitor [[monitors]] id = "api-prod" name = "Production API" token = "tk_prod_api_secret" interval = 30 maxRetries = 2 resendNotification = 12 groupId = "production" notificationChannels = [] # Optional: Configure PulseMonitor for automated checks [monitors.pulse.http] method = "GET" url = "https://api.example.com/health" timeout = 10 # Create a group [[groups]] id = "production" name = "Production Services" strategy = "percentage" degradedThreshold = 50 interval = 30 # Create a status page [[status_pages]] id = "public" name = "Production" slug = "public" items = ["production"]
Check out our live status page powered by Uptime Monitor - monitoring real production services.
status.passky.org View Live Status PageUpload your config.toml file and edit it through a beautiful visual interface. Export back when you're done.