Breaking Changes & Migration
- #236 Introduced support for multiple game versions -> Existing game rows are migrated automatically.
- Deprecated top-level game version fields (
version,file_path,size,release_date,early_access,type) in favor of the newgame_versiontable. -> If you rely on these fields, update your clients to use the new version structure before migrating. - Duplicate handling now merges files with the same title into one game entity more consistently (year-tagged files merge by matching release year, untagged files merge into a no-year bucket first). -> If you previously relied on same-title duplicates as separate game entries, rename titles explicitly (e.g. with square brackets) to keep them separate.
Changes
- Updated automatic Web UI version selection: if no compatible stable release is found, the backend now falls back to the nearest newer stable release before falling back to
unstable. - Added regex-based indexing exclusion filters:
GAMES_SEARCH_EXCLUDE_FILE_REGEXandGAMES_SEARCH_EXCLUDE_DIR_REGEX. - Fixed reindex crashes for games with corrupted internal metadata mappings (for example
gamevaultbeing stored as a provider mapping). Reindex now skips those invalid entries and automatically cleans them up on the next merge/reindex. - Added a persistent server UUID, generated on first startup and exposed via the status API, allowing clients to recognize the same server across different URLs.
- The media endpoint (
/api/media/:id) now serves with long-lived HTTP caching (Cache-Control: immutable) and supports conditional requests (ETag/Last-Modified, returning304), so clients can reuse covers/art without re-downloading them. - Production JSON responses are no longer pretty-printed, reducing payload sizes.