Advanced Battery Monitoring for Windows
A native WinUI 3 app that provides detailed insights into your PC's battery health, performance, and power consumption. This is the Windows counterpart to PowerID for Mac, rebuilt from scratch on the Windows App SDK (no Electron, no web views).
- Battery information refreshes every 2 seconds (configurable in Settings)
- Reads directly from the ACPI battery WMI classes (
root\WMI) - Lightweight native C# implementation, no background services
- Battery level with a dynamic color gradient
- Charging status and charging power (W)
- Estimated time to full charge
- Battery health at a glance
- Cycle count
- Capacity: Current / Maximum / Design capacity (mAh), battery level (%)
- Electrical: Voltage (V), Amperage (mA), Power draw (W)
- Health & Lifecycle: Health (%), cycle count, temperature (°C, where the firmware reports it)
- Power Source: Charging status, power source type, time to full charge
Plain-language explanations of every metric plus battery care tips.
- Pure WinUI 3 (Fluent Design), no third-party UI frameworks
- System tray icon showing live battery % (
Services/TrayIconService.cs), with a right-click menu for status, health, show/quit - Dark/light theme aware
- Optional "close to tray" behavior, same as the menu bar toggle on macOS
- Go to the Releases page
- Download
PowerID-win-x64.zip - Unzip it anywhere and run
PowerID.exe
Since the app is unsigned, Windows SmartScreen may show a warning the first time you run it:
- Click "More info"
- Click "Run anyway"
See Building from Source below.
- Windows 10 (build 17763+) or Windows 11
- .NET 8 SDK
- Visual Studio 2022 (17.8+) with the Windows App SDK and .NET Desktop Development workloads (or the standalone Windows App SDK tooling)
- Python 3 + Pillow (only needed to regenerate app icons)
-
Clone the repository
git clone https://github.com/ogden-marrow/PowerID_For_Windows.git cd PowerID_For_Windows
-
Generate app icons (optional, already committed under
PowerID/Assets)pip install Pillow python generate_icon.py
-
Open in Visual Studio
start PowerID.sln
-
Build and Run
- Set the platform to
x64(orarm64) - Press
F5to build and run, orCtrl+Shift+Bto build only
- Set the platform to
Use the full msbuild.exe (from the Visual Studio/Build Tools installation), not dotnet build -
the .NET SDK's own MSBuild host has been unreliable at launching XamlCompiler.exe, the .NET
Framework 4.7.2 tool that compiles .xaml files:
dotnet restore PowerID.sln
msbuild PowerID.sln /p:Configuration=Release /p:Platform=x64msbuild PowerID/PowerID.csproj /t:Publish /p:Configuration=Release /p:Platform=x64 `
/p:WindowsPackageType=None /p:WindowsAppSDKSelfContained=true /p:SelfContained=true `
/p:RuntimeIdentifier=win-x64 /p:PublishDir=publish\PowerIDThe runnable app will be at publish/PowerID/PowerID.exe.
PowerID.Core (the battery math and formatting logic) has no Windows/WinUI dependency, so its
test suite in PowerID.Tests runs anywhere with just the .NET 8 SDK - no Windows required:
dotnet test PowerID.Tests/PowerID.Tests.csprojCI runs this on every push/PR (on ubuntu-latest, before the slower Windows build even starts) -
see the test job in .github/workflows/build-release.yml.
See ARCHITECTURE.md for the full breakdown, the PowerID.Core/PowerID/PowerID.Tests split,
MVVM structure, and a macOS → Windows API mapping table (IOKit ↔ WMI, NSStatusItem ↔ Shell_NotifyIcon, etc.).
| Metric | Description | Source |
|---|---|---|
| Battery Level | Current charge as % of max capacity | BatteryStatus (WMI) |
| Current Capacity | Actual charge in mAh (derived from mWh / design voltage) | BatteryStatus |
| Max Capacity | Current full-charge capacity in mAh | BatteryFullChargedCapacity |
| Design Capacity | Original factory capacity in mAh | BatteryStaticData |
| Battery Health | (Max / Design) × 100% | Calculated |
| Cycle Count | Total charge-discharge cycles | BatteryCycleCount |
| Voltage | Battery voltage in volts | BatteryStatus |
| Amperage | Current flow in milliamps (derived from rate / voltage) | Calculated |
| Wattage | Charge/discharge rate in watts | BatteryStatus |
| Temperature | Battery temperature in Celsius, if reported by firmware | BatteryTemperature |
- Operating System: Windows 10 (build 17763+) or Windows 11
- Architecture: x64 or ARM64
- Hardware: A PC/laptop with a battery
Contributions are welcome!
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
- Low battery / fully-charged notifications (toast notifications)
- Real "Launch at login" registration (
StartupTaskAPI) - Historical battery data tracking
- MSIX signing + Microsoft Store packaging
- Localization for other languages
PowerID uses GitHub Actions (.github/workflows/build-release.yml) to build on every push/PR, and to publish a
zipped release when a v* tag is pushed:
git tag -a v1.0.0 -m "Release version 1.0.0"
git push origin v1.0.0Problem: Windows SmartScreen blocks the app ("Windows protected your PC")
Solution: Click "More info" then "Run anyway".
Problem: All values show as 0 or "Unknown"
Solution:
- Ensure you're running on a device with a battery
- Some OEM firmware doesn't expose
BatteryTemperatureover WMI - this is expected and shows as 0°C - Try restarting the app
Problem: Missing Windows App SDK workload / Windows 10 SDK
Solution: Install the "Windows application development" workload via the Visual Studio Installer, or install the Windows App SDK directly.
MIT License - see LICENSE for details.
- Issues: GitHub Issues
- macOS version: PowerID_For_Mac
Made with ⚡ for the Windows community
