DEV Community

Cover image for The Best Free PC Health Monitor for Windows in 2026 — PulseMonitor
VaultSoft
VaultSoft

Posted on • Edited on

The Best Free PC Health Monitor for Windows in 2026 — PulseMonitor

Building PulseMonitor — what I learned making a Windows PC monitor in Python

I'm a self-taught developer from the UK. A few weeks ago I decided to build a real Windows desktop app from scratch using Python and PyQt6.

This is what I learned.

The problem I was solving

Task Manager is fragmented. HWiNFO is powerful but overwhelming. I wanted one clean window that shows everything important about my PC in real time.

Tech stack I chose

  • Python 3.11 — language I know best
  • PyQt6 — surprisingly capable for desktop UI
  • psutil — cross-platform system metrics
  • nvidia-smi — subprocess call for NVIDIA GPU data
  • WMI — Windows Management Instrumentation for AMD/Intel GPU and temperatures
  • SQLite — local performance history database
  • PyInstaller — bundles everything into a standalone EXE

The hardest problems I solved

1. Animation performance

My first naive implementation gave every animated widget its own QTimer running at 60fps. With 24 CPU core bars on screen that was 1,500 repaints per second. CPU usage hit 80%+.

The fix: a singleton _AnimDriver class — one shared QTimer that widgets register with when animating. CPU dropped from 80%+ to under 5%.

class _AnimDriver(QObject):
    tick = pyqtSignal()
    _instance = None

    def __init__(self):
        super().__init__()
        self._timer = QTimer()
        self._timer.setInterval(33)  # ~30fps
        self._timer.timeout.connect(self.tick)
        self._count = 0

    def register(self):
        self._count += 1
        if not self._timer.isActive():
            self._timer.start()

    def deregister(self):
        self._count = max(0, self._count - 1)
        if self._count == 0:
            self._timer.stop()
Enter fullscreen mode Exit fullscreen mode

2. Cross-thread Qt signals

MonitorThread runs in a background thread and can't safely pass Python objects to the UI thread. The solution was a zero-argument signal — the thread emits a tick, the UI reads from a shared snapshot:

class MonitorThread(QThread):
    sig_tick = pyqtSignal()  # zero args — no object crossing thread boundary

    def run(self):
        while self._running:
            self._snapshot = self._collect_metrics()
            self.sig_tick.emit()
            time.sleep(self._interval)
Enter fullscreen mode Exit fullscreen mode

3. Supporting AMD and Intel GPUs

nvidia-smi only works for NVIDIA. For AMD and Intel I used WMI's GPU performance counters — the same data source Windows Task Manager uses:

import wmi
w = wmi.WMI(namespace="root\\cimv2")
for item in w.Win32_PerfFormattedData_GPUPerformanceCounters_GPUEngine():
    if "engtype_3D" in item.Name:
        utilization = item.UtilizationPercentage
Enter fullscreen mode Exit fullscreen mode

4. Packaging with PyInstaller

Getting a clean portable EXE with no false positive antivirus flags took several attempts. Key lessons:

  • Remove any kernel-level drivers (WinRing0, LibreHardwareMonitor) — they trigger antivirus
  • Use --onedir not --onefile for faster startup
  • Embed the icon properly in the spec file

What I built

The finished app has 11 pages: Dashboard, CPU, Memory, GPU, Storage, Processes, Startup, Fans, Network, History and Settings.

It uses under 5% CPU idle, runs from a ZIP with no installation, and has an auto-updater built in.

What's next

  • VaultCleaner — a PC cleanup tool using the same stack
  • Freemium model once I have enough users

If you're interested in the source code or want to try it:
https://github.com/VaultSoft/PulseMonitor

What would you build differently?

System Requirements

  • OS: Windows 10 or Windows 11 (64-bit)
  • RAM: ~50 MB while running
  • Disk: ~150 MB extracted
  • GPU temp monitoring: NVIDIA GPU required (AMD GPU support via HWiNFO64 with admin rights)
  • Admin rights: Optional — required only for CPU temperature on AMD Ryzen processors

How to Run PulseMonitor

  1. Download the ZIP from the link below
  2. Extract it anywhere — Desktop, Downloads, a USB drive, wherever suits you
  3. Run PulseMonitor.exe directly from the extracted folder
  4. Optional: right-click the exe and send a shortcut to your Desktop or pin it to the taskbar

That's it. PulseMonitor is fully portable — no installer, no registry entries, no files scattered across your system. To remove it, delete the folder.


Download PulseMonitor — Free

Stop guessing what your PC is doing. PulseMonitor gives you the full picture in one clean window, monitors in the background when you don't need it, and alerts you before small problems become big ones.

→ Download PulseMonitor Free from Gumroad

Compatible with Windows 10 and Windows 11. No subscription. No account required.


Have a question or found a bug? Reach out at vaultwall@proton.me — feedback directly shapes future versions.

Top comments (0)