Read this first
2.0.0 is a full rewrite, not an update. volt is no longer a script that exports
environment variables, it is now a Vulkan implicit layer written in Rust that
rewrites the Vulkan calls a game makes.
Everything env var based is gone: the MangoHud, Gamescope, LSFG,
Proton/Wine, DXVK, VKD3D-Proton and GPU driver tabs, the OpenGL/Vulkan render
selector, and the generated volt shell script.
1.x profiles do not carry over. 1.x wrote .conf files; 2.0 uses one toml
per profile in ~/.config/volt-gui/. There is no import path, the settings
themselves no longer exist.
Remove 1.x before installing 2.0. 1.x installed into /usr/local/bin, 2.0
installs into /usr/bin, so neither uninstall target touches the other's
files. Use the next commands to remove 1.4.1:
sudo rm -f /usr/local/bin/volt /usr/local/bin/volt-gui /usr/local/bin/volt-helper
sudo rm -f /usr/share/applications/volt-gui.desktop
sudo update-desktop-database /usr/share/applications
Why the rewrite
The env var approach never held up. There is no standardization across Linux
driver stacks; a setting you can control on the NVIDIA proprietary driver often
has no equivalent on RADV, and the other way around. volt-gui ended up being a
front end for a maze of per driver variables that behaved differently depending
on what you happened to be running, even between versions of the same driver.
A Vulkan layer sits below all of that. It rewrites what the game asks Vulkan
for, so the same setting behaves the same way on RADV, ANV, NVK, AMDVLK and the
NVIDIA proprietary driver. Driver agnostic by construction.
2.0.0 Changes
- volt is now a Vulkan implicit layer (
VK_LAYER_VOLT_settings), written in
Rust, applied through thevoltlauncher. - 19 settings across 5 tabs: GPU selection, display and swapchain, texture
sampling, rendering toggles, and volt's own frame limiter. - Vulkan 1.0 is the floor and the ceiling. The layer requests nothing beyond
VK_KHR_swapchain, so old GPUs are covered and behaviour never splits between
drivers. - volt enables nothing. It reads what the game asked for at device creation
and applies a feature-gated setting only where the game itself enabled that
feature. It never adds an extension or sets a feature bit the game left clear. This is to avoid issues with weird driver paths, or the game itself. - Option lists are read from your hardware. Present modes, colour depths,
colour spaces, transfer functions, alpha modes, GPU names, mip levels and LOD
bias all come from a probe of your own device, not from a table baked into
volt-gui. A setting your device cannot do holds nothing butdefault. - Frame limiter with three wait methods (early, late, reactive) and four
pacing modes (sleep, sliced, precise, spin).lateis the equivalent of what
Reflex and Anti-Lag do here. - Dual-arch in one build:
makeproduces an x86_64 and an i686 layer served
by a single manifest, so 32-bit games under Steam, Wine and Proton are covered. - Rootless install, everything into
~/.local, for SteamOS,
Bazzite, Silverblue and anything else with a read only/usr. - Flatpak support via a runtime extension for
org.freedesktop.Platform23.08, 24.08 and 25.08. - Profiles and presets: one toml per configuration, switchable from the GUI,
the system tray, or the launch command. Presets run from Quality down to
Potato Low Latency. - Reproducible container builds (
make release-container) against
rust:1.85.1-bookworm, so the glibc floor is fixed regardless of your host.
Requirements
- Layer: Vulkan 1.0+ with
VK_KHR_swapchain, Linux x86_64 (and i686 for
32-bit games) - Probe:
vkgearsfrom mesa-demos, required at runtime, every
device-backed option list is read through it. Without it every such setting
holds nothing butdefaultand volt-gui says so on startup.
Native aarch64 builds are not provided; see the README for FEX-Emu / Box64.
Builds
- Built inside
rust:1.85.1-bookworm(Debian 12, glibc 2.36), so anything
newer works and anything older will not. x86_64 only. - The archive is a ready to install tree: unpack it, then
sudo make installormake install-userinstalls without compiling anything. - Flatpak extensions ship in the archive but are not installed by default:
make flatpak-install-user(orsudo make flatpak-install). - For more, read the README
or the Welcome window the program shows on first run.
Testing wanted
This has been tested on my own machines and my friends'. That is not a lot of
hardware. If a setting behaves oddly on your driver, run the game with
VOLT_LOG=info and open an issue with the output, that log names exactly what
the layer applied and what your device turned down.
Extras
About the icon, right now it is a scaled down screenshot of the program itself. That is a placeholder. I haven't found something I actually like yet and I want something unique for it, so it stays as is until I do. And no, I am not going to AI generate one, before anyone suggests it. If you are an artist and want to contribute one, open an issue :).
If you'd like to support my work in the FOSS community, you can do so by
contributing to any of my projects or by donating. Every contribution no matter
the amount is greatly appreciated and helps keep these tools alive, maintained,
and evolving.
That's all for now, thank you for using my projects! If you can, please consider
donating, and as always, GLHF!