Changelog¶
All notable changes to KVitals will be documented in this file.
[2.13.0] - 2026-07-23¶
Added¶
- Sparkline Charts: The expanded popup view now includes 60-sample real-time history charts for CPU, RAM, Temperature, GPU, Network, Battery, Disk, and Fan metrics. Percentage and temperature charts use a fixed 0-100 scale to show headroom toward system limits.
- Fan Monitoring Improvements: Added per-fan custom labels, stable fan numbering (
Fan 1,Fan 2), per-fan RPM sparkline charts in the popup view, and grouped fan rendering in the panel. Added a~prefix for percentage values calculated from estimated max RPM. - Per-Metric Visibility Controls: Added visibility options (
All,Compact,Popup,None) for each metric, replacing simple enable toggles. - Icon Color Customization: Added an
Icon Colorpicker in the Colors settings page. Unset icon colors fall back to the label color setting. - Custom Metrics Labels: Added custom label options for RAM (
ramLabel), Disk (diskLabel), Network (netLabel), and individual disk drives (diskLabels), along with a toggle to keep default short names in the compact panel. - Popup Pin Toggle: Added a pin button to the popup title bar so the panel stays open when clicking other windows.
- Bundled Icon Fallbacks: Added fallback logic for bundled Win11-dark SVG icons (
am-cpu-symbolic,nvidia-ram-symbolic,gpu-symbolic,am-disk-utility-symbolic,am-fan-symbolic), maintaining default icons regardless of the system icon theme.
Changed¶
- Font Search Interface: Replaced the editable font drop-down menu in General settings with a text field and popup search list, resolving auto-complete freezes when selecting fonts.
- Per-Disk Read and Write Rates: The expanded popup view now displays individual read and write rates for each disk on multi-drive systems.
- Compact Panel Width Stability: Padded percentage values and network rate strings to fixed lengths, preventing the panel from shifting as values change size.
- Solid Hotplug Storage Detection: Replaced file-based
/proc/diskstatschecks with Solid dataengine event signals (sourceAdded/sourceRemoved) for USB drive connections and removals.
Fixed¶
- Decoupled Temperature Metrics: Separated CPU temperature and System (chipset) temperature chart histories, threshold sliders, and color rules (
systemColorvscpuTempColor). - Chipset Sensor Detection: Hardened lm-sensors discovery logic to exclude PCI bus sensors (like
k10tempandamdgpu) and Intelcoretempfrom being picked as the system motherboard temperature. - RAM Temperature Thresholds: Added separate warning and critical threshold sliders for RAM temperature (
ramTempWarningThreshold,ramTempCriticalThreshold). - Boot Crash Prevention: Removed programmatic configuration writes during widget startup to prevent
plasmashellcrashes on boot.
[2.12.0] - 2026-07-18¶
Added¶
- Customizable Label Color (
Colorssettings): Added an option to set a distinct color for the metric labels (e.g.CPU:,RAM:), separate from the base font color. Disabling custom colors falls back to the Plasma theme text color. - Customizable Icon Color (
Colorssettings): Added an option to set a distinct color for the icons. If unset, it falls back to the label color. - Customizable CPU Label (
Metricssettings): You can now rename the "CPU" label to a custom string. - Improved GPU Labeling: On single-GPU systems, the default label is now derived from the system (or customized via the UI) rather than hardcoded to "GPU".
- Expanded Full View Icons: The full popup view now features icons for each metric, following the custom icon color settings.
- Bundled Default Icons: Switched the default icon set to bundled high-quality SVGs from the Win11-dark theme for a cleaner look out-of-the-box (CPU, RAM, GPU, Disk, and Fan). Network, Uptime, Battery, Power, and Temp continue to use standard Freedesktop icons.
Huge thanks to @francescopazzocco for contributing all the features in this release! (#58, #59)
[2.11.0] - 2026-07-13¶
Added¶
- System Uptime (
Metricssettings): New metric displaying how long the system has been running, formatted asXd Xh Xm. Reads from the nativeos/system/uptimeksystemstats sensor — no shell subprocesses (#53). - Local IP Address (
Metricssettings — Network): New toggle under the Network metric that shows the IPv4 address of the active network interface next to network speeds (e.g.NET: ↓ 1.2 MB ↑ 48 KB · 192.168.1.5). Automatically follows the selected interface, includingautomode (#53). - Label Opacity (
Generalsettings): Slider to control the transparency of metric labels (CPU:,RAM:, etc.) in the compact panel view, from 0 (invisible) to 1 (fully opaque). Applies to both horizontal and vertical layout modes (#55). - Separator Opacity (
Generalsettings): Slider to control the transparency of the|separators between metrics in the compact panel view (#55).
[2.10.1] - 2026-06-29¶
Fixed¶
- Plasmashell Boot Crashes: Resolved a critical race condition that caused
plasmashellto enter a crash loop during system boot. Sensor module loading is now deferred until after window attachment is fully complete, preventing theKirigamiPlasmaStyleSIGSEGV (#49).
[2.10.0] - 2026-06-27¶
Added¶
- Fan Speed Monitoring (
Metricssettings): A new standalone "Fan" metric that dynamically discovers and reports fan speeds (including GPU and CPU fans) directly from the system (#47). - Automatically identifies fans through
SensorTreeModel. - Supports RPM and Percentage display units (configurable in
Generalsettings). - Fully integrates with compact panel, full popup, and tooltip views.
- Safely handles fans that do not report a maximum RPM by omitting them from percentage-based aggregations to prevent misleading data.
- Display Mode 'None' (
Generalsettings): A new display mode that completely hides the metric labels and icons, showing only the raw values to save space (#47). - Config UI Redesign (
Metricssettings): The metrics configuration page has been overhauled for better UX, with inline contextual settings (e.g. CPU, GPU, Network options expand directly under their respective metrics) and debounced sensor discovery to eliminate UI freezes on load (#48).
[2.9.0] - 2026-06-19¶
Added¶
- Per-GPU Sub-metric Visibility (
Metricssettings — GPU Selection): Each GPU entry now has independent Usage, VRAM, and Temperature toggles, letting you show only the metrics you care about without disabling the GPU entirely (#44). - Toggling a sub-metric off immediately stops polling those sensors — no unnecessary kernel data fetched.
- A minimum-one guard prevents all three sub-metrics from being deselected at once (the last checked box is disabled), keeping at least one value visible per GPU.
- Sub-metric checkboxes are automatically disabled when the parent GPU is deselected, matching visual state to functional reality.
- Storage format uses a compact pipe-separated string (
gpu0:usage,vram|gpu1:usage,temp). GPUs using all defaults are omitted, keeping the config short. Empty string (default) = all three enabled for every GPU — fully backwards-compatible with existing configs.
[2.8.1] - 2026-05-23¶
Fixed¶
- Installation via KDE Store leaving stale widget state (
install-remote.sh): Users who first installed via the KDE Store (or an olderinstall-remote.sh) and then upgraded manually could end up with a mismatchedkpackage/generic/registration. This caused settings like Show in compact panel to silently not apply, because KDE resolves widget configuration from the kpackage path, not the plasmoids path. The remote install script now mirrors the localinstall.shbehaviour exactly: it removes any previous entry under~/.local/share/kpackage/generic/<id>(including stale symlinks), creates the install directory under~/.local/share/plasma/plasmoids/, and creates a fresh symlink at the kpackage path pointing to it.
[2.8.0] - 2026-05-22¶
Added¶
- Disk I/O & Temperature (
Metricssettings — Disk I/O & Temp): New metric showing real-time disk read/write rates and the highest drive temperature across all NVMe and SATA drives. Displayed asDSK: ↓2.1MB ↑76KB · 42°Cin the compact panel (#36). - Drive temperatures are discovered dynamically via
SensorTreeModel+lmsensors(supportsnvme-pci-*anddrivetemp-scsi-*chips) — zero polling overhead when the metric is disabled. - Dedicated Disk Temp threshold sliders added to the Colors settings page (default: warning 45°C, critical 60°C).
- Unit Preferences (
Generalsettings — Unit Preferences section): Choose display units globally across all metrics (#37). - Temperature: Celsius (°C, default) or Fahrenheit (°F). Applies to CPU temp, GPU temp, and Disk temp everywhere — panel, popup, and tooltip.
- Network / Disk I/O: Bytes (KB/MB, default) or Bits (Kb/Mb). Applies to Network and Disk I/O rates. Suffix convention follows industry standard: uppercase
B= bytes, lowercaseb= bits. - Threshold slider labels in the Colors settings page update live to reflect the chosen temperature unit (stored values remain in °C for correct sensor comparison).
[2.7.0] - 2026-05-15¶
Added¶
- Multi-GPU Support (
Metricssettings — GPU Selection): On systems with more than one GPU, each GPU is now listed individually as a separate metric in both the compact panel and the full popup view (#22). Works automatically — no configuration needed on single-GPU machines. - Each GPU is detected dynamically via
SensorTreeModelmetadata; no persistent subscriptions run during discovery. - The GPU Selection section in settings shows all discovered GPUs with independent enable/disable checkboxes.
- GPU Custom Labels (
Metricssettings — GPU Selection): On multi-GPU systems, each GPU entry in the panel shows a customizable label. Type a name in the Label field (e.g.iGPU,dGPU) to override the defaultGPU 1/GPU 2identifiers. Leave it empty to keep the default numbering. - Hybrid GPU power hint: When two or more GPUs are detected, a contextual note appears in the GPU Selection section explaining that unchecking the discrete GPU prevents KVitals from polling it, allowing it to suspend when idle.
Fixed¶
- Unintended dGPU Wakeup on hybrid GPU laptops (Intel/AMD + NVIDIA setups using
supergfxctl/asusctl): The previous implementation used permanentSensors.Sensorsubscriptions for up to 6 hardcoded GPU slots. These subscriptions polled every GPU continuously, preventing the dGPU from entering its suspended/power-save state even when it was idle (#26). - New architecture: Discovery uses
SensorTreeModel+KDescendantsProxyModel(pure metadata query, no value subscriptions). Data polling uses a singleSensorDataModelconstrained strictly to the GPUs the user has selected. - Result: Deselecting a GPU in settings stops all polling for that GPU immediately. On hybrid setups, unchecking the dGPU allows it to fully suspend.
- Note: If the dGPU remains active even after unchecking it in KVitals, the cause is likely unrelated — some Xwayland applications keep the GPU awake independently of any sensor polling. This is a system/compositor-level behavior outside the scope of KVitals.
[2.6.0] - 2026-05-10¶
Added¶
- Compact Panel Visibility (
Metricssettings): Each metric now has an independent "Show in compact panel" toggle, allowing metrics to appear in the full popup view but stay hidden from the panel bar (#29, thanks @keiishu). Disabling a metric preserves its compact visibility state for when it is re-enabled. - CPU Frequency (
Metricssettings): Display the average CPU frequency in the widget. Auto-formats as GHz (≥ 1000 MHz) or MHz (#33). - Merge into CPU (compact view): Appends frequency as a second segment next to CPU usage (
CPU: 34% · 3.20 GHz). Compatible with Merge CPU & Temp — all three values appear as segments. - Full view sub-item: When enabled, CPU Frequency appears as a dedicated row directly under CPU Usage in the popup.
- Bold Font (
Generalsettings): Toggle bold styling for all metric value labels across compact and full views (#30). Defaults to off.
Fixed¶
- Inconsistent font weight across metrics in vertical layout: RAM and Network values (rendered via
SegmentsRow) were always bold while CPU/GPU were not. All value labels now follow the new Bold Font setting uniformly.
[2.5.0] - 2026-04-30¶
Added¶
- Layout Type (
Generalsettings): Choose between Horizontal (default, unchanged) and Vertical layout for the compact panel view. In vertical mode, the metric value is displayed on top with the label/icon dimmed below — ideal for tall panels or icon-only display (#11). - Metric Grouping (
Metricssettings — Grouping section): - Merge CPU & Temp: Combines CPU temperature as a second value next to CPU usage (
CPU: 45% · 62°C), using the same segment display as GPU. The CPU Temperature entry is hidden from the metric order list while merged. - Merge Battery & Power: Combines power consumption as a second value next to battery level (
BAT: 87% · 12.4W). Power Consumption entry is hidden from the metric order list while merged. - Split GPU Metrics: Optionally break GPU usage, VRAM and temperature into separate panel entries instead of the default grouped display (default: grouped).
Changed¶
- Metric order list now hides absorbed metrics when grouping is active (e.g. "CPU Temperature" disappears when "Merge CPU & Temp" is enabled), keeping the list clean and non-redundant.
CompactViewrefactored to use aLoader-based delegate system, enabling runtime layout switching without widget reload.
Fixed¶
Unable to assign [undefined] to QColorruntime error when CPU+Temp or Battery+Power merge was enabled — missing top-levelcolorfield on segmented metric objects.- Defensive
|| baseTextColorfallback added to all value label color bindings inCompactView.
[2.4.0] - 2026-04-01¶
Added¶
- Custom Font Color: Override the widget font color to match your panel theme (#20). Configurable via the new Colors settings tab.
- Threshold-Based Coloring: Metric values dynamically change color when they exceed configurable warning/critical thresholds (#12). Supported metrics:
- CPU usage (default: warning 70%, critical 90%)
- CPU temperature (default: warning 60°C, critical 85°C)
- RAM usage (default: warning 70%, critical 90%)
- GPU usage (default: warning 70%, critical 90%)
- GPU temperature (default: warning 60°C, critical 85°C)
- Battery level (inverted: warning below 30%, critical below 15%)
- Colors Config Tab: New settings page with color pickers for font/warning/critical colors and per-metric threshold sliders.
- Sensor modules now expose raw numeric values (
cpuNumericValue,tempNumericValue,ramPercentage,batNumericValue) for threshold comparison. Utils.resolveColor()function for flexible threshold-triggered color resolution.
Fixed¶
- Fixed the Colors tab color picker turning white after selecting a color; it now uses a stable native platform color dialog and preserves the selected swatch correctly.
Notes¶
- Network and Power metrics are excluded from threshold coloring (no meaningful universal threshold).
- Both features are opt-in — disabled by default. Existing users are unaffected.
[2.3.0] - 2026-03-13¶
Changed¶
- Sensor Module Architecture: Extracted all sensor logic from
main.qmlinto dedicated QML components undercontents/ui/sensors/: CpuSensors.qml— CPU usage monitoringMemorySensors.qml— RAM usage monitoringTempSensors.qml— CPU temperature monitoringGpuSensors.qml— GPU usage, VRAM, and temperature monitoringBatterySensors.qml— Battery and power monitoring with auto-detectionNetworkSensors.qml— Network download/upload speed monitoringUtils.qml— Shared formatting helpers (byte formatting, rate formatting)- View Separation: Extracted compact and full representations into
CompactView.qmlandFullView.qml. - Reduced
main.qml: From ~700 lines to ~140 lines — now acts purely as an orchestrator.
Notes¶
- No user-facing or configuration changes. The widget behaves identically to v2.2.1.
- This refactor improves maintainability and makes it easier to add new sensor types in the future.
[2.2.1] - 2026-03-07¶
Fixed¶
- Battery Detection Hotfix: Replaced
SensorTreeModelwith a crash-free Two-Stage Hybrid Detection system (#14): - Stage 1 (Silent Probe): Silently probes common battery paths (
BAT0,BAT1,BATT, etc.) for instant detection without running any subprocesses. - Stage 2 (Fallback): If no standard battery is found, falls back to a single
qdbusquery to list all sensors, completely avoidingPlasmaCore.DataSourcefile descriptor leaks. Includes a manual config fallback ifqdbusis unavailable.
[2.2.0] - 2026-03-05¶
Added¶
- Custom Metric Order: Added a new configuration option to arrange metrics (CPU, RAM, GPU, etc.) individually in whatever order you prefer (#7).
- Dynamic Battery Detection: Replaced hardcoded
BAT0/BAT1sensors with dynamicSensorTreeModeldiscovery. The widget will now automatically find any battery your system has (BAT0, BATT, CMB0, macsmc-battery, etc.) (#14).
[2.1.1] - 2026-03-03¶
Fixed¶
- Fixed a "Detected anchors on an item that is managed by a layout" QML warning spanning the journal log caused by a
MouseAreaanchoring inside aRowLayout(#13).
[2.1.0] - 2026-03-01¶
Added¶
- GPU Metrics Support: Added VRAM usage and GPU temperature monitoring to the widget.
- GPU data is retrieved natively using KDE KSysGuard sensors (
org.kde.ksysguard.sensors).
[2.0.0] - 2026-02-27¶
Changed¶
- Major Architecture Overhaul: Replaced the previous
sys-stats.shbackend with native KDE KSysGuard sensors (org.kde.ksysguard.sensors). - Completely eliminates "file descriptor leak" crashes (Issue #8) and improves overall performance by relying directly on the
ksystemstatsD-Bus daemon instead of constantly spawning bash processes. - Automatic fallback for battery monitoring (BAT0 and BAT1) logic implemented directly in QML.
[1.4.1] - 2026-02-24¶
Fixed¶
- RAM usage showing empty on non-English locales —
freetranslates itsMem:header based on locale, causing the parser to match nothing - Switched RAM data source from
free -bto/proc/meminfo(locale-independent, faster, more accurate)
[1.4.0] - 2026-02-22¶
Added¶
- Display mode setting — choose between Text, Icons, or Icons + Text for the panel
- Custom icon picker — select icons from your installed theme for each metric (via KDE's native icon picker)
- Icon size slider — adjust icon size (8–24px) when using icon mode
- Font customization — choose any system font and font size for the panel text
- Settings tabs — split configuration into General, Metrics, and Icons tabs
- Reset to defaults button on the Icons tab
- CHANGELOG.md — version history
- Documentation — MkDocs site with installation, configuration, architecture, contributing, and troubleshooting guides
[1.3.0] - 2026-02-16¶
Added¶
- Power consumption tracking (via
/sys/class/power_supply/) — contributed by @Pijuli
Fixed¶
- ShellCheck warnings from power consumption PR (SC2034, SC2155)
[1.2.1] - 2026-02-16¶
Fixed¶
- AMD CPU temperature detection — added
k10temp,zenpower,zenergy,amdgputo thermal_zone and hwmon detection - lm-sensors fallback now matches AMD
Tccd1label - Reordered temperature fallback tiers to prioritize CPU-specific sources over generic thermal zones
[1.2.0] - 2026-02-13¶
Added¶
- Auto-detect network interface via
ip routewith manual override in settings - Network interface selector in widget configuration
Fixed¶
- ShellCheck warnings (SC2010, SC2155)
[1.1.0] - 2026-02-12¶
Changed¶
- Modularized
sys-stats.shinto functions - Enhanced CPU temperature detection with 4-tier fallback (thermal_zone → hwmon → lm-sensors → generic)
[1.0.0] - 2026-02-12¶
Added¶
- Initial release
- CPU usage (delta-based from
/proc/stat) - RAM usage (from
/proc/meminfo) - CPU temperature (multi-source detection)
- Battery status with emoji indicators
- Network speed (delta-based from
/proc/net/dev) - Configurable update interval
- Toggle visibility per metric