// 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
| Package | Best for | Updates |
|---|---|---|
| AppImage | Desktop, Steam Deck, handhelds, immutable systems | Built-in verified updater |
| Flatpak | Sandboxed installs from a manifest | Your normal Flatpak workflow |
| Source | Development, testing, or patching | git pull and re-run |
| System install | Installing to /usr/local from source | sudo make install again |
| Windows portable | Windows 10 and 11, x86_64 | Built-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:
| Requirement | AppImage | Flatpak | Source | Windows |
|---|---|---|---|---|
| Linux desktop (X11 or Wayland) | Yes | Yes | Yes | Not applicable |
| Windows 10 or 11, x86_64 | Not applicable | Not applicable | Not applicable | Yes |
| WebKitGTK for the native window | Bundled | Bundled | Required (libwebkit2gtk-4.1) | Not used |
| WebView2 runtime for the native window | Not used | Not used | Not used | Required for the native window — bundled on Windows 11 and most Windows 10 systems; falls back to a browser window without it |
| Python | Bundled | Bundled | 3.10+ | 3.10+ (python.exe or py.exe on PATH) |
flatpak + flatpak-builder | Not needed | Required | Not needed | Not needed |
git | Not needed | Not needed | Required | Not needed |
| FUSE (to mount AppImages) | Required | Not needed | Not needed | Not applicable |
bubblewrap bwrap | Optional (plugins sandboxed when present) | Bundled check | Optional (plugins sandboxed when present) | Not applicable |
| Visual Studio Build Tools (C++ workload) | Not needed | Not needed | Not needed | Only 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
- 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). - 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
- 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-hostandopenboxmodules) uses the GNOME Flatpak runtime (org.gnome.Platform49) 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
openboxandopenbox-nativelaunchers;flatpak run io.openbox.GameLauncher --webstarts 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
- 1Run the entry point from a terminal. It should open the native window showing the three-column workspace.
- 2On first launch with an empty library, the Library Setup Center appears.
- 3Settings → About (or
GET /api/settingswith the token) reports the running version and whether it is an AppImage. - 4Your data directory (
~/.local/share/openbox-game-launcherunlessOPENBOX_DATA_DIRis set) now containslibrary.json,server.token, andserver.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
| Problem | Cause / fix |
|---|---|
Permission denied on the AppImage | The file is not executable: chmod +x OpenBox-x86_64.AppImage. |
| AppImage will not mount | The 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 open | Run 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 ModuleNotFoundError | Python 3.10+ is required and must be python3. On some distros install python3 and use python3 web_app.py. |
| Flatpak can't read Steam/ROMs | Keep folders under your home directory; the manifest grants --filesystem=home. |
Windows: running scripts is disabled on this system | Run 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 install | Check 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.
- First-time setup: Getting started
- What the interfaces look like and where data lives: Interfaces and data
- Keeping an AppImage install current: Updating
- If something does not start: Troubleshooting