There are two ways to configure Baklog. The recommended path is the Connections tab in the dashboard, which stores credentials in an encrypted per-profile store on your machine and requires no manual file editing. The legacy path is aDocumentation Index
Fetch the complete documentation index at: https://mintlify.com/Ogrods/BAKLOG/llms.txt
Use this file to discover all available pages before exploring further.
.env file in the project root — useful for headless setups or if you were using Baklog before the Connections UI existed. On the first python server.py start, any credentials found in .env are automatically imported once into the default profile’s encrypted store, and the file is archived as .env.imported. After that, the Connections tab is the source of truth.
The Connections tab
Open the Connections tab in the dashboard and click Connect next to each store. For stores that use browser-based sign-in (GOG, PSN, Epic, Battle.net, Ubisoft, Nintendo, Humble, EA, Xbox wishlist), Baklog opens a headed Chrome or Edge window for the OAuth or cookie flow. For API-key stores (Steam, itch.io, OpenXBL, ITAD), a form accepts the key directly. Credentials are stored incache/auth/secrets.bin — an AES-256-GCM encrypted document. The encryption key is held in your OS keyring:
| OS | Keyring backend |
|---|---|
| Windows | Windows Credential Manager (DPAPI) |
| macOS | macOS Keychain |
| Linux | Secret Service (e.g. GNOME Keyring, KWallet) |
| Any (fallback) | AES-GCM key written to cache/auth/.master_key when no keyring is available |
.master_key fallback is protected only by OS file permissions. Prefer a real keyring or set a master password from the Connections ⋮ menu.
Portable secrets bundle
The Connections ⋮ menu → Portable bundle… lets you export and import all credentials as a single encrypted file (baklog-secrets-<timestamp>.bundle). The bundle is always passphrase-encrypted (minimum 8 characters) with scrypt + AES-256-GCM, independently of the local keychain. Use it to move to a new machine or recover from a corrupted keychain.
Environment variables (.env)
If you prefer the file-based path or need a headless setup, copy.env.example to .env and fill in the values below. Variable names are case-sensitive.
Store credentials
These are imported automatically from.env on first server start.
Your Steam Web API key — a 32-character hex string. Get one at steamcommunity.com/dev/apikey (use
localhost as the domain).Your SteamID64 — a 17-digit number starting with
7656119. Look yours up at steamid.io.GOG session cookie (
gog-al). Copy it from browser DevTools → Application → Cookies while signed in at gog.com. Prefer the GOG (web) Connect card instead.PlayStation NPSSO token. Fetch it from
https://ca.account.sony.com/api/v1/ssocookie while signed in. Prefer the PlayStation Connect card instead.One-time Epic authorization code — not a cookie. Run
python fetch_epic.py --auth-help for the full flow. Prefer the Epic (library) Connect card instead.Epic storefront cookie string — used only by
fetch_epic_wishlist.py. Copy the full Cookie: header from a GraphQL request on the Epic wishlist page.Optional override for the Amazon Games launcher SQLite folder. Windows only. Default:
%LOCALAPPDATA%\Amazon Games\Data\Games\Sql. Leave unset to use the default path.IsThereAnyDeal free API key — used by
fetch_itad.py for deal prices and historical lows. Get one at isthereanydeal.com/dev/api/.ISO 3166-1 alpha-2 country code that sets deal prices and display currency for ITAD results. Example:
GB for British pounds.itch.io API key — used when the local
butler.db is absent. Generate one at itch.io/user/settings/api-keys.Full
Cookie: header value copied from a games-and-subs network request on account.battle.net. Recommended over the automatic cookie jar on Windows (Chrome/Edge v127+ app-bound encryption blocks jar reads). Use with --browser env.Browser whose cookie jar
fetch_battlenet.py reads. Options: edge, chrome, brave, firefox, env. Use env to skip the jar entirely and rely on BATTLENET_COOKIE above.Ubisoft
Authorization header value (starts with Ubi_v1 t=…). Copy from a public-ubi network request while signed in at ubisoft.com.Ubisoft
Ubi-SessionId UUID — from the same network request as UBISOFT_AUTH.Optional Ubisoft
Ubi-AppId override. Defaults to the ubisoft.com web app ID.Nintendo eShop
Cookie header from a ec.nintendo.com/my/transactions request while signed in.Server and app options
Set to
1 to serve the production frontend from dist/ (hashed assets, long-term cache headers). Requires npm ci && npm run build first. Omit or set to 0 for dev mode (raw ES modules, no npm required).Override the Chrome or Edge executable path used for browser-based Connect sign-in flows. Useful if Chrome is installed in a non-standard location.
Set the active profile ID for CLI fetchers run outside the server context. When unset, fetchers use the default profile.
Polar organization ID (Settings → General) for local Pro license-key activation via
POST /api/license/activate. Not needed when using hosted Supabase auth (the webhook sets the plan server-side).Auth options (invite-only Supabase)
Supabase project URL (e.g.
https://xxxx.supabase.co). Setting this enables invite-only login — Baklog will require a Supabase account before the dashboard loads.Supabase anon key for the project. Required alongside
BAKLOG_SUPABASE_URL.Optional legacy HS256 JWT secret. Omit if your Supabase project uses JWKS-only keys (the modern default).
Set to
1 to skip the Supabase auth gate entirely. Useful during local testing. Has no effect when BAKLOG_SUPABASE_URL is not set.Set to
1 to keep the local Work/Play profile switcher available while Supabase sign-in is active. Optional per-profile PINs gate switching; profile mutations require the in-app X-BAKLOG-Local header.Admin (local maintainers only)
Set to
1 to enable the local admin dashboard at /admin/ (free-claims editor and job runner). Local-only — never shipped to end users. Restart the server after changing this value.Production frontend build
Dev mode serves raw ES modules directly from the repo withCache-Control: no-store. No npm installation is required for dev mode. For a smaller, cacheable production bundle:
BAKLOG_SERVE_BUILT=1 before starting the server:
- PowerShell
- Bash
dist/ receive immutable long-term cache headers; index.html always stays no-store. If the version in dist/manifest.json does not match the running server version, a warning is printed at startup.
Server startup
Start the local server from the repo root:127.0.0.1:8765 only and is not reachable from other machines on your network by default. Then open http://localhost:8765 in your browser.
Windows shortcut: scripts\start-server.ps1 — the same venv launcher, picks .venv automatically.
server.py auto-selects .venv when it is present in the repo root.
System tray (optional)
Keep Baklog running in the background with a tray icon that offers Open, Restart, and Quit:.venv: