Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124

Checkmate is a comprehensive monitoring platform designed to track and monitor server hardware, uptime, response times, and incidents in real-time. Built with beautiful visualizations and a user-friendly interface, it provides everything you need to keep your infrastructure running smoothly.
Unlike proprietary monitoring solutions that charge per monitor or lock you into monthly subscriptions, Checkmate gives you complete control. You can deploy it on your own servers, customize it to your needs, and monitor unlimited endpoints without worrying about escalating costs.
As a self-hosted solution, Checkmate ensures your monitoring data stays within your infrastructure. You’re not sending sensitive information about your servers, response times, or incidents to third-party services. This is particularly important for organizations with strict data sovereignty or compliance requirements.
The project has been stress-tested with over 1,000 active monitors without performance issues. The memory footprint is impressively small—a Node.js instance monitoring 323 servers every minute consumes minimal resources, making it suitable even for resource-constrained environments like Raspberry Pi devices.
Checkmate offers an extensive array of monitoring capabilities:
Built with React and Material-UI (MUI), Checkmate delivers a modern, responsive interface that makes complex monitoring data easy to understand. Real-time visualizations powered by Recharts help you spot trends and issues at a glance.
Stay informed through multiple notification channels:
Create public or private status pages to keep stakeholders informed about your infrastructure’s health. This transparency builds trust with customers and streamlines communication during incidents.
Checkmate supports multiple languages including English, German, Japanese, Portuguese (Brazil), Russian, Turkish, Ukrainian, Vietnamese, and Chinese (Traditional, Taiwan), making it accessible to global teams.
Checkmate leverages modern, battle-tested technologies:
The architecture is designed for performance and reliability. The team has successfully demonstrated monitoring 1,000+ active monitors without bottlenecks, and the memory usage remains remarkably efficient even under heavy load.
For advanced infrastructure monitoring, Checkmate works seamlessly with Capture, a lightweight agent that collects detailed metrics from your servers:
Capture is cross-platform, running on Linux, Windows, macOS, Raspberry Pi, and any device that supports Go. While Checkmate works perfectly fine for website and service monitoring without Capture, the agent unlocks the full potential of infrastructure monitoring.
Ready to take control of your monitoring? Here’s everything you need to know to get Checkmate up and running.
Before installing Checkmate, ensure you have the following:
Checkmate offers several installation options to suit different deployment scenarios.
Docker Compose is the easiest and most reliable way to get Checkmate running. This method handles all dependencies automatically.
bash
# Clone the Checkmate repository
git clone https://github.com/bluewave-labs/Checkmate.git
# Navigate to the project directory
cd Checkmate
Create a .env file in the root directory:
bash
# Copy the example environment file
cp .env.example .env
# Edit the .env file with your preferred text editor
nano .env
Essential environment variables to configure:
env
# Application Settings
NODE_ENV=production
PORT=5000
# MongoDB Configuration
DB_TYPE=MongoDB
DB_CONNECTION_STRING=mongodb://mongodb:27017/checkmate
# Redis Configuration
REDIS_HOST=redis
REDIS_PORT=6379
# JWT Secret (generate a secure random string)
JWT_SECRET=your-super-secure-random-string-here
# Client URL (your domain or IP)
CLIENT_HOST=http://your-domain.com:5000
# Admin Account (first-time setup)
ADMIN_EMAIL=admin@yourdomain.com
ADMIN_PASSWORD=your-secure-password
# Email Configuration (for notifications)
SMTP_HOST=smtp.gmail.com
SMTP_PORT=587
SMTP_USER=your-email@gmail.com
SMTP_PASSWORD=your-app-password
# System Email (sender address)
SYSTEM_EMAIL_HOST=smtp.gmail.com
SYSTEM_EMAIL_PORT=587
SYSTEM_EMAIL_ADDRESS=noreply@yourdomain.com
SYSTEM_EMAIL_PASSWORD=your-app-password
bash
# Start all services with Docker Compose
docker-compose up -d
# Verify all containers are running
docker-compose ps
Expected output:
NAME COMMAND SERVICE STATUS
checkmate-client "docker-entrypoint.s…" client Up
checkmate-server "docker-entrypoint.s…" server Up
checkmate-mongodb "docker-entrypoint.s…" mongodb Up
checkmate-redis "docker-entrypoint.s…" redis Up
Open your web browser and navigate to:
http://localhost:5000
Or if you configured a domain:
http://your-domain.com:5000
Log in with the admin credentials you set in the .env file.

