Find a file
Pulse Monitor 985a665a31 fix: correct logo path in README and add v4.0.0 release files
- Fixed broken logo path from pulse-icon.svg to logo.svg
- Added docker-build-setup.sh script
- Added release-notes-v4.0.0.md
2025-08-04 21:19:47 +00:00
cmd/pulse fix: add missing config.go file for Docker builds 2025-08-04 21:12:50 +00:00
docs fix: update to serve on port 7655 and fix version handling 2025-08-03 21:16:05 +00:00
frontend-modern feat: add pre-v4 installation detection and migration blocking 2025-08-04 08:09:30 +00:00
internal fix: add UPDATE_CHANNEL environment variable support 2025-08-04 17:46:21 +00:00
pkg Fix all TypeScript 'any' types and ensure strict typing 2025-07-30 14:08:06 +00:00
server feat: add v3 migration shim to prevent confusion after auto-update 2025-08-04 20:02:21 +00:00
testing-tools feat: add v3 migration shim to prevent confusion after auto-update 2025-08-04 20:02:21 +00:00
.dockerignore Add Docker deployment files for production readiness 2025-08-03 16:18:18 +00:00
.gitignore chore: clean up repository for v4.0.0 release 2025-08-04 20:44:05 +00:00
build-release.sh feat: add v3 migration shim to prevent confusion after auto-update 2025-08-04 20:02:21 +00:00
docker-build-setup.sh fix: correct logo path in README and add v4.0.0 release files 2025-08-04 21:19:47 +00:00
docker-compose.yml Fix Docker configuration and test deployment 2025-08-03 20:14:41 +00:00
Dockerfile Optimize Docker image build 2025-08-03 20:29:58 +00:00
go.mod Fix all TypeScript 'any' types and ensure strict typing 2025-07-30 14:08:06 +00:00
go.sum Fix all TypeScript 'any' types and ensure strict typing 2025-07-30 14:08:06 +00:00
install.sh feat: add pre-v4 installation detection and migration blocking 2025-08-04 08:09:30 +00:00
LICENSE fix: consolidate to encrypted-only configuration system 2025-08-03 11:19:32 +00:00
pulse-wrapper.sh feat: implement multi-architecture release strategy 2025-08-04 08:20:01 +00:00
README.md fix: correct logo path in README and add v4.0.0 release files 2025-08-04 21:19:47 +00:00
release-notes-v4.0.0.md fix: correct logo path in README and add v4.0.0 release files 2025-08-04 21:19:47 +00:00
VERSION chore: bump version to v4.0.0 2025-08-04 20:07:50 +00:00

Pulse Logo Pulse for Proxmox

GitHub release Docker Pulls License

Real-time monitoring for Proxmox VE and PBS with alerts, webhooks, and a clean web interface.

Pulse Dashboard

Key Features

  • Real-time Monitoring - Live updates for VMs, containers, nodes, and storage via WebSockets
  • Smart Alerts - Configurable thresholds with email and webhook notifications (Discord, Slack, Gotify, Telegram, ntfy.sh, Teams)
  • Alert History - Persistent storage of alert events with detailed metrics and timeline
  • Unified Backups - Single view for PBS backups, PVE backups, and snapshots
  • PBS Push Mode - Monitor isolated/firewalled PBS servers without inbound connections
  • Modern UI - Responsive design with dark/light themes, virtual scrolling, and expandable charts
  • Performance - Built with Go for minimal resource usage, stops polling when no clients connected
  • Secure by Default - Encrypted configuration storage with flexible credential management

View Screenshots →

Support Development

Pulse is a solo hobby project developed in my free time. If you find it useful, your support helps keep me motivated and covers hosting costs.

GitHub Sponsors ko-fi

Quick Start (2 minutes)

Prerequisites

  • Proxmox VE 7.0+ or PBS 2.0+
  • Network access to Proxmox API (ports 8006/8007)

Install Pulse

Choose one method:

# Option A: Automated LXC Container (Easiest)
bash -c "$(wget -qLO - https://github.com/community-scripts/ProxmoxVE/raw/main/ct/pulse.sh)"

# Option B: Docker (Multi-arch: AMD64, ARM64, ARMv7)
docker run -d -p 7655:7655 -v pulse_data:/data --restart unless-stopped rcourtman/pulse:latest

# Option C: Manual Install (For existing LXC/VMs)
curl -fsSL https://raw.githubusercontent.com/rcourtman/Pulse/main/install.sh | sudo bash

Configure Pulse

  1. Open Pulse in your browser: http://<your-server>:7655
  2. Go to SettingsNodesAdd Node
  3. Enter your Proxmox credentials
  4. Click Save - Pulse will start monitoring immediately

Configuration

Pulse uses a modern, secure configuration system similar to popular apps like Radarr and Sonarr:

Everything Through the UI

  • All configuration is done via the web interface - no manual file editing needed
  • SettingsNodes: Add/remove Proxmox instances with a simple form
  • SettingsGeneral: Configure ports, intervals, themes, and more
  • Alerts: Set up thresholds and notification channels
  • Configuration is encrypted and stored securely with proper permissions

Zero Configuration Files

