Skip to content

Repository files navigation

AeroForge Control

Bug Reports And Feedback

If AeroForge breaks, behaves oddly, or you want to report a bug or leave feedback, go here first:

https://discord.gg/EuWpmkjQY8

This GitHub repository is not monitored for support, bug reports, or pull requests. Please do not open pull requests; use the Discord above for feedback and issue reports.

Premium-feeling frontend prototype for a laptop fan control and battery or power management application. The project now includes a Tauri desktop shell around the React UI and a Windows service for hardware-facing control paths.

Included UI flows

  • Custom fan curves with draggable CPU and GPU thermal nodes
  • Power profile switching
  • Fan profile switching
  • Smart charging toggle with an 80% charge cap preview
  • Boot splash image swapping with preset art and custom upload preview

Tech stack

  • React 19
  • TypeScript
  • Vite
  • Tauri 2

Run locally

npm.cmd install
npm.cmd run dev

Production build

npm.cmd run build

Run as a desktop app

npm.cmd run tauri:dev

Windows prerequisites for Tauri

  • Rust toolchain via rustup
  • Visual Studio Build Tools with MSVC and Windows SDK components
  • WebView2 runtime

Package the desktop app

npm.cmd run tauri:build

Create a portable folder

npm.cmd run portable:build

This creates:

  • portable\AeroForge Control Portable\
  • portable\AeroForge-Control-Portable-0.16.3.zip

Install the Nitro key helper

npm.cmd run startup:install

This registers aeroforge-hotkey-helper.exe --daemon in the logged-in user session so the physical Nitro key can open or focus AeroForge without keeping the WebView UI resident. To remove it:

npm.cmd run startup:uninstall

Support debug bundle

For users who cannot get AeroForge working, send them:

scripts\AeroForge-Debug-Collector.cmd

The portable ZIP also includes the same AeroForge-Debug-Collector.cmd beside aeroforge-control.exe. They can double-click it or run it from Command Prompt. It creates an AeroForge-Debug-YYYYMMDD-HHMMSS.zip on their Desktop with service status, named-pipe read-only probes, AeroForge logs and state snapshots, filtered Acer / Nitro / NVIDIA / WebView diagnostics, Windows event logs, power/display state, driver inventory, Defender status, startup entries, shortcut targets, update reachability, NVIDIA power-limit readback, AMD/CPU power diagnostics, read-only Acer WMI probes, app/service version facts, installer logs, UI performance logs, dxdiag output, filtered Windows Error Reporting crash inventories, and a root summary.json.

The collector is read-only. It skips binaries, images, staged update payloads, WebView cache/storage folders, and token-like filenames, then redacts common token/password/secret strings in copied text files. Launch it with -Quick -PollSeconds 60 for a low-noise service/CPU/power/fan timeline, or -Deep -PollSeconds 120 -PollIntervalMs 1000 for the full support timeline. Focused polling is also available, for example -Poll fans pipe performance -PollSeconds 45 -PollIntervalMs 500 for custom fan or mode-switch lag, and -Poll nvidia gpu-counters processes -PollSeconds 90 for dGPU idle or power-limit reports. Add -NoNvidiaSmi when testing whether NVIDIA command-line polling itself is waking the dGPU. Maintainers can add -OutputRoot "C:\Temp\AeroForgeDebug" to place the bundle somewhere other than the Desktop, or run -ListOptions to print every supported switch.

Notes for backend wiring later

  • src/App.tsx centralizes the mock state for all primary controls.
  • Fan curves are represented as temperature and speed points for both CPU and GPU zones.
  • Boot image upload uses URL.createObjectURL() for local preview only.
  • Charge-limit controls are safe UI state changes only.
  • src-tauri/src/backend/ now contains the typed backend contract, capability snapshot, control snapshot, telemetry snapshot, and persistence-backed desktop state models exposed through Tauri commands.
  • The backend now persists AeroForge-owned control state to disk and routes power, GPU tuning, and fan writes through the AeroForge service.

AeroForge Windows service

The repo now includes a separate barebones Windows service host under aeroforge-service/.

Current shape:

  • one AeroForge-owned Windows service process
  • a thin supervisor that owns lifecycle and worker health only
  • parallel worker threads for capability, persistence, telemetry, and named-pipe IPC
  • worker snapshot files under ProgramData\\AeroForge\\Service\\state
  • a supervisor snapshot at ProgramData\\AeroForge\\Service\\state\\supervisor.json
  • local IPC over \\.\pipe\AeroForgeService instead of localhost ports
  • no dependency on Acer localhost services or other vendor IPC

