Skip to content

About

Unofficial community-maintained Linux build of Nexus Mods’ Vortex with Wine/Proton compatibility patches suite.

Topics

Resources

Stars

30 stars

Watchers

0 watching

Forks

Repository files navigation

Vortex for Linux

Build status

The folder Skyrim reads through Proton, C:\users\steamuser\Documents\My Games\Skyrim Special Edition, turns into the folder Vortex for Linux writes to: ~/.local/share/Steam/steamapps/compatdata/489830/pfx/drive_c/users/steamuser/Documents/My Games/Skyrim Special Edition

Vortex is the mod manager from Nexus Mods, used for Skyrim, Fallout, Starfield, Baldur's Gate 3 and a few hundred other games. It's an Electron app, so it technically starts on Linux. But the usual workaround is running Vortex itself inside a Wine prefix, which is slow, fragile and annoying to set up.

This repo does the other thing: it patches Vortex to actually understand Linux, and builds it as a native app.

What it does

  • Finds native and Flatpak Steam libraries and selects the active game’s Proton prefix
  • Maps Documents / AppData into the right prefix, so mods and saves land where the game actually looks
  • Discovers Epic, GOG and Amazon games in native and Flatpak Heroic installations
  • Launches games through Steam or Heroic
  • Experimental: recognises Windows games installed through Lutris or Bottles, deploys into their prefix and launches them through the launcher
  • Runs Windows modding tools in the game’s Wine/Proton prefix, including calls made by extensions
  • Reads and writes Windows INI files while preserving encoding, comments and hardlinks
  • Builds Bethesda plugin management with native Linux LOOT
  • Deploys and purges hardlinked mods without leaving stale files behind
  • Resolves Windows path casing consistently and keeps staging files safe when external changes are detected

These are general Linux fixes, not per-game hacks. Game-specific Vortex extensions can still carry their own Windows-only assumptions, so some games may still need fixes.

What runs where

Part Runs as
Vortex itself: UI, downloads, installers, deployment native Linux process
Game discovery and launch through Steam, Heroic, Lutris, Bottles native, through each launcher
Mod deployment, INI edits, LOOT sorting, FOMOD installers native
Windows-only modding tools such as xEdit or BodySlide the game's own Wine or Proton prefix
Windows .NET runtimes those tools need bundled, loaded through Wine
Vortex's few Windows-only helpers, and tools run with no game selected a separate Wine prefix under ~/.local/share/vortex-linux

Upstream is catching up 🎉

Vortex itself is slowly becoming more Linux-friendly. Since 2.7.1, the extension API's util.epicGamesLauncher is a shim over GameStoreHelper instead of undefined everywhere except Windows, so our Epic API fallback patch is gone 🎊.

2.9.0 goes further: Vortex now builds LOOT on Linux itself, with a libloot made for Linux, so we no longer compile libloot from source and our LOOT patch shrank to fixing file name casing and the Proton folder. Reading game versions from .exe files is plain TypeScript now too, so it works the same on every platform.

