// OPENBOX DOCS

Installation

Install OpenBoxGL on Linux with AppImage, Flatpak, or source, or on Windows with the signed portable installer.

OpenBoxGL runs on Linux and, since 1.13.0, natively on Windows. On Linux the AppImage is the recommended path with Python 3.10+ for source installs: it bundles its own Python runtime, so you never depend on system Python versions or library packages. On Windows the signed portable installer is the supported path; it is covered in full on the Windows page.

There is no OpenBox account, installer wizard, or license key. Downloading a release or cloning the repository is the entire installation.

Decide which package to use

PackageBest forUpdates
AppImageDesktop, Steam Deck, handhelds, immutable systemsBuilt-in verified updater
FlatpakSandboxed installs from a manifestYour normal Flatpak workflow
SourceDevelopment, testing, or patchinggit pull and re-run
System installInstalling to /usr/local from sourcesudo make install again
Windows portableWindows 10 and 11, x86_64Built-in verified updater

The fastest path on Linux is the versioned release installer: download the tag-pinned script, inspect it, then run it. It selects the matching AppImage, pins the release public key, verifies its SHA-256 checksum and Ed25519 signature, and installs it to ~/.local/bin.

On Windows, download the release's install.ps1, inspect it, and run it: it verifies the same key pin, checksum, and signature before extracting the portable install to %LOCALAPPDATA%\OpenBox, registering the Start Menu shortcut and the openbox:// handler, and adding the launchers to your user PATH. The full walkthrough is on the Windows page.

Only the AppImage and the Windows portable install receive the built-in updater. Flatpak, source, and system installs follow their own package or source workflow; see Updating.

Prerequisites

Before you install, confirm your system meets the baseline:

RequirementAppImageFlatpakSourceWindows
Linux desktop (X11 or Wayland)YesYesYesNot applicable
Windows 10 or 11, x86_64Not applicableNot applicableNot applicableYes
WebKitGTK for the native windowBundledBundledRequired (libwebkit2gtk-4.1)Not used
WebView2 runtime for the native windowNot usedNot usedNot usedRequired for the native window — bundled on Windows 11 and most Windows 10 systems; falls back to a browser window without it
PythonBundledBundled3.10+3.10+ (python.exe or py.exe on PATH)
flatpak + flatpak-builderNot neededRequiredNot neededNot needed
gitNot neededNot neededRequiredNot needed
FUSE (to mount AppImages)RequiredNot neededNot neededNot applicable
bubblewrap bwrapOptional (plugins sandboxed when present)Bundled checkOptional (plugins sandboxed when present)Not applicable
Visual Studio Build Tools (C++ workload)Not neededNot neededNot neededOnly to build the native host

AppImage

The AppImage is a single executable file that bundles OpenBoxGL, Python, and its dependencies. It does not need to be "installed" system-wide and works on immutable images like SteamOS and Bazzite.

Versioned release installer

Download the installer from a specific signed release, inspect it, then run it. The installer verifies the release public-key pin, SHA-256 checksum, and Ed25519 signature before installing to ~/.local/bin:

VERSION=1.15.0
curl --proto '=https' --tlsv1.2 --fail --location \
  --output install.sh \
  "https://github.com/vindeckyy/OpenBoxGL/releases/download/v${VERSION}/install.sh"
less install.sh
OPENBOX_RELEASE_TAG="v${VERSION}" bash install.sh

The installer needs curl, python3, openssl, and sha256sum on PATH: it verifies the release public-key pin, the SHA-256 checksum, and the Ed25519 signature before installing to ~/.local/bin.

To launch OpenBox right after installing, pass --run after the tag-pinned invocation:

OPENBOX_RELEASE_TAG="v${VERSION}" bash install.sh --run

Omit OPENBOX_RELEASE_TAG only when you intentionally want the latest stable release. Install to a different directory with OPENBOX_INSTALL_DIR (e.g. OPENBOX_INSTALL_DIR="$HOME/Applications").

