Latest Stable Version: v1.28.6 (November 28, 2025)
License: MPL-2.0
Language: Rust
Docker Image: valeriansaliou/vigil:v1.28.6
GitHub Stars: 1.9k+ | Docker Pulls: 100K+
Vigil is a lightweight, self-hosted microservices status page that monitors distributed infrastructure and sends real-time alerts through multiple notification channels. Built in Rust for high performance and low resource consumption, Vigil provides a clean public status page to communicate service health to your users while offering monitoring capabilities for DevOps teams.
Vigil excels in microservices architectures where you need to monitor multiple components, publish incident updates, and maintain transparency with stakeholders. It supports four probe modes (Poll, Push, Script, Local), integrates with 11+ notification providers, and can be deployed via Docker, native packages, or from source.
cargo install vigil-server| Component | Technology |
|---|---|
| Backend | Rust (rustc 1.91.1+) |
| Frontend | Built-in static assets |
| Container | Docker (9 MB image size) |
| Architectures | x86_64, aarch64 (ARM64) |
| Operating Systems | Linux (Debian, Ubuntu, RHEL), macOS, BSD |
| Database | File-based state (no external DB required) |
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β Vigil Server β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββ β
β β Poll Probes β β Push Probes β β Script Probes β β
β β HTTP/TCP/ β β Application β β Custom Shell β β
β β SSH/ICMP β β Reported β β Scripts β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββ β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββ β
β β Local Mode β β RabbitMQ β β MCP Server β β
β β Vigil Local β β Queue β β (AI Agents) β β
β β Daemon β β Monitoring β β β β
β βββββββββββββββ βββββββββββββββ βββββββββββββββββββββββ β
βββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
β β β
βΌ βΌ βΌ
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
β Notification β β Public Status β β Manager API β
β Channels β β Page β β (Announcements) β
β - Email/SMS β β - Branding β β - Config β
β - Slack/Telegramβ β - Components β β - Status Mgmt β
β - Webhook β β - Incidents β β β
βββββββββββββββββββ βββββββββββββββββββ βββββββββββββββββββ
GET /status/report) (v1.28.0)docker run -d \
-p 8080:8080 \
-v /path/to/config.cfg:/etc/vigil.cfg \
--name vigil \
valeriansaliou/vigil:v1.28.6
echo "deb [signed-by=/usr/share/keyrings/valeriansaliou/vigil.gpg] https://packagecloud.io/valeriansaliou/vigil/debian/ bookworm main" > /etc/apt/sources.list.d/valeriansaliou_vigil.list
curl -fsSL https://packagecloud.io/valeriansaliou/vigil/gpgkey | gpg --dearmor -o /usr/share/keyrings/valeriansaliou/vigil.gpg
apt-get update && apt-get install vigil
cargo install vigil-server
vigil -c /path/to/config.cfg
[server]
log_level = "info"
inet = "[::]:8080"
workers = 4
manager_token = "${VIGIL_MANAGER_TOKEN}"
reporter_token = "${VIGIL_REPORTER_TOKEN}"
[branding]
page_title = "My Service Status"
page_url = "https://status.example.com"
company_name = "Example Inc"
icon_color = "#3B82F6"
logo_color = "#1E40AF"
[metrics]
poll_interval = 120
poll_retry = 2
poll_delay_dead = 10
poll_delay_sick = 5
[notify.email]
from = "vigil@example.com"
to = "ops@example.com"
smtp_host = "smtp.example.com"
smtp_port = 587
smtp_username = "vigil"
smtp_password = "${SMTP_PASSWORD}"
smtp_encrypt = true
[probe]
[[probe.service]]
id = "api"
label = "API Service"
[[probe.service.node]]
id = "api-health"
label = "API Health Check"
mode = "poll"
replicas = ["https://api.example.com/health"]
http_method = "GET"
http_body_healthy_match = "healthy"
Official and community libraries for Push mode monitoring:
| Language | Package | Repository |
|---|---|---|
| NodeJS | vigil-reporter |
npm |
| TypeScript | ts-vigil-reporter |
npm |
| Python | py-vigil-reporter |
PyPI |
| Golang | go-vigil-reporter |
GitHub |
| Rust | vigil-reporter |
crates.io |
| Dart | dart_vigil_reporter |
pub.dev |
| C# | cs-vigil-reporter |
NuGet |
Vigil requires CAP_NET_RAW capability for ICMP ping operations:
setcap 'cap_net_raw+ep' /bin/vigil
When running in Docker, ensure the config file is readable:
docker run -d \
-p 8080:8080 \
-v /path/to/config.cfg:/etc/vigil.cfg:ro \
--read-only \
--tmpfs /tmp \
--name vigil \
valeriansaliou/vigil:v1.28.6
Reduce polling frequency or increase poll_parallelism to distribute load:
[metrics]
poll_interval = 300 # Increase from 120 to 300 seconds
poll_parallelism = 8 # Allow more parallel polls
${VAR} interpolation instead of hardcoding/status/report)Any questions?
Feel free to contact us. Find all contact information on our contact page.