Addresses #343 - users can now disable Proxmox/PBS server discovery through:
- UI toggle in Settings > System > Network Settings
- Environment variable DISCOVERY_ENABLED=false
- system.json configuration
Discovery runs by default but can be completely disabled for environments where automatic scanning causes issues (e.g., shared hosting networks).
- Simple update commands for each installation type
- LXC containers just run 'update' command
- Standard installs re-run the installer
- Docker users pull and recreate
- Added 'pulse --version' and 'pulse version' commands
- Version info embedded at build time (version, commit, build date)
- Added Privacy section to README - no telemetry/analytics
- Added example alert messages to show webhook capabilities
- Build script now properly embeds version information
- Removed overly aggressive Quick Install section
- Added brief description of what Pulse does
- Kept sponsorship section high for visibility
- Install command now in logical Quick Start section
- Better context and explanation before showing commands
- Auto-detects Proxmox VE hosts and creates LXC containers
- Quick mode with sensible defaults (1GB RAM, 4GB disk)
- Advanced mode for full customization
- Automatic cleanup on failure
- Simple 'update' command in containers
- Improved error handling and network detection
- Professional, clean output without verbose noise
- Docker detection to prevent container-in-container
- Removed all references to community scripts
This is now the primary recommended installation method.
Users now have two options when creating the LXC container:
1. Quick mode - Uses optimized defaults for production (2GB RAM, 16GB disk, etc)
2. Advanced mode - Full control over all settings like the community script
Advanced mode allows customization of:
- Memory, CPU cores, CPU limits, swap
- Static IP vs DHCP
- DNS servers
- Firewall settings
- Privileged vs unprivileged
- Auto-start on boot
- Startup order
This gives users the best of both worlds - quick setup with good defaults
or full control when needed.
- Increased default RAM to 2GB (handles 50+ nodes)
- Increased default disk to 16GB (logs and metrics storage)
- Added CPU limit to prevent resource hogging
- Added 512MB swap for memory flexibility
- Enabled firewall on network interface
- Set startup order to 99 (after critical services)
- Configure UTC timezone for consistent logging
- Optimize sysctl settings for monitoring workload
- Added clear documentation of optimizations applied
The installer now detects when running on a Proxmox VE host and automatically:
- Creates a new LXC container with user-specified settings
- Installs Pulse inside the container
- Prevents unsafe installation directly on PVE hosts
This eliminates dependency on community scripts while ensuring proper isolation.
Changed install options order to recommend the official installer first for
systemd/bare metal installations, with community scripts as an alternative option
The installer was installing Go and Node.js even for binary installations.
Now it only installs curl and wget which are needed to download the release.
- Documented the new /api/setup-script-url endpoint
- Explained the one-time setup code security features
- Updated auto-register endpoint documentation
- Added security features section highlighting the improvements
- Included environment variable option for automation
- Added beautiful gradient card to display setup code
- Shows code in large, easy-to-read monospace font
- Includes clear instructions and expiry reminder
- Can be dismissed with X button
- Much better UX than browser alert popup
addresses #340 - more secure authentication for Quick Token Setup
Major security improvement:
- Replaced URL-embedded tokens with 6-character one-time setup codes
- Setup codes are entered interactively, never transmitted in URLs
- Codes are hashed for storage and expire after 5 minutes
- Each code can only be used once
How it works:
1. User clicks "copy command" in Pulse UI
2. A unique setup code is generated and shown to the user
3. User runs the curl command on their Proxmox server
4. Script prompts for the setup code
5. Code is validated and node is auto-registered
This approach is much more secure as no authentication tokens travel over the network in URLs, and the codes are short-lived and single-use.
addresses #340 - Quick Token Setup improvements
Changed:
- Auto-registration now uses temporary setup tokens instead of API tokens (API tokens are hashed and can't be passed directly)
- Setup script shows token value for manual configuration when auto-registration fails
- Improved error messages to explain why auto-registration might fail
- Auto-register endpoint now accepts either API tokens or temporary setup tokens
This ensures the Quick Token Setup feature works as intended - automatically registering nodes without manual token copying when possible, while providing clear fallback instructions when authentication is required.
Discord and other webhook notifications were failing with template parse
errors due to backslashes incorrectly escaping quotes in Go raw string
literals. Raw strings preserve backslashes literally, causing the Go
template parser to fail.
Fixes#341
- Allow WebSocket connections from private networks when no origins configured
- Fixes "connection lost" errors for Docker users accessing from LAN IPs
- Maintains security by only allowing RFC1918 private IPs and local domains
- Users can still explicitly set ALLOWED_ORIGINS for stricter control
- Addresses issue #214 where Docker users couldn't connect via WebSocket
- API tokens now work even when DISABLE_AUTH is set
- Added API token section back to Security tab in settings
- API tokens can protect API access for automation while keeping UI open
- Invalid tokens are rejected even with auth disabled
- Export/import endpoints still require valid API token
- PBS Servers table now appears right after Proxmox Nodes table
- Better logical flow: infrastructure servers → guest resources → storage
- Makes more sense to have all server-level monitoring grouped together
- Global thresholds section now starts collapsed to reduce visual clutter
- Added dedicated PBS Servers table for monitoring PBS nodes separately
- PBS servers show CPU and Memory thresholds (when metrics are available)
- PBS servers have distinctive indigo color badge for easy identification
- Only shows PBS servers that have metric data (requires Sys.Audit permission)
- PBS nodes don't belong in the 'Proxmox Nodes' table
- They're fundamentally different infrastructure (backup vs hypervisor)
- The mixed presentation was confusing and out of place
- Reverting the previous hasty implementation
- PBS nodes now appear in the Nodes table when configured with proper permissions
- Shows CPU and memory metrics for PBS nodes (disk metrics not available)
- PBS nodes are clearly labeled with 'PBS:' prefix and indigo color badge
- Only shows PBS nodes that have metric data available (requires Sys.Audit permission)
- Disk threshold column is automatically hidden for PBS nodes
- Guests table now groups resources by node with visual separators
- Each node group has a header row showing the node name
- Resources within each node group are sorted by VMID
- Maintains clean visual hierarchy across all three tables
- Created reusable ResourceTable component for rendering resource tables
- Split single large table into 3 distinct tables: Nodes, VMs & Containers, Storage
- Each table only shows relevant metrics (nodes don't show I/O, storage only shows usage)
- Improved organization and visual clarity of threshold configuration
- Reverted to original grouping where guests are under their node names
- Removed "on <node>" text for guests (redundant since they're grouped by node)
- Kept "on <node>" for storage devices (still useful there)
- Order is now: Nodes first, then node groups (delly, minipc), then Storage last
- Changed from node-based grouping to type-based grouping
- Now shows three clear sections: Nodes, Guests, Storage (in that order)
- Guests now show "on <node>" to identify which node they belong to
- Within each section, resources are sorted by node first, then by name/vmid
- Cleaner visual hierarchy that's easier to understand
This makes the table structure more logical - you see all nodes together,
all guests together (but can still see which node they're on), and all
storage together.
- Storage devices now display "on <node>" next to their name
- Makes it clear which node each storage device belongs to
- Helps users identify storage when multiple nodes have similarly named pools
- Added Storage column to threshold table for individual storage thresholds
- Storage devices now appear in their own "Storage" group
- Each storage device can have its own usage threshold override
- Storage shows "-" for CPU/Memory/Disk/IO metrics (not applicable)
- Added orange badge styling for storage device type
- Updated Override interface to support storage type and usage threshold
- Fixed colspan values for new 13-column layout
This allows users to set different thresholds for different storage pools
(e.g. tighter monitoring for system storage vs bulk storage)
- Added migration logic to set I/O thresholds to 0 when loading saved configs
- Only migrates if values match old defaults (150 MB/s disk, 200 MB/s network)
- Ensures existing users get the new "Off by default" behavior
- Prevents saved configs from overriding the new defaults
- Changed default thresholds for diskRead/diskWrite/networkIn/networkOut to 0 (Off)
- UI now shows "Off" instead of "0 MB/s" for disabled I/O metrics
- Reduces alert noise for users who don't need I/O monitoring
- Advanced users can still enable them by setting custom thresholds
- Prevents common false positives like hourly pihole database writes
This makes Pulse focus on the core metrics (CPU, memory, disk space) by default
while keeping I/O monitoring available for those who need it.
- Added 40% opacity to rows where alerts are disabled
- Dimmed text color for disabled resource names
- Provides clear visual feedback that alerts are off for that guest
- Row remains interactive so users can re-enable alerts
- Removed cog/bell-slash icons next to guest names
- Users can see alert configuration in the Alerts settings tab
- Cleaned up unused alert override loading code
- Simplified dashboard display to reduce visual clutter
- Fixed alert units display (MB/s vs %) in notifications and UI
- Added missing threshold controls for disk I/O and network metrics
- Redesigned threshold table with active alert indicators
- Added ability to disable node connectivity alerts
- Improved visual distinction between defaults and overrides
- Added keyboard shortcuts for search (type to search, ESC to clear)
- Better threshold management with automatic cleanup of empty overrides
- Enhanced UI with proper units display for all metrics
addresses #336
- redesigned global defaults section with compact table layout
- fixed bug where editing without changes created unnecessary overrides
- improved visual consistency across the alerts interface
- replaced slider-based UI with clean table layout similar to Guest URLs tab
- shows all resources in a searchable table with inline threshold editing
- added collapsible global defaults section at the top
- enable/disable alerts directly in the table for each guest
- visual indicators for custom overrides
- preserves all existing threshold configurations and overrides
- Guest URLs now stored in backend's guest_metadata.json
- Automatically included in backup/restore operations
- Survives browser data clearing
- Migrates existing localStorage URLs to backend automatically
- Uses existing GuestMetadata infrastructure that was already in place
- Backend API endpoints at /api/guests/metadata
- Matches main dashboard layout with node header rows
- Guests sorted by VMID within each node
- Removed redundant Node column since it's shown in headers
- Better visual organization and consistency
- Reduced padding from py-3 to py-1.5 for data rows
- Reduced header padding from py-3 to py-2
- Input fields now have py-0.5 instead of py-1
- More guests visible without scrolling