You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
Alessandro Toia 87cc5c62fa vulkan: Remove unused VkPhysicalDeviceFeatures 9 hours ago
.github Build with CI jobs with -Dwerror=true 11 months ago
assets update overlay example 3 years ago
bin Install data files only if `include_doc` option is set 7 months ago
control control: send msg when log stops 6 months ago
data make icon a square 4 months ago
include nlohmann_json wrap 11 months ago
modules Add minhook as module 2 years ago
pkgbuild Updated PKGBUILD to honor the user set compiler using CC and CXX environment variables. 6 months ago
src vulkan: Remove unused VkPhysicalDeviceFeatures 9 hours ago
subprojects tests: cmocka subproject 3 months ago
tests amdgpu tests 3 months ago
.editorconfig editorconfig: drop irrelevant Makefile section 11 months ago
.gitignore nlohmann_json wrap 11 months ago
.gitmodules Fix minhook repo url 2 years ago
LICENSE Added LICENSE 3 years ago Update instructions for Debian / Ubuntu 4 months ago build-source: exclude spdlog (#618) 1 year ago Remove libdrm_amdgpu metrics 11 months ago Update build scripts for libdrm/SRT 2 years ago [] Seperating deps into seperate file for easy adding of new dep 2 weeks ago [] Seperating deps into seperate file for easy adding of new dep 2 weeks ago add missing include to test 4 weeks ago
meson_options.txt Don't build mangoapp by default 2 weeks ago
mingw32.txt Use a proper mingw32.txt file 11 months ago
mingw64.txt Win32 mingw cross files 2 years ago Update build scripts for libdrm/SRT 2 years ago [Params] Version option 3 years ago


A Vulkan and OpenGL overlay for monitoring FPS, temperatures, CPU/GPU load and more.





If you wish to compile MangoHud to keep up to date with any changes - first clone this repository and cd into it:

git clone --recurse-submodules
cd MangoHud

Using meson to install "manually":

meson build
ninja -C build install

By default, meson should install MangoHud to /usr/local. Specify install prefix with --prefix=/usr if desired. Add -Dappend_libdir_mangohud=false option to meson to not append mangohud to libdir if desired (e.g. /usr/local/lib/mangohud).

To install 32-bit build on 64-bit distro, specify proper libdir: lib32 for Arch, lib/i386-linux-gnu on Debian-based distros. RPM-based distros usually install 32-bit libraries to /usr/lib and 64-bit to /usr/lib64. You may have to change PKG_CONFIG_PATH to point to correct folders for your distro.

CC="gcc -m32" \
CXX="g++ -m32" \
PKG_CONFIG_PATH="/usr/lib32/pkgconfig:/usr/lib/i386-linux-gnu/pkgconfig:/usr/lib/pkgconfig" \
meson build32 --libdir lib32
ninja -C build32 install


Install necessary development packages.

  • gcc, g++
  • or gcc-multilib, g++-multilib for 32-bit support
  • meson >=0.54
  • ninja (ninja-build)
  • glslang
  • vulkan headers if using -Duse_system_vulkan=enabled option with meson
  • libGL/libEGL (libglvnd, mesa-common-dev, mesa-libGL-devel etc)
  • X11 (libx11-dev)
  • XNVCtrl (libxnvctrl-dev), optional, use -Dwith_xnvctrl=disabled option with meson to disable
  • D-Bus (libdbus-1-dev), optional, use -Dwith_dbus=disabled option with meson to disable

Python 3 libraries:

  • Mako (python3-mako or install with pip)

If distro's packaged meson is too old and gives build errors, install newer version with pip (python3-pip).

Building with build script

You can also use script to do some things automatically like install dependencies, if distro is supported but it usually assumes you are running on x86_64 architecture.

To just build it, execute:

./ build

You can also pass arguments to meson:

./ build -Dwith_xnvctrl=disabled

Resulting files will be install to ./build/release folder.

If you have compiled MangoHud from source, to install it, execute:

./ install

You can then subsequently uninstall MangoHud via the following command

./ uninstall

To tar up the resulting binaries into a package and create a release tar with installer script, execute:

./ package release

or combine the commands, although package should also call build if it doesn't find the built libs:

./ build package release

If you have built MangoHud before and suddenly it fails, you can try cleaning the build folder, execute:

./ clean

Currently it just does rm -fr build and clears subprojects.

NOTE: If you are running an Ubuntu-based, Arch-based, Fedora-based, or openSUSE-based distro, the build script will automatically detect and prompt you to install missing build dependencies. If you run into any issues with this please report them!

Pre-packaged binaries

GitHub releases

If you do not wish to compile anything, simply download the file under Releases, extract it, and from within the extracted folder in terminal, execute:

./ install

Arch-based distributions

If you are using an Arch-based distribution, install mangohud and lib32-mangohud with your favourite AUR helper. mangohud-git and lib32-mangohud-git are also available on the AUR if you want the up-to-date version of MangoHud.

If you are building it by yourself, you need to enable multilib repository, by editing pacman config:

sudo nano /etc/pacman.conf

and uncomment:

#Include = /etc/pacman.d/mirrorlist

then save the file and execute:

sudo pacman -Syy

Debian, Ubuntu

If you are using Debian 11 (Bullseye) or later, Ubuntu 21.10 (Impish) or later, or distro derived from them, to install the MangoHud package, execute:

sudo apt install mangohud

Optionally, if you also need MangoHud for 32-bit applications, execute:

sudo apt install mangohud:i386


If you are using Fedora, to install the MangoHud package, execute:

sudo dnf install mangohud


If you are using Solus, to install MangoHud simply execute:

sudo eopkg it mangohud


If you run openSUSE Leap or Tumbleweed you can get Mangohud from the official repositories. There are two packages, mangohud for 64bit and mangohud-32bit for 32bit application support. To have Mangohud working for both 32bit and 64bit applications you need to install both packages even on a 64bit operating system.

sudo zypper in mangohud mangohud-32bit

Leap doesn't seem to have the 32bit package.

Leap 15.2

sudo zypper addrepo -f
sudo zypper install mangohud

Leap 15.3

sudo zypper addrepo -f
sudo zypper install mangohud


If you are using Flatpaks, you will have to add the Flathub repository for your specific distribution, and then, to install it, execute:

For flatpak
flatpak install org.freedesktop.Platform.VulkanLayer.MangoHud

To enable MangoHud for all Steam games:

flatpak override --user --env=MANGOHUD=1 com.valvesoftware.Steam

Normal usage

To enable the MangoHud overlay layer for Vulkan and OpenGL, run :

mangohud /path/to/app

For Lutris games, go to the System options in Lutris (make sure that advanced options are enabled) and add this to the Command prefix setting:


For Steam games, you can add this as a launch option:

mangohud %command%

Or alternatively, add MANGOHUD=1 to your shell profile (Vulkan only).


OpenGL games may also need dlsym hooking. Add --dlsym or MANGOHUD_DLSYM=1 env var to your command like mangohud --dlsym %command% for Steam.

Some Linux native OpenGL games overrides LD_PRELOAD and stops MangoHud from working. You can sometimes fix this by editing LD_PRELOAD in the start script LD_PRELOAD=/path/to/mangohud/lib/

Hud configuration

MangoHud comes with a config file which can be used to set configuration options globally or per application. Usually it is installed as /usr/share/doc/mangohud/MangoHud.conf.example or get a copy from here.

The priorities of different config files are:

  1. /path/to/application/dir/MangoHud.conf
  2. Per-application configuration in ~/.config/MangoHud:
    1. ~/.config/MangoHud/<application_name>.conf for native applications, where <application_name> is the case sensitive name of the executable
    2. ~/.config/MangoHud/wine-<application_name>.conf for wine/proton apps, where <application_name> is the case sensitive name of the executable without the .exe ending
  3. ~/.config/MangoHud/MangoHud.conf

Example: For Overwatch, this would be wine-Overwatch.conf (even though the executable you run from Lutris is, the actual game executable name is Overwatch.exe).

If you start the game from the terminal with MangoHud enabled (for example by starting Lutris from the terminal), MangoHud will print the config file names it is looking for.

You can find an example config in /usr/share/doc/mangohud

GOverlay is a GUI application that can be used to manage the config


You can also customize the hud by using the MANGOHUD_CONFIG environment variable while separating different options with a comma. This takes priority over any config file.

You can also specify configuration file with MANGOHUD_CONFIGFILE=/path/to/config for applications whose names are hard to guess (java, python etc).

A partial list of parameters are below. See the config file for a complete list. Parameters that are enabled by default have to be explicitly disabled. These (currently) are fps, frame_timing, cpu_stats (cpu load), gpu_stats (gpu load), and each can be disabled by setting the corresponding variable to 0 (e.g., fps=0).

Variable Description
Displays current CPU/GPU temperature
core_load Displays load & frequency per core
Displays GPU core/memory frequency
Displays system RAM/VRAM usage
swap Displays swap space usage next to system RAM usage
procmem_shared, procmem_virt
Displays process' memory usage: resident, shared and/or virtual. procmem (resident) also toggles others off if disabled.
full Enables most of the toggleable parameters (currently excludes histogram)
font_size= Customizeable font size (default=24)
font_size_text= Customizeable font size for other text like media metadata (default=24)
font_scale= Set global font scale (default=1.0)
font_file Change default font (set location to .TTF/.OTF file )
font_file_text Change text font. Otherwise font_file is used
font_glyph_ranges Specify extra font glyph ranges, comma separated: korean, chinese, chinese_simplified, japanese, cyrillic, thai, vietnamese, latin_ext_a, latin_ext_b. If you experience crashes or text is just squares, reduce font size or glyph ranges.
no_small_font Use primary font size for smaller text like units
Customizeable hud dimensions (in pixels)
position= Location of the hud: top-left (default), top-right, middle-left, middle-right, bottom-left, bottom-right, top-center
offset_x offset_y Hud position offsets
no_display Hide the hud by default
Modifiable toggle hotkeys. Default are Shift_R+F12 and Shift_L+F2, respectively.
reload_cfg= Change keybind for reloading the config. Default = Shift_L+F4
Displays local time. See std::put_time for formatting help. NOTE: Sometimes apps (or AMDVLK (should be fixed in latest)) may set TZ (timezone) environment variable to UTC/GMT
Change default colors: gpu_color=RRGGBB
alpha Set the opacity of all text and frametime graph 0.0-1.0
background_alpha Set the opacity of the background 0.0-1.0
read_cfg Add to MANGOHUD_CONFIG as first parameter to also load config file. Otherwise only MANGOHUD_CONFIG parameters are used.
output_folder Set location of the output files (Required for logging)
log_duration Set amount of time the logging will run for (in seconds)
Set vsync for OpenGL or Vulkan
media_player Show media player metadata
media_player_name Force media player DBus service name without the org.mpris.MediaPlayer2 part, like spotify, vlc, audacious or cantata. If none is set, MangoHud tries to switch between currently playing players.
media_player_format Format media player metadata. Add extra text etc. Semi-colon breaks to new line. Defaults to {title};{artist};{album}.
font_scale_media_player Change size of media player text relative to font_size
Show non-cached IO read/write, in MiB/s
pci_dev Select GPU device in multi-gpu setups
version Shows current mangohud version
fps_limit Limit the apps framerate. Comma-separated list of one or more FPS values. 0 means unlimited.
toggle_fps_limit Cycle between FPS limits. Defaults to Shift_L+F1.
arch Show if the application is 32 or 64 bit
histogram Change fps graph to histogram
Override CPU and GPU text
log_interval Change the default log interval, 100 is default
vulkan_driver Displays used vulkan driver, radv/amdgpu-pro/amdvlk
gpu_name Displays GPU name from pci.ids
Display CPU/GPU draw in watts
engine_version Display OpenGL or vulkan and vulkan-based render engine's version
permit_upload Allow uploading of logs to
upload_log Change keybind for uploading log
benchmark_percentiles Configure which framerate percentiles are shown in the logging summary. Default is 97,AVG,1,0.1
wine Shows current Wine or Proton version in use
wine_color Change color of the wine/proton text
cpu_mhz Shows the CPUs current MHz
gpu_load_change Changes the color of the GPU load depending on load
gpu_load_color Set the colors for the gpu load change low,medium and high. e.g gpu_load_color=0000FF,00FFFF,FF00FF
gpu_load_value Set the values for medium and high load e.g gpu_load_value=50,90
cpu_load_change Changes the color of the CPU load depending on load
cpu_load_color Set the colors for the gpu load change low,medium and high. e.g cpu_load_color=0000FF,00FFFF,FF00FF
cpu_load_value Set the values for medium and high load e.g cpu_load_value=50,90
core_load_change Changes the colors of cpu core loads, uses the same data from cpu_load_value and cpu_load_change
cellpadding_y Set the vertical cellpadding, default is -0.085
frametime Display frametime next to fps text
frame_count Display frame count
table_columns Set the number of table columns for ImGui, defaults to 3
blacklist Add a program to the blacklist. e.g blacklist=vkcube,WatchDogs2.exe
resolution Display the current resolution
show_fps_limit Display the current fps limit
custom_text_center Display a custom text centered useful for a header e.g custom_text_center=FlightLessMango Benchmarks
custom_text Display a custom text e.g custom_text=Fsync enabled
exec Display output of bash command in next column, e.g custom_text=/home , exec=df -h /home | tail -n 1. Only works with legacy_layout=false
round_corners Change the amount of roundness of the corners have e.g round_corners=10.0
vkbasalt Shows if vkbasalt is on
gamemode Shows if gamemode is on
battery Display current battery percent and energy consumption
battery_icon Display battery icon instead of percent
battery_color Change the BATT text color
fps_only Show FPS only. Not meant to be used with other display params
gamepad_battery Display battey of wireless gamepads (xone,xpadneo,ds4)
gamepad_battery_icon Display gamepad battery percent with icon. *enabled by default
Example: MANGOHUD_CONFIG=cpu_temp,gpu_temp,position=top-right,height=500,font_size=32
Because comma is also used as option delimiter and needs to be escaped for values with a backslash, you can use + like MANGOHUD_CONFIG=fps_limit=60+30+0 instead.

Note: Width and Height are set automatically based on the font_size, but can be overridden.

Note: RAPL is currently used for Intel CPUs to show power draw with cpu_power which may be unreadable for non-root users due to vulnerability. The corresponding energy_uj file has to be readable by corresponding user, e.g. by running chmod o+r /sys/class/powercap/intel-rapl\:0/energy_uj as root, else the power shown will be 0 W, though having the file readable may potentially be a security vulnerability persisting until system reboots.


OpenGL Vsync

  • -1 = Adaptive sync
  • 0 = Off
  • 1 = On
  • n = Sync to refresh rate / n.

Vulkan Vsync

  • 0 = Adaptive VSync (FIFO_RELAXED_KHR)
  • 1 = Off (IMMEDIATE_KHR)
  • 2 = Mailbox (VSync with uncapped FPS) (MAILBOX_KHR)
  • 3 = On (FIFO_KHR)

All vulkan vsync options might not be supported on your device, you can check what your device supports here


  • Shift_L+F2 : Toggle Logging
  • Shift_L+F4 : Reload Config
  • Shift_R+F12: Toggle Hud


Options starting with "gl_*" are for OpenGL.

  • gl_size_query = viewport : Specify what to use for getting display size. Options are "viewport", "scissorbox" or disabled. Defaults to using glXQueryDrawable.
  • gl_bind_framebuffer = 0..N : (Re)bind given framebuffer before MangoHud gets drawn. Helps with Crusader Kings III.
  • gl_dont_flip = 1 : Don't swap origin if using GL_UPPER_LEFT. Helps with Ryujinx.

MangoHud FPS logging

You must set a valid path for output_folder in your configuration to store logs in.

When you toggle logging (using the keybind Shift_L+F2), a file is created with the game name plus a date & timestamp in your output_folder.

Log files can be uploaded to to create graphs automatically.

You can share the created page with others, just link it.

Multiple log files

It's possible to upload multiple files when using You can rename them to your preferred names and upload them in a batch. These filenames will be used as the legend in the graph.

Log uploading walkthrough