A Electron desktop application for uptime monitoring Track multiple services simultaneously with real-time updates, response time analytics, and historical data visualization
Application screenshots will be added here once available
Uptime Watcher is a desktop application built with modern web technologies that provides monitoring capabilities for websites, APIs, servers, and network services. Unlike most monitoring tools, there's no cloud dependency or command-line interface required. You can monitor everything with ease from a GUI.
| π Multi-Protocol Monitoring | π Real-Time Analytics | π Smart Notifications |
|---|---|---|
| 14 monitor types: HTTP family (6 variants) | Live status updates | Desktop alerts for outages |
| Transport: TCP ports, ICMP ping | Response time tracking | Sound notifications |
| Network services: DNS resolution, SSL certificates | Historical data visualization | Custom alert thresholds |
| Advanced: CDN drift, replication lag, WebSocket health | Performance metrics | Status change detection |
- π― Multi-Service Monitoring: Fourteen built-in monitor types covering HTTP variants (status, headers, JSON fields, keywords, latency), DNS, SSL certificates, TCP ports, ICMP ping, CDN edge drift, replication lag, heartbeat endpoints, and WebSocket keepalive health
- β‘ Real-Time Updates: Live status changes with sub-second responsiveness
- π Performance Analytics: Response time tracking with trend analysis
- π Historical Data: Comprehensive uptime history with SQLite storage
- βοΈ Flexible Configuration: Customizable check intervals from 5 seconds to 30 days
- πΎ Data Persistence: Local SQLite database with backup/restore functionality
- π Retention Sync: Renderer settings stay aligned with orchestrator/database changes via
settings:history-limit-updated - β‘ Instant Manual Checks: Optimistic status updates immediately after manual monitor checks resolve
| Category | Monitor | Primary objective | Highlights |
|---|---|---|---|
| HTTP Availability | HTTP (Website/API) | Measure general availability and response time | Handles redirects, captures response code, records latency |
| HTTP Validation | HTTP Status Code | Enforce an exact response status | Marks monitor degraded/down when status deviates from expectation |
| HTTP Content | HTTP Header Match | Validate specific response headers | Case-insensitive comparisons with retry-aware checks |
| HTTP Content | HTTP Keyword Match | Ensure body contains a keyword | Case-insensitive substring search for rapid regressions |
| HTTP Content | HTTP JSON Match | Inspect JSON payload fields | JSON path extraction with typed comparison |
| HTTP Performance | HTTP Latency Threshold | Detect slow responses | Flags degraded when latency exceeds configured threshold |
| Transport | Port (Host/Port) | Verify TCP connectivity | Connection handshake timing with configurable ports |
| Transport | Ping (Host) | Check reachability | ICMP ping with latency sampling and packet loss handling |
| Network Services | DNS (Domain Resolution) | Resolve DNS records | Supports A, AAAA, CNAME, MX, TXT, NS, SRV, CAA, PTR, NAPTR, SOA, TLSA, ANY |
| Security | SSL Certificate | Track TLS validity | Warns on expiry windows and handshake anomalies |
| Edge Delivery | CDN Edge Consistency | Compare edge vs origin responses | Detects drift in status/content across edge nodes |
| Data Platforms | Replication Lag | Monitor replica freshness | Compares timestamps between primary and replica endpoints |
| Application Health | Server Heartbeat | Validate custom heartbeat payloads | Status/timestamp drift analysis with JSON path extraction |
| Realtime Channels | WebSocket Keepalive | Ensure WebSocket responsiveness | Ping/pong watchdog for stalled connections |
# Download the latest release from GitHub
# Available for Windows, macOS, and Linux# Clone the repository
git clone https://github.com/Nick2bad4u/Uptime-Watcher.git
cd Uptime-Watcher
# Install dependencies
npm install
# Start development environment
npm run electron-dev # Append flags if needed: npm run electron-dev -- --log-debug- π Main Dashboard: Real-time monitoring overview with service status across all 14 monitor types
- βοΈ Monitor Configuration: Easy setup for HTTP variants, TCP ports, DNS, ping, SSL certificates, CDN edge checks, replication lag, heartbeat validation, and WebSocket keepalive
- π Historical Analytics: Response time graphs and uptime statistics for every monitored endpoint
- π Notification System: Customizable desktop alerts for status changes across all monitor types
# Start Vite dev server only
npm run dev
# Start Electron only (requires Vite to be running)
npm run electron
# Start both Vite and Electron concurrently (recommended)
npm run electron-dev # Supports flags: npm run electron-dev -- --log-debug
# Build for production
npm run build
# Package the application
npm run dist| Requirement | Version | Download |
|---|---|---|
| Node.js | 24.8+ (required) | Download |
| npm | 11.6.4+ (included with Node.js) | Docs |
| Git | Latest version | Download |
> π‘ Tip: Check out the Developer Quick Start Guide for detailed setup instructions and architecture overview.
npm run lint # ESLint for all TS/JS sources with caching
npm run lint:css # Stylelint for CSS/Tailwind layers across src/electron/shared/docs
npm run lint:fix # ESLint auto-fix pass (JS/TS only)
npm run lint:css:fix # Stylelint auto-fix pass
npm run format # Aggregated fixer (Prettier + Stylelint + ESLint + remark)
npm run check-types # Full project reference type-check (tsc --build)
npm run docs:check-links # Validates documentation cross-linksFor practical guidance on configuring monitors and writing tests, see our comprehensive testing documentation:
- Testing Documentation - Includes fuzzing coverage, Playwright guides, and testing best practices
For running and tuning our fast-check based fuzzing suites, see:
- Fast-Check Fuzzing Coverage Guide β docs/Testing/FAST_CHECK_FUZZING_GUIDE.md
For comprehensive testing with Playwright, including setup, configuration, and troubleshooting common issues:
- Playwright Testing Guide β docs/Testing/PLAYWRIGHT_TESTING_GUIDE.md
npm run generate:ipcβ Regenerates preload bridge typings and the channel inventory.npm run check:ipcβ Validates that generated artifacts are in sync; this command runs in CI.
Need deeper guidance? See the IPC Automation Workflow guide for examples, troubleshooting, and CI integration tips.
The application follows a service-oriented architecture with clear separation of concerns:
flowchart LR
classDef persona fill:#1f2937,stroke:#fbbf24,color:#f9fafb,font-weight:bold;
classDef main fill:#1e1b4b,stroke:#ec4899,color:#fce7f3;
classDef renderer fill:#0f172a,stroke:#06b6d4,color:#cffafe;
classDef data fill:#064e3b,stroke:#10b981,color:#d1fae5;
classDef service fill:#312e81,stroke:#8b5cf6,color:#e9d5ff;
classDef infra fill:#451a03,stroke:#f59e0b,color:#fef3c7;
linkStyle default stroke-width:2px;
User((π©βπ» Operator)):::persona
subgraph Renderer['Renderer Β· React + Zustand']
direction TB
UI['React UI Components']
Store['Zustand Domain Stores']
Telemetry['UX Telemetry Hooks']
end
subgraph Main['Electron Main Process']
direction TB
Services['Monitoring Orchestrator']
IPC['Typed IPC Gateway']
Scheduler['Task Scheduler']
EventBus['TypedEventBus']
end
subgraph Persistence['Local Persistence & Cache']
direction TB
SQLite[(SQLite Database)]
Cache[(In-Memory Cache)]
Backups['Backup Service']
end
subgraph Integrations['Infrastructure & Services']
direction TB
Monitors['Protocol Workers
HTTP Family β’ DNS β’ SSL β’ Ping β’ Port β’ CDN β’ Replication β’ Heartbeat β’ WebSocket']
Alerts['Notification Engine']
end
User -->|Configures| UI
UI --> Store
Store -->|Requests| IPC
IPC --> Services
Services --> EventBus
Services --> Scheduler
Scheduler --> Monitors
Monitors --> Services
Services -->|Status Events| IPC
IPC --> Store
Store --> Telemetry --> EventBus
Services --> SQLite
SQLite --> Cache
Cache --> Services
SQLite --> Backups
EventBus --> Alerts
Alerts --> User
class Services,IPC,Scheduler,EventBus,Monitors,Alerts service;
class UI,Store,Telemetry renderer;
class Integrations infra;
click Services "docs/Architecture/README.md" "Open architecture documentation"
click Store "docs/Architecture/ADRs/ADR_004_FRONTEND_STATE_MANAGEMENT.md" "Read ADR-004"
click IPC "docs/Architecture/ADRs/ADR_005_IPC_COMMUNICATION_PROTOCOL.md" "Read IPC protocol"
click EventBus "docs/Architecture/ADRs/ADR_002_EVENT_DRIVEN_ARCHITECTURE.md" "Read event-driven architecture"
click SQLite "docs/Architecture/ADRs/ADR_001_REPOSITORY_PATTERN.md" "Review repository pattern"
- π₯οΈ Main Process (Electron): Service container with dependency injection
- π¨ Renderer Process (React): Component-based UI with Zustand state management
- π IPC Communication: Type-safe communication via contextBridge
- ποΈ Database Layer: Repository pattern with SQLite and transaction safety
- π‘ Event System: TypedEventBus for cross-service communication
- π Monitoring System: Enhanced monitoring with operation correlation
- ποΈ Service-Oriented Architecture: Modular, testable service design
- π Type Safety: Strict TypeScript with comprehensive interfaces
- π Enhanced Monitoring: Race condition prevention and operation correlation
- ποΈ Repository Pattern: Transactional database operations
- π― Event-Driven: Reactive communication between services
We welcome contributions from the community! Here's how you can help:
- π Bug Reports: Found an issue? Open an issue
- π‘ Feature Requests: Have an idea? Start a discussion
- π§ Code Contributions: Submit pull requests with improvements
- π Documentation: Help improve our docs and guides
- π§ͺ Testing: Help test new features and report issues
- Fork the Repository and create a feature branch
- Follow Code Standards (TypeScript, ESLint, Prettier)
- Write Tests for new functionality
- Update Documentation for any user-facing changes
- Submit a Pull Request with a clear description
This project is released under the Unlicense - Public Domain
You are free to use, modify, and distribute this software for any purpose, commercial or non-commercial, without any restrictions. Credit is appreciated but not required.
Last updated: December 2025 β’ Version 19.1.0
Thanks goes to these wonderful people (emoji key):
This project follows the all-contributors specification. Contributions of any kind welcome!
