- Handle standalone nodes properly in diagnostics (fixes#362)
- Try /nodes endpoint first which works for both clustered and standalone
- Make cluster status optional, not required for connection success
- Set cluster node count to 1 for standalone nodes
- Fix test connection UI showing success styling on errors (fixes#363)
- Return proper HTTP error status when test-config endpoint fails
- Clean up error messages to remove "API request failed: XXX" prefix
- Add debug logging to trace test result states
- Ensure consistent error status codes from all test endpoints
Both issues reported connection problems - standalone nodes failing to connect
and error messages appearing with success styling. These fixes ensure proper
handling of both scenarios.
- Fixed /api/config/system endpoint to return all persisted settings fields including allowEmbedding, discoveryEnabled, and allowedEmbedOrigins
- Added comprehensive input validation for all settings with proper min/max bounds
- Fixed security headers to properly allow/deny iframe embedding based on user preference
- Added real bug detection test suite that validates behavior, not just status codes
The iframe embedding checkbox now properly persists its state and actually controls whether Pulse can be embedded in iframes. When enabled, removes X-Frame-Options header and sets CSP frame-ancestors to allow embedding.
The script was checking if CONFIG_DIR existed to detect fresh installs, but we create that directory early in the process. Now checking for system.json file instead which only exists after a real installation.
LXC containers are full Linux systems with systemd and can handle auto-updates perfectly fine. Only Docker containers should skip auto-update prompts since they're immutable and can't restart themselves.
- Separated IN_DOCKER flag from IN_CONTAINER
- LXC containers now get auto-update prompts like bare metal installs
- Docker containers still skip auto-updates as intended
addresses #360
- Add detailed lockout feedback in login API responses showing remaining attempts
- Display lockout warnings in the frontend with attempt counters
- Show time remaining when account is locked (15 minute lockout duration)
- Add visual indicators (lock icon) for lockout status
- Implement /api/security/reset-lockout endpoint for admin recovery
- Store lockout information with expiration tracking
- Provide clear user guidance about lockout duration and recovery
Changed PMG host backup badges from purple to orange since PBS
already uses purple. This avoids color confusion between PBS
instances and PMG host configuration backups.
Color scheme:
- VM: Blue
- LXC: Green
- Host/PMG: Orange
- PBS: Purple (unchanged)
Changed the non-verified backup icon from a confusing circle-check
to an info/exclamation circle icon which better indicates an
informational/pending state rather than a verified state.
Replaced the clock emoji (⏱) for non-verified backups with a proper
SVG circle-check icon. Also replaced the checkmark emoji with an SVG
checkmark. The new icons are more professional and scale better.
Non-verified backups now show a subtle gray circle-check icon instead
of the clock emoji.
Fixed TypeError when processing WebSocket messages by adding proper
null checks before calling forEach on activeAlerts and recentlyResolved
arrays. The arrays are now checked to ensure they exist and are arrays
before iteration.
Moved hasHostBackups computation after normalizedData to fix the
"Cannot access before initialization" error. The hasHostBackups memo
now properly depends on normalizedData being defined first.
When PMG host backups are detected in the backup list, a new type filter
automatically appears with options to filter by VM, LXC, or PMG (host) type.
This makes it easier to find specific backup types when host backups exist.
The filter is dynamic and only shows when there are host-type backups present.
Mock mode now properly returns simulated data including PMG host backups.
The monitor's GetState() method now checks for mock mode and returns
mock data when enabled, allowing full testing of UI features without
real Proxmox nodes.
Addresses #359 - PMG host config backups with VMID=0 are now correctly
identified as "Host" type instead of being misidentified as LXC containers.
Added purple color scheme for Host type backups in the UI.
Development builds (containing -dirty or git commit hashes) will no
longer check for updates automatically to avoid confusion during
development. Manual checks can still be forced for testing.
- Changed from bright blue gradient to subtle light blue background
- Reduced padding for less intrusive appearance
- Improved professional wording:
- "New version available" instead of "Update available"
- Direct "View details" link to release notes
- Removed redundant update instructions (already in release notes)
- Added deployment-specific hints only where needed (ProxmoxVE/Docker)
- Better color contrast with blue text on light background
The notifications are now informative without being distracting,
maintaining a professional appearance while ensuring users don't
miss important updates.
Implemented a comprehensive update notification system that alerts users
when new versions are available:
- Automatic update checking on app startup
- Visual indicators: dismissible banner at top and badge on Settings tab
- Smart dismissal with localStorage persistence
- Deployment-specific update instructions (Docker, ProxmoxVE, systemd)
- 24-hour cache to avoid excessive API calls
- Manual check option in Settings
The system respects user preferences and won't re-show dismissed versions
unless explicitly requested. Works seamlessly with both stable and RC
update channels.
Users upgrading from versions before auto-updates will now be prompted
to enable the new automatic update feature. The prompt defaults to 'Yes'
for convenience but allows users to opt-out if they prefer manual updates.
The prompt only appears when:
- Upgrading or reinstalling an existing installation
- The auto-update timer doesn't already exist
- Not running with --enable-auto-updates flag
- Not running in a container environment
- Document auto-update feature in README
- Add detailed setup instructions in INSTALL.md
- Include auto-update configuration in CONFIGURATION.md
- Explain systemd timer behavior and controls
- Note that Docker doesn't support auto-updates
- Add systemd timer for daily update checks (2-6 AM window)
- Create pulse-auto-update.sh script with safe rollback on failure
- Add --enable-auto-updates flag to install script
- Prompt users during fresh install to enable auto-updates
- Respect autoUpdateEnabled flag in system.json
- Only install stable releases, never RCs
- Full logging to systemd journal
- Tested and verified working in container
The schedule settings (quiet hours, grouping, escalation) were not persisting
because the component state was lost when switching tabs. Lifted the state to
the parent component so it persists across tab switches and saves correctly.
When multiple clusters were added, shared storage from different clusters
would use the same ID (e.g., 'shared-local'), causing storage from one
cluster to overwrite storage from another. Now using instance-specific IDs
for shared storage to ensure each cluster's storage is properly tracked.
PBS often runs in Docker containers, so the container check was preventing
legitimate setups. Also fixed the script to check for proxmox-backup-manager
instead of pveum (which is PVE-only).
- Updated test-security.sh to detect and handle DISABLE_AUTH mode
- Fixed test-release.sh to properly check for compiled binary
- Updated test-proxy-scenarios.sh arithmetic operations for bash compatibility
- All tests now properly detect authentication state and adapt accordingly
- Added required field validation for name, type, and host in node configuration
- Added duplicate node prevention by name (returns 409 Conflict)
- Added IP address format validation to reject invalid IPs
- Added port range validation (1-65535)
- Added validation for negative polling intervals in system settings
- Added HEAD request support for health and version endpoints
- Reduced node addition timeout from 10s to 3s to prevent UI hanging
These validation improvements were discovered through comprehensive testing
and prevent invalid data from being accepted by the API.
- Changed deduplication display from ratio (14.4:1) to multiplier (14.4x)
- Added encryption indicators for PBS backups (lock icon)
- Added owner column showing who created each PBS backup
- Fixed owner display to use separate column instead of cramped next to node name
- Added owner field to PBSBackup model and populated from PBS API
These improvements make it easier to understand backup status at a glance
The setup script no longer mentions VM disk monitoring at all, as requested.
This avoids confusion about what works or doesn't work on different
Proxmox versions. The permissions are still set up correctly behind
the scenes, but users don't need to see confusing information about it.
The setup script was incorrectly claiming that VM disk monitoring works
on Proxmox 9 with API tokens. This is not true due to an upstream
Proxmox limitation where API tokens cannot access guest agent data
even with the correct permissions.
Updated the setup script to clearly explain:
- This is a known Proxmox 9 limitation, not a Pulse issue
- API tokens are blocked from accessing get-fsinfo
- Available workarounds (use root@pam or wait for upstream fix)
- Link to issue #348 for full context
This should prevent further confusion for users running Proxmox 9.
- Reduced text sizes across all tables for better information density
- Guest names now use text-sm for better readability
- Node names in summary tables use smaller text-[11px]
- All table text sizes are now consistent
- Unified table header styling with compromise design
- Subtle bg-gray-50 dark:bg-gray-700/50 background
- Consistent px-2 py-1.5 padding for comfortable spacing
- text-[11px] sm:text-xs responsive sizing
- Softer border-gray-200 dark:border-gray-600 borders
- Updated Storage tab progress bars to match Dashboard style
- Increased height from h-2.5 to h-3.5
- Simplified color thresholds (green/yellow/red)
- Consistent text formatting with Dashboard
Applied consistently across Dashboard, Storage, Backups tabs and all node tables for a cohesive look
- Add PBS alert monitoring (CPU, memory, offline detection)
- Add storage offline detection with proper cluster awareness
- Remove bulk toggle feature from thresholds UI (unnecessary complexity)
- Add enable/disable buttons for PBS servers in thresholds tab
- Fix storage offline detection to avoid false positives in clusters
(only alert on truly offline storage, not inactive cluster storage)
Alert improvements:
- PBS instances now properly monitored like nodes
- Storage devices generate offline alerts with confirmation system
- All resource types support custom thresholds and disable toggles
- Consistent alert ID format across all resource types
- Proper hysteresis and confirmation counts to prevent flapping
addresses #123 (if there was an issue about missing PBS alerts)
- ScrollableTable component (used by Guest table)
- Storage table
- Backups table (both main and PBS sections)
- ResourceTable (Alerts)
- GuestURLs table (Settings)
- All tables still scroll but without visible scrollbars
- Works across all browsers (Chrome, Firefox, Safari, Edge)
- Add scrollbar-width: none for Firefox
- Add -ms-overflow-style: none for IE/Edge
- Add ::-webkit-scrollbar { display: none } for Chrome/Safari
- Tables still scroll horizontally but without visible scrollbars
- Remove table-layout: fixed which was causing issues
- Use min-width on columns instead of width
- Tables use w-full class to take available space
- Should eliminate dead space on the right
- Tables now use 100% width with table-layout: fixed
- Last column (Uptime) no longer has fixed width, takes remaining space
- Eliminates dead space while maintaining fixed column sizes
- Tables still have min-width to prevent collapse
- Calculate PVE table width dynamically based on column count
- Reduce PBS table width from 1100px to 1000px to match columns
- Eliminates unnecessary whitespace on the right side
- Fixed the correct components (PVENodeTable and PBSNodeTable)
- Use inline styles for table-layout: fixed and width: 1100px
- Set explicit column widths with inline styles
- Add white-space: nowrap to prevent text wrapping
- Tables now properly scroll horizontally on narrow screens
- Use inline style attributes instead of Tailwind classes
- Set table-layout: fixed and width: 1000px directly
- Force white-space: nowrap with inline styles
- Set explicit column widths with style attributes
- Ensures table doesn't collapse on narrow screens
- Use table-fixed layout with explicit 1000px width
- Set explicit column widths for all columns
- Add whitespace-nowrap to flex containers to prevent wrapping
- Ensure progress bars maintain 200px width on all screen sizes
- Table now scrolls horizontally on narrow viewports instead of collapsing
- Set table minimum width to 1000px for proper layout
- Use fixed w-[200px] instead of min-w for MetricBar columns
- Changed MetricBar text from truncate to whitespace-nowrap
- Added min-width to node name column
- Ensures consistent column widths and no text wrapping
- Added min-width to table (900px) to ensure proper horizontal scrolling
- Added whitespace-nowrap to all headers and badges to prevent wrapping
- Changed MetricBar columns from w-[180px] to min-w-[180px] for fixed minimum width
- Ensures progress bars stay readable and don't shrink on narrow screens
- Smooth horizontal scrolling on mobile/narrow viewports
- Updated all tables to match Node Summary Table's cleaner aesthetic
- Consistent rounded corners, shadows, and border styling
- Cleaner header rows with gray-500 text and no background colors
- Added row dividers using divide-y for better visual separation
- Made node group headers more subtle with 50% opacity backgrounds
- Kept row heights compact with py-0.5 padding
- Improved overall visual consistency across the UI