2.10.0 brings three Linux fixes of its own: Vortex finds the drive a folder sits on, so moving the staging folder and the folder it suggests work across mounted drives (#24375), it accepts installer instructions that separate folders with backslashes (#24378), and the "Handle Mod Manager Download buttons" setting (nxm:// links) is no longer greyed out on Linux (#24387). The first one made two of our patches smaller.

Every fix that lands upstream is one less patch to carry here, and the goal is for this repo to shrink.

Install

Grab the latest release. What changed in each release is in CHANGELOG.md.

Arch

sha256sum --check vortex-linux-*.pkg.tar.zst.sha256
sudo pacman -U ./vortex-linux-*.pkg.tar.zst

Debian and Ubuntu

For Ubuntu 24.04 or newer and Debian 13 or newer:

sha256sum --check vortex-linux_*_amd64.deb.sha256
sudo apt install ./vortex-linux_*_amd64.deb

apt pulls in Wine and the libraries Vortex needs, and Vortex shows up in your app menu. Like the AppImage, the package brings its own Linux .NET runtime and the Windows .NET runtimes modding tools need. To update, install the newer .deb the same way.

Debian 12 and Ubuntu 22.04 are too old: the FOMOD installer Vortex ships needs glibc 2.38, so apt refuses the package there. The AppImage needs the same.

Fedora and openSUSE

For Fedora 43 or newer, openSUSE Leap 16 and Tumbleweed:

sha256sum --check vortex-linux-*-x86_64.rpm.sha256
sudo dnf install ./vortex-linux-*-x86_64.rpm                          # Fedora
sudo zypper install --allow-unsigned-rpm ./vortex-linux-*-x86_64.rpm  # openSUSE

The package works like the Debian one: the package manager pulls in Wine and the libraries, and the .NET runtimes come with it. It isn't signed, which is why zypper needs --allow-unsigned-rpm; the checksum is how you verify the download.

Everything else (AppImage)

Install Wine from your package manager first, then:

sha256sum --check Vortex-*.AppImage.sha256
chmod +x Vortex-*.AppImage
./Vortex-*.AppImage

The AppImage bundles the Linux .NET 9 runtime Vortex probes for at startup, plus the Windows .NET runtimes modding tools need, so you don't need .NET installed system-wide. Wine you do need.

No FUSE 2 on your system? Run it as:

./Vortex-*.AppImage --appimage-extract-and-run

AppImages don't add themselves to your app menu; Gear Lever or AppImageLauncher handle that. For Nexus Mods download links, turn on "Handle Nexus Links" in Vortex: the AppImage then registers itself as the nxm:// handler and keeps pointing at wherever the AppImage file is. This uses xdg-settings from xdg-utils, which desktop distributions ship with their browsers.

The AppImage embeds AppImageUpdate information pointing at this repository's latest release, so Gear Lever, AppImageLauncher and appimageupdatetool can check for and apply updates in place. Vortex also shows a notification when a newer Linux release is published; the older builds from recipes/ stay pinned and never update.

Before you add your first game

Launch the game once through Steam or Heroic. Proton and the game create their real config and save directories on that first run; if you point Vortex at a prefix that doesn't exist yet, nothing will line up.

Keep staging and the game on the same filesystem. Hardlinks can't cross filesystems. Vortex suggests a good folder under Settings → Mods. If you already have mods in an old staging folder, use Vortex's transfer flow. Don't move or delete it by hand.

The selected game determines which prefix Vortex uses. Steam’s per-game Proton selection takes precedence over its default selection. Heroic’s game settings select Wine, Proton or UMU; Flatpak tools run inside the Heroic Flatpak.

A game added by hand runs in Wine's default prefix, $WINEPREFIX or ~/.wine. For another prefix, edit the game on the Dashboard and set WINEPREFIX under Environment Variables. VORTEX_COMPAT_PREFIXES can list additional prefixes, separated by colons, for lookups without a selected game. If several prefixes match, Vortex reports the ambiguity instead of choosing by modification time.

If Heroic is an AppImage outside PATH, set HEROIC_BINARY to its executable. Launch it once before scanning for games. Linux-native Heroic games keep their native configuration paths.

Lutris and Bottles. Games that use Lutris' Wine runner work too. If Vortex doesn't find the game by itself, set its folder manually, as it appears inside the Lutris prefix (also when that folder is a symlink to another disk). Vortex recognises that it belongs to Lutris, uses the game's Lutris prefix, starts it through Lutris and runs tools with the Wine version selected for it in Lutris. Tools need a Wine build for now; games set to Proton in Lutris can be deployed to and launched, but not run tools. Set LUTRIS_BINARY if lutris isn't on PATH.

Bottles works the same way: set the game folder inside the bottle, or the folder of a program you added to a bottle. Vortex uses the bottle as the prefix, starts a program added in Bottles through bottles-cli, and runs tools with the bottle's runner. Bottles keeps bottles by name, so rename bottles that share a name. Flatpak Bottles only sees folders its sandbox allows. Set BOTTLES_CLI_BINARY if bottles-cli isn't on PATH. Both are new and lightly tested; please report what breaks.

The separate prefix for Vortex’s own helper processes still defaults to ${XDG_DATA_HOME:-$HOME/.local/share}/vortex-linux/wineprefix.

Building from source (Arch)

git clone https://github.com/Arkazzae/VortexLinux.git
cd vortex-linux
scripts/prepare-arch-build.sh
cd dist/arch-build
makepkg -si

The build pins Vortex to an exact upstream commit and downloads the source, Node dependencies, Electron and the Microsoft runtime files. First build is a big one.

Older Vortex versions

We support 1.16.9 and 2.6.2 for collections that need an older Vortex, alongside the latest release. Need another version? Open an issue and tell us which version your collection needs.

To build one, fork this repo and run Actions → Build a selected Vortex version, then download the files from the completed run. Or build locally:

python3 scripts/build-version.py --version 2.6.2

You'll find the files in dist/versions/2.6.2/artifacts/.

How it's tested

Every change goes through the same pipeline before it can become a release:

  1. The patches apply. CI checks out the pinned Vortex commit and applies every patch in order.
  2. The tests pass. It runs the tests that ship with the patches, typechecks the renderer, and builds and tests the native LOOT binding.
  3. Every package builds. The Arch package is built in a clean Arch container, and the AppImage, .deb and .rpm are built from that package.
  4. Every package starts. The AppImage in a clean Ubuntu 24.04 container, the .deb on Ubuntu 24.04, Ubuntu 26.04 and Debian 13, the .rpm on Fedora 43 and 44, openSUSE Leap 16 and Tumbleweed. Each container has no system .NET; the packages are installed with only their own dependencies, and their libraries are checked against the distribution. Then the bundled checks run (the .NET probe, the Windows .NET runtimes through Wine, a FOMOD install, LOOT sorting, INI writes, prefix selection, Heroic discovery, tool arguments, hardlink purge), Vortex boots under Xvfb, the main page has to render and Vortex has to find .NET from inside the app. The packages must also uninstall cleanly.

Run it yourself

scripts/test-package.sh dist/Vortex-*.AppImage              # the AppImage check
scripts/test-package.sh dist/vortex-linux-*.rpm fedora:44    # a package on one distribution
scripts/check-upstream-compatibility.sh --ref latest --keep  # patches against the newest Vortex
scripts/run-upstream-tests.sh /path/to/patched-vortex        # the test suite

--ref pinned checks the patches against the pinned version instead, and --keep keeps the prepared source for the test suite.

Something broken?

Open an issue with the game, the store, where it's installed, how to reproduce it, and the relevant chunk of ~/.config/Vortex/vortex.log. Scrub your Nexus tokens and private download links out of the log first.

Thanks

Most of what got fixed here started as somebody's bug report. The people behind those reports and pull requests are listed in THANKS.md.

License

The build files and Linux patches here are GPL-3.0-only. Vortex itself stays under the upstream Nexus Mods license. See LICENSE.

About

Unofficial community-maintained Linux build of Nexus Mods’ Vortex with Wine/Proton compatibility patches suite.

Topics

Resources

Stars

30 stars

Watchers

0 watching

Forks

Releases

Packages

Used by

Contributors

Languages