UptimeWolf
Lightweight Uptime Monitor with Notifications β Monitor your services and get alerted when they go down
Features
- Multi-type monitoring β HTTP, TCP, and ping checks
- Real-time dashboard β See uptime status, response times, and trends
- Incident tracking β Automatic incident creation and resolution with history
- Notification channels β Email, webhook, and Slack alerts
- Configurable intervals β Set check frequency per monitor
- Retry logic β Configurable retries before marking a service as down
- Uptime percentages β Rolling uptime calculation from check history
- Response time charts β Visualize response time trends
- SQLite storage β Lightweight, file-based database β no external deps
- Docker-ready β Full containerized deployment with docker-compose
Architecture
Browser (React + Vite)
β
βΌ
UptimeWolf API (Express + SQLite)
β
βββ MonitorService β Periodic checks (HTTP/TCP/Ping)
β βββ Success β Resolve incident, notify "up"
β βββ Failure β Create incident, notify "down"
β
βββ NotificationService
β βββ Email (SMTP via Nodemailer)
β βββ Webhook (HTTP POST)
β βββ Slack (Incoming Webhook)
β
βββ SQLite Database
βββ monitors
βββ checks
βββ incidents
βββ channels
Quick Start
Development
npm install
npm run dev # Frontend on :5176
npm run dev:server # API server on :3003
Docker
docker-compose up
- Web UI: http://localhost:5176
- API: http://localhost:3003
Environment Variables
PORT=3003
DB_PATH=./data/uptime-wolf.db
# SMTP for email notifications (optional)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_SECURE=false
SMTP_USER=your-email@gmail.com
SMTP_PASS=your-app-password
SMTP_FROM=UptimeWolf <alerts@example.com>
Usage
- Add a monitor β Click "Add Monitor", enter a name, URL, type (HTTP/TCP/Ping), and interval
- Configure notifications β Go to Settings, add an email/webhook/Slack channel
- Monitor your dashboard β View real-time status, response times, and uptime
- Track incidents β Check the Incidents page for downtime history
- Pause/resume β Pause monitors during maintenance windows
Project Structure
uptime-wolf/
βββ src/
β βββ components/
β β βββ Sidebar.tsx
β β βββ Dashboard.tsx
β β βββ StatCard.tsx
β β βββ UptimeChart.tsx
β β βββ MonitorList.tsx
β β βββ MonitorForm.tsx
β β βββ IncidentsView.tsx
β β βββ Settings.tsx
β βββ types.ts
β βββ api.ts
β βββ App.tsx
β βββ main.tsx
β βββ index.css
βββ server/
β βββ db.ts
β βββ monitorService.ts
β βββ notifications.ts
β βββ index.ts
βββ tests/
β βββ db.test.ts
βββ Dockerfile
βββ Dockerfile.api
βββ docker-compose.yml
βββ nginx.conf
βββ package.json
Development
npm install
npm run dev # Start frontend dev server
npm run dev:server # Start API server
npm test # Run tests
npm run typecheck # Type checking
npm run lint # Lint
npm run build # Build for production
Tech Stack
- Frontend: React 18, Vite, TailwindCSS, Recharts, Lucide icons, date-fns
- Backend: Express, TypeScript, better-sqlite3, Nodemailer
- Testing: Vitest
- Deployment: Docker, Nginx
License
MIT