Schema specification

If you want to write a scraper that emits Native Game DB-compatible JSON, this page is the contract. The authoritative machine-readable definition lives at schema/game.schema.json (JSON Schema Draft 2020-12).

File layout

One JSON file per game, stored at:

data/games/{platform}/{id}.json

The id field inside the file must equal the file name without the .json extension. The platform field must equal the directory name.

Top-level fields

FieldTypeRequiredDescription
idstringyesSlug, lowercase ASCII with hyphens. Matches the file name.
platformstring (enum)yesPlatform identifier. See the home page for the current list.
categorystring (enum)nomain_game (default), dlc, expansion, bundle, remake, remaster, port, compilation.
first_release_datestringnoISO 8601 date or partial date (YYYY, YYYY-MM, YYYY-MM-DD).
titlesarrayyesAt least one entry. See below.
descriptionsarraynoMultilingual descriptions, see below.
developersstring[]noDeveloper slugs.
publishersstring[]noPublisher slugs.
genresstring[]noGenre slugs.
external_idsobjectnoCross-references to other databases.

Title objects (the core)

Every entry in titles[] has these fields:

FieldTypeRequiredDescription
textstringyesThe title as it appears.
langstringyesISO 639-1 language code: ja, en, ko, zh, es, fr, de, it, etc.
scriptstring (enum)yesISO 15924 script code. See the table below.
regionstringnoISO 3166-1 alpha-2 country code, lowercase.
formstring (enum)noofficial, boxart, ingame_logo, manual, romaji_transliteration, alternate.
sourcestring (enum)nowikidata, igdb, mobygames, screenscraper, no_intro, community, manual.
verifiedbooleannoWhether the entry has been confirmed against a primary source.

The script field (ISO 15924)

This is what makes Native Game DB different from every other game DB. The language tag ja alone cannot tell katakana-only titles apart from kanji-mixed titles, but in retro game metadata that distinction often matters. The valid values are:

CodeMeaningExample
JpanJapanese with kanji and kana mixed星のカービィ
HiraJapanese, hiragana onlyくにおくん
KanaJapanese, katakana onlyスーパーマリオブラザーズ
HangKorean hangul별의 커비
HansChinese, simplified星之卡比
HantChinese, traditional星之卡比
LatnLatin scriptKirby's Dream Land
CyrlCyrillicКирби
Arab, Hebr, ThaiArabic, Hebrew, Thai
ZyyyUndeterminedUse as last resort.

Description objects

Each entry in descriptions[] has text (string), lang (ISO 639-1), and an optional source (same enum as titles).

External IDs

external_ids is an object mapping a source name to its identifier. Recognized keys:

Example

{
  "id": "hoshi-no-kirby",
  "platform": "gb",
  "category": "main_game",
  "first_release_date": "1992-04-27",
  "titles": [
    {
      "text": "星のカービィ",
      "lang": "ja",
      "script": "Jpan",
      "region": "jp",
      "form": "boxart",
      "source": "wikidata",
      "verified": true
    },
    {
      "text": "Kirby's Dream Land",
      "lang": "en",
      "script": "Latn",
      "region": "us",
      "form": "official",
      "source": "wikidata",
      "verified": true
    }
  ],
  "developers": ["hal-laboratory"],
  "publishers": ["nintendo"],
  "genres": ["platformer"],
  "external_ids": {
    "wikidata": "Q1064715",
    "igdb": 1083
  }
}

API endpoints

The static API mirrors the on-disk layout:

Everything is cache-friendly static JSON. There is no rate limiting and no authentication.