For production environments requiring high availability, Checkmate supports Kubernetes deployment.
bash
# Install Helm if not already installed
curl https://raw.githubusercontent.com/helm/helm/main/scripts/get-helm-3 | bash
Download the Helm chart values file:
bash
# Navigate to the Helm chart directory
cd charts/helm/checkmate
# Copy and edit the values file
cp values.yaml custom-values.yaml
nano custom-values.yaml
Key configurations in custom-values.yaml:
yaml
# Application image
image:
repository: bluewavelab/checkmate
tag: latest
pullPolicy: IfNotPresent
# Resource allocation
resources:
limits:
cpu: 2000m
memory: 2Gi
requests:
cpu: 500m
memory: 512Mi
# Ingress configuration
ingress:
enabled: true
className: nginx
hosts:
- host: checkmate.yourdomain.com
paths:
- path: /
pathType: Prefix
tls:
- secretName: checkmate-tls
hosts:
- checkmate.yourdomain.com
# MongoDB configuration
mongodb:
enabled: true
auth:
enabled: true
rootPassword: "your-mongodb-root-password"
database: checkmate
# Redis configuration
redis:
enabled: true
auth:
enabled: true
password: "your-redis-password"
bash
# Create namespace
kubectl create namespace checkmate
# Install Checkmate
helm install checkmate . \
--namespace checkmate \
--values custom-values.yaml
# Verify deployment
kubectl get pods -n checkmate
Once all pods are running, access Checkmate through your configured domain:
https://checkmate.yourdomain.com

For advanced users who want full control over each component.
bash
# Update system packages
sudo apt update && sudo apt upgrade -y
# Install Node.js (v18 or higher)
curl -fsSL https://deb.nodesource.com/setup_18.x | sudo -E bash -
sudo apt install -y nodejs
# Install MongoDB
wget -qO - https://www.mongodb.org/static/pgp/server-6.0.asc | sudo apt-key add -
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu focal/mongodb-org/6.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-6.0.list
sudo apt update
sudo apt install -y mongodb-org
# Start MongoDB
sudo systemctl start mongod
sudo systemctl enable mongod
# Install Redis
sudo apt install -y redis-server
# Start Redis
sudo systemctl start redis-server
sudo systemctl enable redis-server
bash
# Clone repository
git clone https://github.com/bluewave-labs/Checkmate.git
cd Checkmate
# Install server dependencies
cd server
npm install
npm run build
# Install client dependencies
cd ../client
npm install
npm run build
Create server configuration file:
bash
cd server
nano .env
Add configuration:
env
NODE_ENV=production
PORT=5000
DB_CONNECTION_STRING=mongodb://localhost:27017/checkmate
REDIS_HOST=localhost
REDIS_PORT=6379
JWT_SECRET=your-jwt-secret
CLIENT_HOST=http://localhost:3000
bash
# Start the server
cd server
npm run start
# In a new terminal, start the client
cd client
npm run start
After logging in:
Set up alerts to stay informed:
Email Notifications:
- SMTP Host: smtp.gmail.com
- SMTP Port: 587
- Username: your-email@gmail.com
- Password: your-app-password
- From Address: noreply@yourdomain.com
Slack Integration:
- Webhook URL: https://hooks.slack.com/services/YOUR/WEBHOOK/URL
- Channel: #monitoring
Discord Integration:
- Webhook URL: https://discord.com/api/webhooks/YOUR/WEBHOOK/URL
Create public status pages for transparency:
Schedule maintenance to prevent false alerts:

For advanced infrastructure monitoring, install Capture on your servers:
bash
# Download Capture
wget https://github.com/bluewave-labs/capture/releases/latest/download/capture-linux-amd64
# Make executable
chmod +x capture-linux-amd64
# Move to system path
sudo mv capture-linux-amd64 /usr/local/bin/capture
# Create configuration file
sudo mkdir -p /etc/capture
sudo nano /etc/capture/config.yaml
Add configuration:
yaml
server_url: http://your-checkmate-server:5000
api_key: your-api-key-from-checkmate
hostname: server-01
collection_interval: 60s
metrics:
- cpu
- memory
- disk
- network
- temperature
Create systemd service:
bash
sudo nano /etc/systemd/system/capture.service
ini
[Unit]
Description=Capture Monitoring Agent
After=network.target
[Service]
Type=simple
User=root
ExecStart=/usr/local/bin/capture -config /etc/capture/config.yaml
Restart=always
RestartSec=10
[Install]
WantedBy=multi-user.target
Start the service:
bash
sudo systemctl daemon-reload
sudo systemctl start capture
sudo systemctl enable capture
sudo systemctl status capture