The installer detects x86_64 or aarch64 from uname -m. Packaging and emulation environments can select one explicitly with OPENBOX_ARCH=x86_64 or OPENBOX_ARCH=aarch64.

Manual download

  1. Download the latest release from GitHub Releases. Release artifacts are built for both x86_64 and aarch64; pick the one matching your CPU (uname -m).
  2. Make it executable. Downloads are not executable by default, and a non-executable AppImage reports "Permission denied" when you try to run it:
chmod +x OpenBox-$(uname -m).AppImage
  1. Run it:
./OpenBox-$(uname -m).AppImage

The first launch starts the local server, writes the per-launch token files into the data directory, and opens the native WebKitGTK window. If WebKitGTK is missing, the launcher prints an install hint and falls back to a chrome-less app window (then your default browser).

Use --web to force the loopback web UI in a browser instead of the native window:

./OpenBox-x86_64.AppImage --web

Flatpak

Install the published bundle, or build from the project's manifest with flatpak-builder:

flatpak install --bundle OpenBox-x86_64.flatpak
flatpak run io.openbox.GameLauncher
git clone https://github.com/vindeckyy/OpenBoxGL.git
cd OpenBoxGL
flatpak-builder --user --install --force-clean build-dir io.openbox.GameLauncher.yml
flatpak run io.openbox.GameLauncher

Download OpenBox-x86_64.flatpak from the release page for the bundle install.

  • The manifest (the native-host and openbox modules) uses the GNOME Flatpak runtime (org.gnome.Platform 49) and grants --filesystem=home, so Steam, Heroic, Lutris, and ROM folders under your home directory are readable.
  • The Flatpak is not updated by OpenBoxGL's built-in updater (it only understands the AppImage). Update by rebuilding the manifest or using the Flatpak workflow you already have for local builds.
  • Flatpak builds install the same openbox and openbox-native launchers; flatpak run io.openbox.GameLauncher --web starts the loopback web UI in a browser.

Source / system

Source installs are the fastest way to run the current code, and they need the least tooling:

git clone https://github.com/vindeckyy/OpenBoxGL.git
cd OpenBoxGL
python3 web_app.py

Requirements: Python 3.10 or newer on a Linux system with standard desktop tooling. No third-party Python packages are required; the application uses the standard library.

python3 web_app.py starts the loopback web UI in a browser. To run the native WebKitGTK window from source, build the host and launch it with make native-host && ./openbox-native.sh.

For a system install under /usr/local (override with PREFIX=...):

sudo make install
openbox     # Native window (default)
openbox --web  # Web UI (development)
sudo make uninstall  # removes everything the target placed

Windows

Windows 10 and 11 on x86_64 are supported since 1.13.0, through a signed portable install rather than an AppImage. Download the release's install.ps1 and run it; it resolves and pins the release public key, then verifies the archive's SHA-256 checksum and Ed25519 signature before extracting the runtime to %LOCALAPPDATA%\OpenBox\share\openbox:

