- Users now see both stable and RC versions when updating
- Menu dynamically adjusts based on available versions
- Users can choose which version to install regardless of their update channel setting
- Addresses confusion about automatic RC updates
Storage devices with alerts disabled in the Thresholds tab were still
triggering alerts. Added proper checking of the disabled override flag
in CheckStorage() to match the behavior of guest alerts.
- Use rawOverridesConfig() for saving instead of rebuilding overrides
- Fix hasOverride flag to consider disabled state for storage/guests
- Toggle now reads current state from resource object
- Properly show "Custom" badge when alerts are disabled
- Add type="button" to all buttons to prevent form submission behavior
- Fix storage device alert disabling in threshold management
- Storage devices now properly handled in override configuration
- Add GetVMFSInfo method to fetch filesystem data from guest agent
- Integrate guest agent disk stats for VMs in both polling modes
- Aggregate real disk usage from all filesystems (skip special mounts)
- Fall back gracefully to allocated size when agent unavailable
- Add VM.Monitor permission to auto-negotiation script via PulseMonitor role
- Update frontend NodeModal with new permission instructions
VMs with QEMU guest agent now show actual disk usage like LXCs do.
Addresses #344
Previous fix wasn't working properly - the menu showed but couldn't read input.
Now properly detects if we can write to /dev/tty to determine if interaction
is possible, even when stdin is piped from curl.
The script was detecting piped input and automatically going into non-interactive mode,
preventing users from choosing between Quick and Advanced installation modes.
Now checks if /dev/tty is available even when stdin is piped, allowing interaction
through the terminal for curl-based installations while still supporting truly
non-interactive environments (like automation scripts without any TTY).
- Add safe_read function to handle both TTY and non-TTY input
- Fix --in-container mode to skip prompts when no TTY available
- Allows installation via piped curl command on Proxmox hosts
Addresses #342 - Gotify webhooks now include the required 'message' field
that was missing when using generic webhook payloads. The template also
includes proper priority mapping and markdown support.
- Install script now prompts for custom port (default: 7655)
- Can skip prompt with FRONTEND_PORT environment variable
- Fixed incorrect port configuration instructions in UI
- Updated documentation to reflect new installation options
- Fixed FAQ.md references to pulse-backend (should be pulse)
addresses #110
- Added comprehensive PORT_CONFIGURATION.md guide
- Updated CONFIGURATION.md to clarify .env is for auth only
- Install script no longer loads .env for environment variables
- Documented proper port configuration methods (systemd, system.json)
- Added port config guide to README documentation section
addresses #110 - helps users understand where to configure ports
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