capture-windows-amd64.exe from releasesconfig.yaml in the same directorycapture-windows-amd64.exe -config config.yaml
To run as a Windows service, use NSSM:
nssm install Capture "C:\path\to\capture-windows-amd64.exe" "-config C:\path\to\config.yaml"
nssm start Capture
Configure reverse proxy with SSL:
Nginx Configuration:
nginx
server {
listen 443 ssl http2;
server_name checkmate.yourdomain.com;
ssl_certificate /etc/letsencrypt/live/checkmate.yourdomain.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/checkmate.yourdomain.com/privkey.pem;
location / {
proxy_pass http://localhost:5000;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
bash
# Connect to MongoDB
mongosh
# Create admin user
use admin
db.createUser({
user: "admin",
pwd: "strong-password-here",
roles: [ { role: "root", db: "admin" } ]
})
# Create Checkmate user
use checkmate
db.createUser({
user: "checkmate",
pwd: "another-strong-password",
roles: [ { role: "readWrite", db: "checkmate" } ]
})
# Enable authentication
# Edit /etc/mongod.conf
security:
authorization: enabled
Update connection string in .env:
DB_CONNECTION_STRING=mongodb://checkmate:password@localhost:27017/checkmate?authSource=checkmate
bash
# Allow only necessary ports
sudo ufw allow 22/tcp # SSH
sudo ufw allow 80/tcp # HTTP
sudo ufw allow 443/tcp # HTTPS
sudo ufw enable
bash
# Create backup script
nano /usr/local/bin/checkmate-backup.sh
bash
#!/bin/bash
BACKUP_DIR="/backups/checkmate"
DATE=$(date +%Y%m%d_%H%M%S)
# Backup MongoDB
mongodump --out=$BACKUP_DIR/mongodb_$DATE --gzip
# Backup configuration
cp -r /path/to/checkmate/.env $BACKUP_DIR/config_$DATE/
# Compress and keep only last 30 days
find $BACKUP_DIR -type f -mtime +30 -delete
echo "Backup completed: $DATE"
bash
# Make executable
chmod +x /usr/local/bin/checkmate-backup.sh
# Add to crontab (daily at 2 AM)
crontab -e
0 2 * * * /usr/local/bin/checkmate-backup.sh
Solution:
bash
# Check if containers are running
docker-compose ps
# Check logs
docker-compose logs -f server
docker-compose logs -f client
# Restart services
docker-compose restart
Solution:
bash
# Check server logs for errors
docker-compose logs server | grep ERROR
# Verify MongoDB connection
docker-compose exec mongodb mongosh --eval "db.adminCommand('ping')"
# Verify Redis connection
docker-compose exec redis redis-cli ping
Solution:
.envbash
docker-compose exec server node -e "
const nodemailer = require('nodemailer');
const transport = nodemailer.createTransport({
host: process.env.SMTP_HOST,
port: process.env.SMTP_PORT,
auth: {
user: process.env.SMTP_USER,
pass: process.env.SMTP_PASSWORD
}
});
transport.verify().then(console.log).catch(console.error);
"
Solution:
javascript
// Create indexes in MongoDB
db.checks.createIndex({ monitorId: 1, createdAt: -1 })
db.monitors.createIndex({ userId: 1, isActive: 1 })
bash
# Backup data first
./checkmate-backup.sh
# Pull latest images
docker-compose pull
# Restart with new images
docker-compose up -d
# Verify upgrade
docker-compose logs -f
bash
# Backup current installation
cp -r Checkmate Checkmate.backup
# Pull latest changes
cd Checkmate
git pull origin main
# Update dependencies
cd server && npm install
cd ../client && npm install
# Rebuild
npm run build
# Restart services
pm2 restart checkmate-server
pm2 restart checkmate-client
javascript
// Delete checks older than 90 days
db.checks.deleteMany({
createdAt: { $lt: new Date(Date.now() - 90 * 24 * 60 * 60 * 1000) }
})
bash
docker-compose exec mongodb mongosh checkmate --eval "db.runCommand({ compact: 'checks' })"
Checkmate represents a new paradigm in infrastructure monitoring—one where you’re not locked into expensive subscriptions or forced to compromise on features. With its rich feature set, beautiful interface, and active open-source community, Checkmate delivers enterprise-grade monitoring capabilities that you can deploy, customize, and scale according to your needs.
Whether you’re a startup looking to monitor a handful of services, a growing business managing dozens of servers, or an enterprise requiring comprehensive infrastructure visibility, Checkmate scales with you. The self-hosted nature ensures your monitoring data remains private, while the open-source model means you can customize every aspect to fit your workflow.
Click here to read more about Checkmate