Repository navigation
OpenBox 2.1.0
OpenBox 2.1 is the release that makes the 2.0 contracts permanent: one public API, one native-host channel, one backup format to write, no library migration, and the temporary bridges 2.0 promised to remove are gone.
This is the release that clears the runway. There is one address for scripts, one format on disk, and one path through the code for every fix that comes next. Your library, settings, themes, plugins, and existing backups keep working exactly as they did. A 2.0 build can open a 2.1 library, and a 2.1 build opens a 2.0 library without migrating it.
The complete list is in CHANGELOG.md, and the code changes are in v2.0.0...v2.1.0.
Three things that change
1. Scripts get one address: /api/v2
/api/v1is gone. The routes are removed, andOPENBOX_ENABLE_V1_APIno longer brings them back. A v1 caller gets a410problem document that names the/api/v2replacement.- Unversioned
/api/*paths are no longer a second way in. They remain private implementation names used to build the/api/v2twins. Public calls to/api/library,/api/jobs, and the other base paths get the same410withcontext.usepointing at the replacement. - The native-host channel is
/api/host. The legacy names/api/launch,/api/shutdown, and/api/native/capabilitiesare removed. Native windows shipped with 2.0 or later already use/api/hostand keep working; a pre-2.0 host needs updating. - Retired paths still authenticate first. An unauthenticated caller receives
403, not a410that would leak which routes exist.
2. Backups get one format to write: format 2
- New backups write format 2 only. Every file carries its SHA-256, and a restore checks every hash before writing anything.
- Format 1 archives still restore, including archives written by 1.19 and the 2.0 compatibility export. New format 1 writes return
BACKUP_FORMAT_RETIRED. - Need a 1.19-readable archive? Create it with a 2.0.x build before upgrading. 2.1 can restore it, but cannot create it.
3. The UI gets one versioned path per asset
- Covers, theme CSS, theme sounds, RA badges, documents, platform videos, startup videos, and the reader all use
/api/v2. The unversioned request path is no longer a second entry point. - The jobs panel reads
/api/v2/jobslist and cursor rows. The 1.19 job-name map and its/api/jobsroute are gone.
What stays the same
| Contract | 2.0.0 | 2.1.0 |
|---|---|---|
| Public API | /api/v2 |
/api/v2 (same 358 paths / 387 operations) |
| Native host channel | /api/host |
/api/host (same 4 operations) |
| Library schema | 7 | 7 (no migration) |
| Backup format | Write 2, read 1 and 2 | Write 2, read 1 and 2 |
| Plugin API | 2, with the v1 adapter | 2, with the v1 adapter |
| Sync format | 3 | 3 |
A 2.0 build reads a 2.1 library because the schema and required fields did not change. A 2.1 build reads a 2.0 library without running a migration. There is no new library format, no settings rewrite, and no plugin migration in this release.
Upgrade in a minute
- Quit OpenBox.
- Install 2.1.0 over 2.0.0. The library opens as format 7; no migration runs.
- If a script calls
/api/v1, an unversioned/api/*path, or a legacy host name, move it to/api/v2or/api/host. The410response names the replacement. - If you may need a backup that a 1.19 install can read, create it on 2.0.x before upgrading.
The detailed walkthrough is in docs/upgrade-2.1.md.
Coming from 1.19
Upgrade to 2.0 first if you need the 1.19-compatible backup export. A direct 1.19 to 2.1 upgrade still migrates the library from schema 6 to 7, keeps library.v6.backup.json, and supports openbox --rollback-library --yes.
Breaking changes
| Change | What it means | How to keep working |
|---|---|---|
/api/v1 removed |
Scripts on v1 stop working; the environment bridge is gone | Move to /api/v2 |
Unversioned /api/* removed |
/api/library, /api/jobs, and other base paths return 410 |
Use the /api/v2 replacement in the error's context.use |
| Legacy host names removed | Pre-2.0 native windows are refused | Update the native host; 2.0+ hosts already use /api/host |
| Backup format 1 write removed | 2.1 cannot create a 1.19-readable archive | Create it on 2.0.x; format 1 reads still restore |
| Python 3.10 deprecated | Still works; removal is planned for 3.0 | Use Python 3.12 for source installs |
Every supported platform
- Linux x86_64 and aarch64 AppImages keep the glibc 2.35 floor and the signed zsync update path.
- Linux Flatpak moves to runtime 51.
libwebkit2gtk-4.1.so.0is present, and the full bundle build and install were verified in the 2.1 run. - Windows x86_64 and ARM64 zips ship with their native host; the installer and updater select the right build by CPU.
- macOS keeps the universal bundle. The 2.1 bundle is ad-hoc signed; notarization remains the next platform step and is only claimed with
spctlevidence.
Get OpenBox 2.1.0
| Platform | Download | Notes |
|---|---|---|
| Linux x86_64 | OpenBox-x86_64.AppImage |
glibc 2.35 floor; zsync available |
| Linux aarch64 | OpenBox-aarch64.AppImage |
glibc 2.35 floor; zsync available |
| Linux Flatpak | OpenBox-x86_64.flatpak |
x86_64 |
| Windows x86_64 | OpenBox-x86_64-windows.zip |
Includes the native host |
| Windows ARM64 | OpenBox-arm64-windows.zip |
Includes the ARM64 native host |
| macOS | OpenBox-macos.zip |
Universal; ad-hoc signed |
The macOS installer pins the release tag:
VERSION=2.1.0
curl --proto '=https' --tlsv1.2 --fail --location \
--output install-macos.sh \
"https://github.com/vindeckyy/OpenBoxGL/releases/download/v${VERSION}/install-macos.sh"
less install-macos.sh
OPENBOX_RELEASE_TAG="v${VERSION}" bash install-macos.shOn Windows, extract the release archive and run OpenBox\scripts\install.ps1. On Linux, use the AppImage, the Flatpak, or scripts/install.sh as before.
Also fixed in 2.1.0
- Deep-link readiness uses a real route.
openbox://dispatch probesGET /api/v2/versioninstead of a GET health path that did not exist, so an already-running server is detected and a second server is not started. - The media checksum toggle now does what it says. Settings > Library > Record media checksums controls manifest writes, integrity hashing, and repair.
python web_app.pyregisters every decorator-only route. The v2 version endpoint, the native host routes, and the rest of the decorated surface load correctly instead of importing a second copy ofweb_app.- Release notes and version surfaces agree.
release.shuses the polished notes, and the version-sync gate checks the release-notes heading and the docs index shipped-release line.
Known limits
- The macOS bundle is ad-hoc signed, so the first launch and each new build need the Privacy & Security confirmation.
- Linux-only features remain unavailable on Windows and macOS by design; they are hidden rather than broken.
- 1.19.x cannot read a format 7 library. Use
library.v6.backup.jsonandopenbox --rollback-libraryif you need to return to 1.19. - 2.1 cannot create a 1.19-compatible backup. Keep a 2.0.x build if you still need one.
- Python 3.10 works but is deprecated; removal is planned for 3.0.
- The formal library scale remains 20,000 games. 50,000 remains exploratory until the 3.0 storage decision.
The changelog lists the main areas, not every change.