Configure all store connections through the Settings page in Backlogia. Each store section includes step-by-step instructions for obtaining the required credentials.
| Store | Credential Source |
|---|---|
| Steam | Steam Web API for API key |
| IGDB | Twitch Developer Console (IGDB uses Twitch auth) |
| Epic Games | OAuth flow in Settings page |
| GOG | Reads from local GOG Galaxy database OR uses bookmarklet import (instructions in Settings) |
| itch.io | itch.io API Keys |
| Humble Bundle | Session cookie from browser (instructions in Settings) |
| Battle.net | Session cookie from browser (instructions in Settings) |
| Amazon | OAuth flow in Settings page |
| EA | Bearer token via bookmarklet (instructions in Settings) |
| Xbox / Game Pass | XSTS token via bookmarklet or browser DevTools (instructions in Settings). Game Pass catalog syncs without authentication. |
| Ubisoft | Bookmarklet import from account.ubisoft.com (instructions in Settings) |
| Local Folder | Configure paths in .env file (see Local Games below) |
Import games from local folders on your machine. Each subfolder is treated as a game and matched to IGDB for metadata.
-
Add your game folder paths to
.env(up to 5 by default):LOCAL_GAMES_DIR_1=/path/to/games LOCAL_GAMES_DIR_2=/mnt/storage/more-games # Add more in docker-compose.yml if you need more than 5 -
Restart the container (paths are mounted automatically):
docker compose down && docker compose up -d -
Click "Sync Local" in Settings to import games
/path/to/games/
├── The Witcher 3/ → Imported as "The Witcher 3"
├── DOOM 2016/ → Imported as "DOOM 2016"
└── Hollow Knight/ → Imported as "Hollow Knight"
For better IGDB matching or custom names, create a game.json file inside any game folder:
{
"name": "The Witcher 3: Wild Hunt",
"igdb_id": 1942
}All fields are optional:
| Field | Description |
|---|---|
name |
Override the game name (used for display and IGDB matching) |
igdb_id |
Manually specify the IGDB game ID for exact matching |
description |
Custom description |
developers |
Array of developer names, e.g. ["CD Projekt Red"] |
genres |
Array of genres, e.g. ["RPG", "Action"] |
release_date |
Release date in ISO format, e.g. "2015-05-19" |
cover_image |
URL to a custom cover image |
Example game.json:
{
"name": "DOOM (2016)",
"igdb_id": 7351,
"developers": ["id Software"],
"genres": ["FPS", "Action"]
}After syncing local games, run "Sync Missing Metadata" to fetch cover images, ratings, and other data from IGDB.
You can manually override two metadata fields on any game, directly from the UI. These overrides are never overwritten by store syncs or IGDB sync.
Replaces the store/IGDB-provided genres with a custom list.
- Library view: click the pencil icon (✏) on any game card, or select multiple games and click "Edit Metadata" in the action bar
- Game detail page: click "Edit Metadata" next to the "+ Add to Collection" button
- Type to search and add tags; existing genres are suggested via autocomplete
- Leave the field empty to reset to the original store/IGDB genres
Assigns an explicit playtime status to a game, independently of the numeric hours reported by stores.
Available labels:
| Label | Meaning | Auto-derived from hours when no label is set |
|---|---|---|
Not played |
Never launched | playtime_hours is 0 or missing |
Just tried |
A few minutes to 2 hours | 0 < hours ≤ 2 |
Played |
Played for a while | 2 < hours ≤ 20 |
Heavily played |
Many hours logged | hours > 20 |
Abandoned |
Started but gave up | (explicit only) |
The label can be set via the same edit modal as genres. When no explicit label is set, the game detail page derives and displays a label from the raw playtime_hours value.