ZenMonitor is a minimalist, self-hosted uptime monitor designed for developers who suffer from "dashboard fatigue." Unlike existing tools that feature complex GUIs and database-stored configurations, ZenMonitor treats Configuration as Code.
The entire application state is defined in a single monitors.yaml file, making it instantly deployable via Ansible, Terraform, or simple Git cloning. The interface is purely visual: a premium Neumorphic grid of green/red dots representing the last 90 days.
- Configuration as Code: Single
monitors.yamlsource of truth. - Visual Dot Matrix: GitHub-style activity heat map for uptime history.
- Lightweight Backend: Written in Go (Golang), consuming minimal RAM (<20MB).
- Premium UI: Neumorphic design with dark mode, smooth animations, and hover tooltips.
- Notifications: Integrated support for Telegram and Slack alerts.
- Docker Ready: Multi-stage build for a tiny production image.
Using Docker:
docker run -d \
-p 8080:8080 \
-v $(pwd)/monitors.yaml:/app/monitors.yaml \
-v zen_data:/app/data \
github.com/pronzzz/zenmonitor:latestRunning Locally:
# Clone the repo
git clone https://github.com/pronzzz/zenmonitor.git
cd zenmonitor
# Install dependencies
go mod tidy
# Run the server
go run cmd/server/main.goAccess the dashboard at http://localhost:8080.
Define your services in a simple YAML file:
global:
check_interval: 60s
history_days: 90
notifications:
- type: telegram
token: "YOUR_BOT_TOKEN"
chat_id: "YOUR_CHAT_ID"
monitors:
- name: "Google Public DNS"
type: "icmp"
host: "8.8.8.8"
- name: "Production API"
url: "https://api.myapp.com/health"
method: "GET"
expect_status: 200- Backend: Go (Golang) 1.23+
- Database: SQLite (Embedded, WAL mode enabled)
- Frontend: Vanilla JS + HTMX
- Styling: Custom Neumorphic CSS (Dark Mode)
Contributions are welcome! Please read CONTRIBUTING.md for details on our code of conduct, and the process for submitting pull requests.
This project is licensed under the MIT License - see the LICENSE file for details.
