{
    "id": "game-tracker@beatlink",
    "name": "Game Tracker",
    "description": "A video game tracker for TriliumNext. Your whole library lives in one JSON note created under a library root you choose, so it is a single note you can back up, inspect, or hand-edit. Pick any note as the Library Root and the addon wires it up for you: it becomes a render note showing the tracker, and switching roots reverts the old one. Metadata comes from an ordered list of seven sources -- IGDB, RAWG, Steam, GOG, Lutris, SteamGridDB, and TheGamesDB -- merged FIELD BY FIELD rather than picked one at a time: the first source supplying a value wins that field, and anything it leaves empty falls through to the next, so one game can carry IGDB's platforms, SteamGridDB's cover, and Steam's summary. Reordering changes precedence and untick disables. Three sources (Steam, GOG, Lutris) need no API key at all, so the tracker works with zero setup even where Twitch's two-factor requirement makes IGDB unobtainable. The chain stops as soon as every field is filled, so sources placed lower are only consulted for genuine gaps -- which is how the quota-limited TheGamesDB stays cheap at the end of the order. Each source records which fields it supplied, so provenance is visible per game. The composite is used everywhere metadata is read, not just on import: the library refresh re-merges every enabled source rather than only the first, and the details page is composed the same way -- addressing each source by its own recorded id, the Steam appid, or the title -- so a game with no IGDB id, including a Steam-only or file-imported one, opens and refreshes exactly like any other. Steam is a one-way import source for owned games and playtime, read but never written to; on IGDB, Steam appids are resolved in bulk through the external_games index so a whole library matches in a handful of requests. A library file can also be imported directly: an IGDB GDPR data export, or any CSV/JSON list of games. Because such files carry only titles, every row is matched by name and the result is previewed -- matched, unmatched, and already-tracked counts, with the provider's own spelling shown -- before anything is written. Statuses are fully user-defined -- add, rename, recolour, reorder, or remove them on the Statuses tab. Each status carries a role (backlog / playing / done / abandoned / none) and imports target the role rather than the name, so renaming Beaten to Finished, or adding a Wishlist alongside Backlog, never breaks an import. A game stores a status id, so renaming one touches no data, and removing a status leaves every game still holding it untouched rather than silently reclassifying it. Imports are additive and idempotent: games are keyed by their strongest known id and matched on any shared id so every source converges on one entry, playtime never moves backwards, and your own ratings and status are never overwritten unless you opt in. Nothing is ever marked Beaten by a Steam import -- playtime cannot tell whether a game was finished, so that stays your call. Each import reads the database once and writes once, so it cannot half-apply. Modelled on media-tracker@beatlink, which tracks films and TV.",
    "author": "BeatLink",
    "homepage": "https://github.com/BeatLink/trilium-scripts/tree/main/addons/game-tracker@beatlink",
    "license": "GPL-3.0-or-later",
    "latestVersion": "1.4.0",
    "type": "widget",
    "readme": "README.md",
    "manifestSourceUrl": "https://beatlink.github.io/trilium-scripts/game-tracker@beatlink/_tam_manifest_.json",
    "manifest": {
        "settingsNote": "settings-page",
        "notes": [
            {
                "id": "launcher",
                "title": "game-tracker@beatlink",
                "type": "render",
                "mime": "text/html",
                "sourceUrl": null
            },
            {
                "id": "view",
                "title": "gameTracker.jsx",
                "type": "code",
                "mime": "text/jsx",
                "sourceUrl": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/b053fc798f431665831d2f7cb02d9197da958d0b/addons/game-tracker@beatlink/gameTracker.jsx",
                "sha": "fd818fddcdb7c62df418f1be92c26ffc106546586b024a64b0c6096acc8858a5",
                "sourceId": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/refs/heads/main/addons/game-tracker@beatlink/gameTracker.jsx"
            },
            {
                "id": "style",
                "title": "gameTracker.css",
                "type": "code",
                "mime": "text/css",
                "sourceUrl": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/b053fc798f431665831d2f7cb02d9197da958d0b/addons/game-tracker@beatlink/gameTracker.css",
                "sha": "7cc71d204f993908909a73ae56cc5e7e8c71f35c2f342cc47777ac84bce59f17",
                "sourceId": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/refs/heads/main/addons/game-tracker@beatlink/gameTracker.css"
            },
            {
                "id": "settings-page",
                "title": "Settings",
                "type": "render",
                "mime": "text/html",
                "sourceUrl": null
            },
            {
                "id": "settings",
                "title": "settings.jsx",
                "type": "code",
                "mime": "text/jsx",
                "sourceUrl": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/b053fc798f431665831d2f7cb02d9197da958d0b/addons/game-tracker@beatlink/settings.jsx",
                "sha": "123c11d162943ff1032b3dabfe3d919cbe979a696ffa2d374f95843a92f4fa20",
                "sourceId": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/refs/heads/main/addons/game-tracker@beatlink/settings.jsx"
            },
            {
                "id": "schema",
                "title": "schema.json",
                "type": "code",
                "mime": "application/json",
                "sourceUrl": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/b053fc798f431665831d2f7cb02d9197da958d0b/addons/game-tracker@beatlink/schema.json",
                "sha": "ee222581a0102a4b3ecbae01a73a18121cd37ed1a9247501f62726d53315b4af",
                "sourceId": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/refs/heads/main/addons/game-tracker@beatlink/schema.json"
            },
            {
                "id": "defaults",
                "title": "defaults.json",
                "type": "code",
                "mime": "application/json",
                "sourceUrl": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/b053fc798f431665831d2f7cb02d9197da958d0b/addons/game-tracker@beatlink/defaults.json",
                "sha": "a04b440836cc1d10d6a283c2ac253d6f39cc6ffad81ff0ab15cb14bc6b277be4",
                "sourceId": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/refs/heads/main/addons/game-tracker@beatlink/defaults.json"
            },
            {
                "id": "config",
                "title": "config.json",
                "type": "code",
                "mime": "application/json",
                "sourceUrl": null
            },
            {
                "id": "backend",
                "title": "gameTrackerBackend.js",
                "type": "code",
                "mime": "application/javascript;env=backend",
                "sourceUrl": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/b053fc798f431665831d2f7cb02d9197da958d0b/addons/game-tracker@beatlink/gameTrackerBackend.js",
                "sha": "e782a36c576a869b11abfeb5cb388fe0cd3bf5a0f0d6296ecc95bd87dddb408a",
                "sourceId": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/refs/heads/main/addons/game-tracker@beatlink/gameTrackerBackend.js"
            },
            {
                "id": "autosync",
                "title": "autoSync.js",
                "type": "code",
                "mime": "application/javascript;env=backend",
                "sourceUrl": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/b053fc798f431665831d2f7cb02d9197da958d0b/addons/game-tracker@beatlink/autoSync.js",
                "sha": "ffd04f1ca01442fe6d4a5f15870fbeaef4541dd5ec4aaf3cbafdecbf04164985",
                "sourceId": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/refs/heads/main/addons/game-tracker@beatlink/autoSync.js"
            },
            {
                "id": "lib-tracker",
                "title": "libGameTracker.js",
                "type": "code",
                "mime": "application/javascript;env=backend",
                "sourceUrl": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/b053fc798f431665831d2f7cb02d9197da958d0b/addons/game-tracker@beatlink/libGameTracker.js",
                "sha": "212322533c0a886c89c2029a3a8dedb122b3e66ec3f3fa0f6d9e694c3a2d2538",
                "sourceId": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/refs/heads/main/addons/game-tracker@beatlink/libGameTracker.js"
            },
            {
                "id": "readme",
                "title": "README.md",
                "type": "code",
                "mime": "text/markdown",
                "sourceUrl": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/b053fc798f431665831d2f7cb02d9197da958d0b/addons/game-tracker@beatlink/README.md",
                "renderAsHTML": true,
                "sha": "785f9599e4b4f5b2f7b2dbbdb112a7ed85db1d5f5c23363ecfd428fc3ba4c88f",
                "sourceId": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/refs/heads/main/addons/game-tracker@beatlink/README.md"
            },
            {
                "id": "libsettings-backend",
                "title": "libSettings.js",
                "type": "code",
                "mime": "application/javascript;env=backend",
                "sourceUrl": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/b053fc798f431665831d2f7cb02d9197da958d0b/libs/libsettings/libsettings-backend.js",
                "sha": "3c4b119a6d3ec639f1172763670484186755d8d71c544e64b09f118d3edca909",
                "sourceId": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/refs/heads/main/libs/libsettings/libsettings-backend.js"
            },
            {
                "id": "libsettings-core",
                "title": "libSettingsCore.js",
                "type": "code",
                "mime": "application/javascript;env=frontend",
                "sourceUrl": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/b053fc798f431665831d2f7cb02d9197da958d0b/libs/libsettings/libsettings-core.js",
                "sha": "6fb4ffee0a776ef38a6646ccbc21dc276614f9ea02d61f1f4f9f877e94b0c586",
                "sourceId": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/refs/heads/main/libs/libsettings/libsettings-core.js"
            },
            {
                "id": "libsettings-ui",
                "title": "libSettingsUI.jsx",
                "type": "code",
                "mime": "text/jsx",
                "sourceUrl": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/b053fc798f431665831d2f7cb02d9197da958d0b/libs/libsettings/libsettings-ui.jsx",
                "sha": "66d4adead5e0447deba7f5cfa2a1573680ece1af619c53eb7241036122fce1a6",
                "sourceId": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/refs/heads/main/libs/libsettings/libsettings-ui.jsx"
            },
            {
                "id": "libsettings-style",
                "title": "libSettingsUI.css",
                "type": "code",
                "mime": "text/css",
                "sourceUrl": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/b053fc798f431665831d2f7cb02d9197da958d0b/libs/libsettings/libsettings-ui.css",
                "sha": "43a6d3eba0af6f5e197064c7d0054a2ad725cd553c112f3b7427cd4830f2a75f",
                "sourceId": "https://raw.githubusercontent.com/BeatLink/trilium-scripts/refs/heads/main/libs/libsettings/libsettings-ui.css"
            }
        ],
        "children": [
            {
                "parent": "root",
                "child": "launcher"
            },
            {
                "parent": "launcher",
                "child": "view"
            },
            {
                "parent": "view",
                "child": "style"
            },
            {
                "parent": "view",
                "child": "libsettings-ui"
            },
            {
                "parent": "launcher",
                "child": "settings-page"
            },
            {
                "parent": "settings-page",
                "child": "settings"
            },
            {
                "parent": "settings",
                "child": "libsettings-ui"
            },
            {
                "parent": "launcher",
                "child": "schema"
            },
            {
                "parent": "launcher",
                "child": "defaults"
            },
            {
                "parent": "persistence",
                "child": "config"
            },
            {
                "parent": "launcher",
                "child": "backend"
            },
            {
                "parent": "backend",
                "child": "libsettings-backend"
            },
            {
                "parent": "backend",
                "child": "lib-tracker"
            },
            {
                "parent": "launcher",
                "child": "autosync"
            },
            {
                "parent": "autosync",
                "child": "libsettings-backend"
            },
            {
                "parent": "autosync",
                "child": "backend"
            },
            {
                "parent": "libsettings-ui",
                "child": "libsettings-core"
            },
            {
                "parent": "libsettings-ui",
                "child": "libsettings-style"
            },
            {
                "parent": "launcher",
                "child": "readme"
            }
        ],
        "relations": [
            {
                "from": "settings",
                "type": "configNote",
                "to": "config"
            },
            {
                "from": "settings",
                "type": "schemaNote",
                "to": "schema"
            },
            {
                "from": "view",
                "type": "schemaNote",
                "to": "schema"
            },
            {
                "from": "view",
                "type": "settingsNote",
                "to": "settings"
            },
            {
                "from": "backend",
                "type": "schemaNote",
                "to": "schema"
            },
            {
                "from": "backend",
                "type": "settingsNote",
                "to": "settings"
            },
            {
                "from": "launcher",
                "type": "renderNote",
                "to": "view"
            },
            {
                "from": "settings-page",
                "type": "renderNote",
                "to": "settings"
            },
            {
                "from": "view",
                "type": "settingsPageNote",
                "to": "settings-page"
            },
            {
                "from": "settings",
                "type": "trackerPageNote",
                "to": "launcher"
            },
            {
                "from": "config",
                "type": "sourceConfig",
                "to": "defaults"
            }
        ],
        "labels": [
            {
                "note": "backend",
                "name": "customRequestHandler",
                "value": "gameTracker"
            },
            {
                "note": "autosync",
                "name": "run",
                "value": "hourly"
            },
            {
                "note": "autosync",
                "name": "iconClass",
                "value": "bx bx-sync"
            },
            {
                "note": "settings",
                "name": "gameTrackerConfig",
                "value": ""
            },
            {
                "note": "view",
                "name": "gameTrackerRender",
                "value": ""
            },
            {
                "note": "style",
                "name": "appCss",
                "value": ""
            },
            {
                "note": "libsettings-style",
                "name": "appCss",
                "value": ""
            },
            {
                "note": "launcher",
                "name": "iconClass",
                "value": "bx bx-joystick"
            },
            {
                "note": "view",
                "name": "iconClass",
                "value": "bx bx-joystick"
            },
            {
                "note": "backend",
                "name": "iconClass",
                "value": "bx bx-joystick"
            },
            {
                "note": "lib-tracker",
                "name": "iconClass",
                "value": "bx bx-joystick"
            },
            {
                "note": "schema",
                "name": "iconClass",
                "value": "bx bx-joystick"
            },
            {
                "note": "config",
                "name": "iconClass",
                "value": "bx bx-joystick"
            },
            {
                "note": "settings-page",
                "name": "iconClass",
                "value": "bx bx-cog"
            },
            {
                "note": "readme",
                "name": "iconClass",
                "value": "bx bx-joystick"
            }
        ],
        "readmeNote": "readme",
        "settings": {
            "schema": "schema",
            "defaults": "defaults",
            "config": "config"
        }
    },
    "contentHash": "f4c95028fd4a892ee16b6f12b4955112e4b642ad9d23c84ca8be916f258e346b"
}