$Version = '1.15.0'
Invoke-WebRequest -UseBasicParsing -OutFile install.ps1 `
  "https://github.com/vindeckyy/OpenBoxGL/releases/download/v$Version/install.ps1"
.\install.ps1 -Tag "v$Version"

Requirements are Windows PowerShell 5.1, which ships with Windows, and Python 3.10 or newer on PATH. The installer and the built-in updater verify signatures with the Python standard library, so neither curl nor OpenSSL is needed. The installer keeps the previous tree at share\openbox.previous, registers the Start Menu shortcut and the openbox:// protocol handler, and adds the runtime folder to your user PATH.

The openbox.cmd, openbox.ps1, and openbox-native.ps1 launchers mirror openbox and openbox-native on Linux: openbox opens the native WebView2 window once the host is built and the same UI in a browser app window otherwise, while openbox --web always uses the browser. Library data lives in %LOCALAPPDATA%\openbox-game-launcher.

The release publishes only the two installers, install.sh and install.ps1, as standalone assets — the uninstaller is not one of them. It ships inside the zip and inside the install tree, so you run it from scripts\uninstall.ps1 under your install directory (for a default install, %LOCALAPPDATA%\OpenBox\share\openbox\scripts\uninstall.ps1) with powershell -ExecutionPolicy Bypass -File; add -InstallDir for a non-default install, or -WhatIf to preview. It removes exactly what the installer created — the install tree and its rollback copy, the user PATH entry, the Start Menu shortcut, and the openbox:// registration — and never touches your library or settings. The Windows page covers installer options, the native host build, deeplinks, updating, the uninstaller, and Windows troubleshooting in full.

Making an app menu entry

Open Settings and choose Install desktop shortcut (the button appears when OpenBoxGL detects it is running from an AppImage). This writes a .desktop entry under ~/.local/share/applications pointing at the AppImage's current path. If you move the AppImage afterwards, re-run the install shortcut so the entry follows the new location. Desktop integrators such as Gear Lever also work.

On Windows the portable installer performs the equivalent step for you, writing OpenBox.lnk into your Start Menu programs folder and registering the openbox:// handler. If you move the install, re-register it from the install folder:

python -B updates.py install-desktop-entry .\openbox.cmd

Verify your install

  1. 1
    Run the entry point from a terminal. It should open the native window showing the three-column workspace.
  2. 2
    On first launch with an empty library, the Library Setup Center appears.
  3. 3
    Settings → About (or GET /api/settings with the token) reports the running version and whether it is an AppImage.
  4. 4
    Your data directory (~/.local/share/openbox-game-launcher unless OPENBOX_DATA_DIR is set) now contains library.json, server.token, and server.port.

Optional local configuration

OpenBoxGL loads optional credentials and settings from .env files it discovers: an explicit OPENBOX_ENV_FILE path if set, the data directory and its parent, ~/.env, and ~/.config/openbox-game-launcher/.env. The current working directory is not searched. Each file must be an owner-only regular file (mode 0o600, no group or other permission bits) and not a symlink. A documented template ships as .env.example.

Secrets and tokens (RetroAchievements, EmuMovies, IGDB, GitHub) are read from these files or from the process environment. Put real secrets in ~/.env or ~/.config/openbox-game-launcher/.env only, never in the repository or in a tracked file.

See Configuration for the full environment contract.

Where installs keep state

All library data, media, backups, themes, and logs live in ~/.local/share/openbox-game-launcher (or the OPENBOX_DATA_DIR you set), never inside the AppImage file. Updating or deleting the AppImage does not touch your library.

The Windows portable install uses the same layout under %LOCALAPPDATA%\openbox-game-launcher; updating or deleting %LOCALAPPDATA%\OpenBox leaves the library untouched.

Troubleshooting

ProblemCause / fix
Permission denied on the AppImageThe file is not executable: chmod +x OpenBox-x86_64.AppImage.
AppImage will not mountThe FUSE 2 library is missing on the host. Install libfuse2 on Debian/Ubuntu (libfuse2t64 on Ubuntu 24.04+), fuse-libs on Fedora, or fuse2 on Arch — or run the AppImage with --appimage-extract-and-run to skip FUSE entirely.
Window does not openRun from a terminal and read the printed error. In --web mode, open the printed http://127.0.0.1:PORT/?token=... URL yourself.
Source: python3: command not found or ModuleNotFoundErrorPython 3.10+ is required and must be python3. On some distros install python3 and use python3 web_app.py.
Flatpak can't read Steam/ROMsKeep folders under your home directory; the manifest grants --filesystem=home.
Windows: running scripts is disabled on this systemRun the script with powershell -ExecutionPolicy Bypass -File .\install.ps1 -Tag v1.15.0, or set your execution policy for your user. See Windows.
Library looks empty after installCheck OPENBOX_DATA_DIR, the server reads a different directory than the one you edited. It must be in the process environment at launch.

More at Troubleshooting startup and browser.

After installation

Your first launch creates the data directory with an empty library. The window shows the Library Setup Center when the library is empty; it walks you through a guided preview-before-commit scan, emulator readiness checks, metadata match review, and initial preferences.