A Vulkan and DirectX overlay for monitoring FPS, temperatures, CPU/GPU load and more. Windows-only fork.
This is a Windows-only port of MangoHud. The original MangoHud is a Linux-first project. This fork replaces the Linux-specific backends with native Windows APIs so the overlay runs natively on Windows without Wine or WSL.
All the core functionality is the same: FPS counter, frame timing graphs, CPU/GPU stats, temperature, VRAM, RAM, battery, network I/O, benchmarking, logging, and configurable HUD layout.
The overlay itself is identical. Under the hood, the system monitoring backends were swapped out for Windows equivalents:
| Feature | Linux (original) | Windows (this fork) |
|---|---|---|
| GPU enumeration | /sys/class/drm/ sysfs |
DXGI EnumAdapters |
| NVIDIA monitoring | NVML + XNVCtrl | NVML (nvml.dll) + NVAPI |
| AMD monitoring | sysfs gpu_metrics | ADL (atiadlxx.dll) + DXGI VRAM |
| Intel monitoring | fdinfo / i915 perf | DXGI VRAM (basic) |
| VRAM (all vendors) | sysfs / NVML | DXGI QueryVideoMemoryInfo |
| CPU stats | /proc/stat |
GetSystemTimes() + NtQuerySystemInformation (per-core) |
| CPU frequency | /sys/devices/system/cpu/ |
CallNtPowerInformation (per-core MHz) |
| RAM stats | /proc/meminfo |
GlobalMemoryStatusEx() |
| Process memory | /proc/[pid]/stat |
GetProcessMemoryInfo() |
| Battery | /sys/class/power_supply/ |
GetSystemPowerStatus() |
| Network I/O | /sys/class/net/ |
IP Helper API (GetIfTable2) |
| Disk I/O | /proc/[pid]/io |
GetProcessIoCounters() |
| Keybinds | X11/Wayland key events | GetAsyncKeyState() |
| Graphics hook (Vulkan) | Implicit Vulkan layer | Implicit Vulkan layer (same) |
| Graphics hook (GL/DX) | LD_PRELOAD GLX/EGL |
DXGI proxy DLL (drop next to game exe) |
| Config GUI | GOverlay / MangoJuice | MangoJuice (GTK4, ported to Windows) |
| Config path | ~/.config/MangoHud/ |
%APPDATA%\MangoHud\ |
Not yet ported (contributions welcome):
- Intel GPU load/temperature (no public Windows API; DXGI VRAM works)
- CPU temperature (requires admin privileges or LibreHardwareMonitor)
- Media player display (D-Bus not available on Windows)
- D3D12 overlay rendering on MinGW builds (works on MSVC; MinGW builds collect stats but don't render for D3D12 games due to imgui backend limitations)
Linux-only concepts removed (not applicable on Windows):
mangoapp,mangohudctl,mangoplothelper tools- GameMode / VkBasalt detection
- Wine/Proton sync method display
- Steam Deck fan speed
- FEX emulation stats, ftrace
| Vendor | Monitoring Method | Metrics Available |
|---|---|---|
| NVIDIA | NVML (nvml.dll) |
Load, temperature, VRAM, clocks, power, fan speed, throttling |
| AMD | ADL (atiadlxx.dll) + DXGI |
Load, temperature, clocks, fan speed, VRAM usage |
| Intel | DXGI | VRAM usage, device name (load/temp not available via public API) |
All vendors get VRAM monitoring through DXGI IDXGIAdapter3::QueryVideoMemoryInfo, which supplements or backs up the vendor-specific APIs.
git clone --recurse-submodules https://github.com/Leclowndu93150/MangoHud-Windows.git
cd MangoHud-Windows
meson setup build64 --cross-file mingw64.txt
ninja -C build64For 32-bit:
meson setup build32 --cross-file mingw32.txt
ninja -C build32Install MSYS2, then from a MinGW64 shell:
pacman -S mingw-w64-x86_64-meson mingw-w64-x86_64-ninja mingw-w64-x86_64-gcc mingw-w64-x86_64-glslang mingw-w64-x86_64-python-mako
git clone --recurse-submodules https://github.com/Leclowndu93150/MangoHud-Windows.git
cd MangoHud-Windows
meson setup build
ninja -C build- GCC/G++ (MinGW-w64) or MSVC
- Meson >= 0.60
- Ninja
- glslang
- Python 3 + Mako
All other dependencies (imgui, implot, spdlog, vulkan-headers, minhook) are pulled automatically as Meson subprojects.
| Option | Default | Description |
|---|---|---|
| with_nvml | enabled | NVML support for NVIDIA GPU metrics |
| loglevel | info | Max log level in release builds |
| tests | auto | Build tests |
| include_doc | true | Install example config files |
Set the environment variable before launching:
set MANGOHUD=1
Or register the Vulkan implicit layer in the Windows Registry:
HKLM\SOFTWARE\Khronos\Vulkan\ImplicitLayers
Add the full path to MangoHud.<arch>.json with a DWORD value of 0.
Use MangoJuice (included, see below) to manage everything. It handles both DirectX and Vulkan games:
- DirectX games: Add your game, click "Enable". MangoJuice copies a DXGI proxy DLL next to the game executable. The game loads it automatically on startup. Same approach used by ReShade and SpecialK.
- Vulkan games (CS2, Doom, etc): Click "Register Vulkan Layer" in the Games tab. This registers the MangoHud Vulkan implicit layer in the Windows Registry and sets
MANGOHUD=1system-wide. All Vulkan games will show the overlay after that.
MangoJuice requests administrator privileges on startup because writing to the Vulkan layer registry key (HKLM\SOFTWARE\Khronos\Vulkan\ImplicitLayers) and setting system environment variables requires it. This is a one-time setup. The DirectX proxy DLL deployment does not need admin.
Copy dxgi.dll from the build output into the same folder as the game's .exe file. The game will load it on startup and the overlay will appear automatically.
To remove it, just delete the dxgi.dll from the game's folder.
The proxy DLL forwards all DXGI calls to the real system DLL while hooking Present to render the overlay. It supports both D3D11 and D3D12, including proper handling of window resize and fullscreen toggling.
MangoJuice is the graphical configuration tool for MangoHud. It's included as a submodule in the mangojuice/ directory.
Features:
- Full MangoHud configuration editor (GPU, CPU, memory, battery, visual settings, colors, keybinds, logging)
- Game Manager: add games, enable/disable the overlay per-game with one click
- Vulkan layer registration: one-click setup for Vulkan games (registers the implicit layer in the Windows Registry)
- Profile/preset management
- vkBasalt configuration
MangoJuice requests admin privileges on startup to be able to register the Vulkan layer (HKLM registry write) and set system environment variables. The UAC prompt appears once when you launch it.
From an MSYS2 MinGW64 shell:
pacman -S mingw-w64-x86_64-gtk4 mingw-w64-x86_64-libadwaita mingw-w64-x86_64-vala mingw-w64-x86_64-libgee
cd mangojuice
meson setup build
ninja -C buildThe MangoJuice executable and its GTK4/libadwaita runtime DLLs need to be bundled together for distribution.
MangoHud looks for configuration files in this order:
%APPDATA%\MangoHud\MangoHud.conf- The
MANGOHUD_CONFIGenvironment variable (comma-separated key=value pairs) - The
MANGOHUD_CONFIGFILEenvironment variable (path to a config file)
Example MangoHud.conf:
fps
gpu_stats
gpu_temp
cpu_stats
cpu_temp
ram
vram
frame_timingSee the included MangoHud.conf.example for all available options.
Changes to the config file are picked up automatically (the config directory is monitored for file changes).
Default keybindings (configurable in MangoHud.conf):
| Keybind | Action |
|---|---|
| F12 | Toggle HUD visibility |
| F2 | Toggle FPS logging |
| F4 | Reload configuration |
Keybinds use Windows virtual key codes (VK_ constants).
When logging is enabled (toggle with F2 by default), MangoHud writes frame time data to a CSV file. The output directory defaults to the current working directory and can be changed via the output_folder config option.
Log files can be visualized at FlightlessMango.com or with any CSV-compatible tool.