Unlike traditional monitoring tools:

  • No YAML/JSON files to edit
  • No environment variables to set
  • No complex configurations
  • Works immediately after installation

Just open the web UI, add your Proxmox nodes through the interface, and you're done!

For Docker Users

Pulse provides multi-architecture Docker images supporting:

  • linux/amd64 - Intel/AMD 64-bit servers
  • linux/arm64 - 64-bit ARM (Raspberry Pi 4/5, Apple Silicon)
  • linux/arm/v7 - 32-bit ARM (Raspberry Pi 2/3)

The only environment variables needed are for the initial ports if you want to change defaults:

docker run -d -p 8080:8080 \
  -e PULSE_SERVER_FRONTEND_PORT=8080 \
  -v pulse_data:/data \
  --restart unless-stopped \
  rcourtman/pulse:latest

Available Docker tags:

  • rcourtman/pulse:latest - Latest stable release
  • rcourtman/pulse:4 - Latest v4.x release
  • rcourtman/pulse:4.0.0 - Specific version

Once running, all configuration is done through the web UI.

Security

Pulse automatically encrypts and secures all configuration:

  • Credentials are encrypted using AES-256-GCM
  • Configuration files have restricted permissions (0600)
  • No plaintext passwords in config files
  • Encryption keys derived from machine ID

See Security Guide for additional security options.

Webhooks

Pulse supports multiple webhook providers for alerts:

  • Discord - Native Discord webhooks with rich embeds
  • Slack - Slack incoming webhooks
  • Gotify - Self-hosted push notifications
  • Telegram - Telegram bot notifications
  • ntfy.sh - Simple pub-sub notifications
  • Teams - Microsoft Teams incoming webhooks
  • Generic - Any webhook endpoint (JSON POST)

Configure webhooks in AlertsDestinationsWebhooks.

PBS Agent (Push Mode)

For isolated PBS servers that can't be reached directly:

# On the PBS server:
cd /opt
wget https://github.com/rcourtman/Pulse/releases/latest/download/pulse-pbs-agent.tar.gz
tar xzf pulse-pbs-agent.tar.gz
cd pulse-pbs-agent
./install.sh

Configure the agent to push data to your Pulse instance. See PBS Agent Guide.

Docker Compose

version: '3.8'

services:
  pulse:
    image: rcourtman/pulse:latest  # Multi-arch: AMD64, ARM64, ARMv7
    container_name: pulse
    ports:
      - "7655:7655"
    volumes:
      - pulse_data:/data
    restart: unless-stopped

volumes:
  pulse_data:

After starting, configure everything through the web UI at http://localhost:7655.

Building from Source

# Clone repository
git clone https://github.com/rcourtman/Pulse.git
cd Pulse

# Build backend
go build -o pulse ./cmd/pulse

# Build frontend
cd frontend-modern
npm install
npm run build

# Run
./pulse

API Documentation

Pulse provides a REST API for integration:

Core Endpoints

  • GET /api/state - Current state of all resources
  • GET /api/health - Health check endpoint
  • GET /api/version - Version information
  • GET /api/diagnostics - System diagnostics

Monitoring

  • GET /api/charts - Historical metrics data
  • GET /api/storage/:id - Storage detail information
  • GET /api/storage-charts - Storage charts data

Configuration

  • GET /api/config/nodes - Get node configurations
  • POST /api/config/nodes - Add new node
  • PUT /api/config/nodes/:id - Update node
  • DELETE /api/config/nodes/:id - Delete node
  • POST /api/config/nodes/test-connection - Test node connection
  • GET /api/config/system - System settings
  • PUT /api/config/system - Update system settings

Alerts & Notifications

  • GET /api/alerts - Alert configuration and history
  • POST /api/alerts/:action - Alert actions (acknowledge, etc.)
  • GET /api/notifications - Notification settings
  • PUT /api/notifications - Update notifications

Backups

  • GET /api/backups - All backup information
  • GET /api/backups/pve - PVE backups only
  • GET /api/backups/pbs - PBS backups only
  • GET /api/snapshots - VM/CT snapshots

Updates

  • GET /api/updates/check - Check for updates
  • POST /api/updates/apply - Apply update
  • GET /api/updates/status - Update status

Settings

  • GET /api/settings - Get all settings
  • POST /api/settings/update - Update settings

WebSocket endpoint: ws://your-server:7655/ws for real-time updates.

Troubleshooting

Common Issues

  1. "Connection refused" error

    • Check firewall rules for port 7655
    • Verify Pulse is running: systemctl status pulse-backend
  2. "Invalid credentials" error

    • Ensure user has at least PVEAuditor role
    • For PBS, user needs DatastoreReader permissions
    • Try token authentication instead of password
  3. No data showing

    • Check browser console for errors
    • Verify Proxmox API is accessible from Pulse server
    • Check Pulse logs: journalctl -u pulse -f

Getting Help

License

This project is licensed under the MIT License - see LICENSE file for details.

Acknowledgments

  • Built with Go and SolidJS
  • Icons by Lucide
  • Inspired by the Proxmox community's monitoring needs

Made with ❤️ for the Proxmox community