Current fan control path:

  • fan profile and custom-curve apply requests flow through the AeroForge service
  • the service calls ROOT\\WMI AcerGamingFunction directly on supported Acer Nitro hardware
  • SetGamingFanBehavior receives Acer behavior inputs for auto, max, and mixed custom fan profiles
  • SetGamingFanSpeed receives per-fan target inputs for CPU and GPU fan percentages
  • when Custom is active, the service re-reads telemetry and reapplies the curve-derived CPU/GPU speed targets every 5 seconds
  • RPM movement is verified separately through direct Acer sensor telemetry rather than trusting the write call alone
  • no NitroSense websocket, AcerAgentService PSSDK socket, or PredatorSense pipe dependency is used for AeroForge fan writes

Current power control path:

  • Balanced, Performance, Turbo, and Custom base profiles prefer AcerGamingFunction.SetGamingMiscSetting(0x0B, profile) platform-profile writes and fall back to legacy SetGamingProfile only if the misc-setting path is unavailable
  • Custom layers the requested Windows processor-state policy over the selected firmware base
  • Quiet uses Acer platform profile value 0x00 plus the direct NVIDIA NVAPI Whisper path when available
  • Windows processor-state policy is still applied through powercfg and read back afterward for AC/DC verification
  • CPU package power and PL1/PL2 readback use the PawnIO MSR/RAPL path when PawnIO is installed. The AeroForge installer can install the bundled open-source PawnIO setup on request, stages the IntelMSR.bin module, detects PawnIOLib.dll, and configures the service-level AEROFORGE_PAWNIO_DLL, AEROFORGE_PAWNIO_MODULE, and AEROFORGE_ENABLE_PAWNIO environment variables automatically. If PawnIO is not installed, the CPU watt/PL panel intentionally reports that the CPU power driver is missing.
  • The legacy WinRing0 CPU MSR/RAPL path is not bundled or enabled in release builds because Windows Defender commonly flags that driver. For diagnostics only, maintainers can set AEROFORGE_ENABLE_WINRING0=1 and provide a trusted external driver through AEROFORGE_WINRING0_DRIVER.

Bundled PawnIO runtime:

  • third_party/pawnio/PawnIO_setup.exe is the open-source PawnIO setup from namazso/PawnIO.Setup release 2.2.0.
  • SHA256: 1F519A22E47187F70A1379A48CA604981C4FCF694F4E65B734AAA74A9FBA3032.
  • Setup is invoked only when the user opts into CPU wattage and PL1/PL2 support during AeroForge setup; silent installs configure an existing PawnIO install but do not force-install PawnIO.

Current read-only telemetry coverage:

  • Windows power status for battery percentage and AC state
  • Windows system CPU time sampling for CPU usage
  • standard Windows processor queries for current CPU clock
  • NVIDIA GPU temperature, utilization, clocks, and VRAM are read through NVML only while Windows reports active dedicated-GPU memory use, plus a short cooldown window. Windows counters are used only as the wake gate, not as displayed utilization. NVIDIA power draw and power-limit readback remain disabled by default to avoid the more aggressive polling path; maintainers can opt into that diagnostic power telemetry with AEROFORGE_ENABLE_NVIDIA_TELEMETRY=1.
  • direct AcerGamingFunction.GetGamingSysInfo reads for CPU/GPU/system temperatures and CPU/GPU fan RPMs when available
  • direct HID status reads for CPU and GPU fan speed on supported Nitro hardware
  • ACPI thermal-zone data as fallback platform thermals on supported systems
  • independent CPU-package and system-board thermal separation is still incomplete until AeroForge adds deeper EC or ACPI decoding

Clean-room boundary:

  • AeroForge source does not include Acer source code, decompiled Acer code, or Acer binary string-analysis artifacts
  • Vendor names, WMI class names, method names, and numeric inputs are treated as runtime-observed interface facts

Useful commands:

npm.cmd run service:build
npm.cmd run service:console

Install and uninstall scripts:

powershell -ExecutionPolicy Bypass -File scripts/Install-AeroForgeService.ps1
powershell -ExecutionPolicy Bypass -File scripts/Uninstall-AeroForgeService.ps1

The install script registers AeroForgeService with delayed automatic startup so the service does not race early-boot NVIDIA initialization.

About

Open-source NitroSense alternative for Windows 10/11. Bug reports and feedback: discord.gg/EuWpmkjQY8

Resources

Stars

27 stars

Watchers

3 watching

Forks

Releases

Packages

Contributors

Languages