Catalog contract · version 1

One game.
Distinct projects.

An original game can have a browser version, a native port and a fan recreation. The catalog gives each implementation its own identity, requirements and source links.

Stable references

project:<slug> identifies a community implementation. Original-game IDs group related implementations without merging their authors, hosts, files or compatibility. Keep project IDs when revising facts; a new implementation needs a new ID. IDs are portable across a future canonical-domain change.

The v1 JSON catalog keeps its existing fields and schemaVersion: 1. Additive fields may appear; consumers should ignore fields they do not use. dataRevision identifies normalized catalog content, not a publication date. reviewedThrough is the latest source-review date, not a claim that every game was tested then. counts summarizes the exported inventory, and evidencePolicy explains its limits.

A real project example

This example comes directly from the current Mitchell Hynes Web listing.

{
  "id": "project:halo-combat-evolved",
  "title": "Halo: Combat Evolved",
  "project": "Mitchell Hynes Web",
  "canonicalUrl": "https://playable.wtf/games/halo-combat-evolved/",
  "originals": [
    {
      "id": "halocombatevolved",
      "name": "Halo: Combat Evolved",
      "relationship": "port-of"
    }
  ],
  "availability": {
    "runtime": "browser",
    "delivery": "browser-launch",
    "status": "released",
    "route": {
      "kind": "play",
      "url": "https://mitchellhynes.com/halo/halo.html"
    }
  },
  "fileRequirement": "own-files",
  "files": {
    "answer": "Choose an XISO made from your own Xbox copy of Halo: Combat Evolved. The host says it does not provide game data.",
    "sourceUrl": "https://mitchellhynes.com/halo/halo.html"
  }
}

Field dictionary

FieldMeaning
idStable project identity, project:<slug>. Keep it when updating a listing; do not reuse it for a different implementation.
slugStable URL segment for the implementation. A future rename requires a retained redirect and identity mapping.
title, projectOriginal-game display title and the specific community implementation name. A shared title does not merge projects.
canonicalPath, canonicalUrlCanonical HTML reference. Absolute URLs follow the configured SITE_URL; portable IDs do not depend on a domain.
originals[]Original-game {id, name, relationship} tuples. IDs are catalog identifiers, not external authority IDs. One mashup can reference several originals.
aliases, kind, genreSearch aliases, project classification and editorial genre. Aliases do not assert ownership or equivalence.
summary, descriptionShort listing copy and version-specific description. Third-party names and quoted material retain their own rights.
editorialOptional long-form player guidance shared with the HTML and Markdown page. sections contain stable id, title, kind (background, project, practical or limitations), paragraphs and sourceIds; sources contain id, label and url. Background describes the original game, not automatic support in the listed project. Absent editorial is null; private review decisions are omitted. CSV remains a compact metadata table.
credits[]Named roles with url, basis and evidence; originalGameId associates original-developer credit with the correct game. An absent credit is unknown.
legacyAttributionCompatibility field: legacy creator name and URL with unspecified role. Prefer explicit credits; do not infer authorship.
availabilityruntime is browser, native or unknown. delivery is browser-launch, native-download, native-setup, source-build, unavailable or video. status is the recorded project status; route {kind, url} uses play, download, setup or project. A source build is not a playable browser release.
fileRequirementnone, own-files, demo-or-own-files, optional or unknown. none means no extra files stated, not a license to original assets.
capabilitiesmobile, controller, multiplayer, multiplayerLocal and multiplayerOnline values. Each has state, basis and a supporting fact key.
factsfiles, setup, devices, controls, multiplayer, issues, scope and saves. v1 retains null unknown answers. The public dataset omits empty facts.
facts.<key>answer, basis, sourceUrl, checkedAt, locator and steps in v1; the dataset keeps answer, basis, sourceUrl and steps. A check date is not publication or game release.
verificationsourceReview, reviewedAt, gameplayTested and gameplayTests. A brief recorded interaction never certifies a whole game or other devices.
indexablev1 eligibility flag for the HTML page. Thin entries remain in v1 for compatibility but stay out of the public dataset and readable exports.
sources[]Source evidence: label, url, checkedAt, scope, optional sourceUrl/revision/hash. These document provenance, not a license to copy the source.
discoveryOriginal intake provenance: catalogUrl, label, license, revision and sourceGeneratedAt. An upstream catalog license covers its scope only.
linkCheckDated request outcome and scope. A successful HTTP response does not establish gameplay, rights or compatibility.
releaseDocumented upstream tag, URL, publishedAt, checkedAt and artifactType when known. This is separate from a Playable editorial event.
socialSources[]Project-related post references and their recorded association. A post or video is not proof of a playable release.
searchTextDerived search text for v1 consumers; use structured identities and factual fields for meaning.

Original-game relationships

RelationshipMeaning
port-ofA port of the original game.
reimplementation-ofAn implementation of the original game using a different engine or code base.
inspired-byAn inspired project; do not assume original-game content or completeness.
mod-forA modification requiring its host game.
includes-mechanics-fromA mashup or recreation incorporating mechanics from this original.
associated-withA documented association without a more specific asserted relationship.

Unknowns and compatibility

A capability state is supported, limited, experimental, unsupported or unknown. Its basis is creator-reported, independently-tested or unknown. Missing evidence remains unknown. A creator’s documented feature does not become a Playable test result.

Download formats

The public dataset JSON is a separate versioned subset, containing source-reviewed public records. It omits internal check inventories, empty facts and media. Its guides array includes canonical references, real editorial dates and sources. A game’s families array links relevant version comparisons, their guides and reasoned project choices; a limited comparison link may carry an explicit exception without promoting that project to the dataset. Its rights object describes reuse scope without granting rights to third-party material.

The CSV download uses UTF-8, a header row, quoted fields and CRLF record endings. It flattens original IDs, names and relationships into parallel lists separated by | . Practical-answer columns hold text; blanks mean unknown. Formula-like values receive a leading apostrophe for safer spreadsheet import. Use JSON for lossless nested data.

Editorial changes

Feeds use stable editorial-event IDs, a target project or guide, a recorded publication or material-update date and a change summary. Source-review, HTTP-check and upstream-release dates remain separate. Existing undated listings do not receive an invented publication date.

Downloads, source attribution and reuse scope →