recomp.board

.recomp.json

A small file at the root of a recomp, source port or decomp repository that says what the project is: which game, from which release, how far along, who to talk to. The project writes it once. Any site, launcher or list can read it, and nobody has to guess from a README.

Version 1, draft. Read today by recomp.board. JSON Schema: recomp.fyi/schema/v1.json. Comments and proposals: open an issue.

Why a file in the repository

Lists of recomps, source ports and decomps are built by reading repositories from the outside, and they get titles, platforms and statuses wrong. Whoever can commit to a repository wrote this file, so it outranks any listing made about the project by someone else. There is nothing to register and no account to create: the file is read from wherever the code lives (GitHub, GitLab, Codeberg, Gitea, Forgejo, a server of your own).

The file

Named .recomp.json, at the root of the repository’s default branch, UTF-8 JSON, one object. Every field is optional: a field left out means the project has not said, never “none”. A list needs game, system and type to add a project it doesn’t know yet. A repository that holds several games describes the first in .recomp.json and each other one in its own file, .recomp-2.json up to .recomp-9.json, with the same fields.

The file follows the project. When the status changes (playable, released, paused), or a maintainer joins or leaves, edit the file: every list that reads it updates. A stale file is worse than none, since it says something with the project’s own authority.

{
  "$schema": "https://recomp.fyi/schema/v1.json",
  "game": "Wave Race 64",
  "wikidata": "Q3142278",
  "system": "N64",
  "type": "recomp",
  "original": { "region": "USA", "revision": "1.0" },
  "project": "Wave Race 64 Recompiled",
  "status": "playable",
  "targets": ["Windows", "Linux", "Steam Deck"],
  "toolchain": "N64recomp",
  "approach": "Static recompilation, RT64 renderer",
  "maintainers": [{ "name": "yourhandle", "link": "https://your-profile" }],
  "links": [{ "label": "Discord", "url": "https://discord.gg/..." }],
  "help": ["Audio timing", "Controller mapping on Linux"],
  "notes": "What works, what's next, what hurts."
}

With the $schema line, editors such as VS Code check the file and complete the field names as you type.

Fields

gameThe game’s title as it shipped.
wikidataThe game’s Wikidata item, Q followed by digits, from the address of its page on wikidata.org. Two lists can then agree on the game without comparing titles.
systemThe platform of the original binary the project works from (recompiled, decompiled, or ported from its decompiled source), not where the result runs: a PS3 re-release of a Neo Geo game is PS3. One name, or a list when the project works from several. For a port of source code its authors released, the platform that source was written for. Written as under Names.
type"recomp": static recompilation of the original binary; for a console whose processor a PC already has (PS4), the original code run as it is on a runtime written for the game (bbport and the ports built on it). "port": a source port, the game built natively from decompiled, disassembled or rewritten source code. An engine rewritten from the game’s file formats, with no decompiled code, is a "port" too. "decomp": source code rebuilt from the binary. A list, ["decomp", "recomp"] or ["decomp", "port"], when one repository delivers two of them. "port" was added on 2026-10-01; before that a native port built on a decompilation was written "recomp", and a reader may still meet such files.
originalThe release the project works from, the one a user must own: region, revision, serial (the product code on the disc, cartridge or box; for a release that has none, such as a download-only title, the platform’s title ID) and sha1 (of the file the project expects, so users can check their copy; for a disc with several tracks, the track the project identifies the disc by). All four optional. A list when several releases are supported.
projectThe project’s own name.
status
  • "exploring" feasibility, tooling, no promises yet.
  • "in-progress" actively being worked on.
  • "playable" runs start to finish, rough edges remain.
  • "released" a public build, still maintained.
  • "complete" finished: a decomp whose source fully rebuilds the original, or a recomp or source port with no further work planned.
  • "paused" on hold. Better said than left to silence.
targetsWhere the project’s build runs, a list: a computer, a browser, a console. Written as under Names.
toolchainThe recompiler or decomp toolkit the project is built on; for a source port, the engine or layer it is built on. The decompilation a source port starts from is not a toolchain: type already says the port is built from one, and its address belongs in links. One name, or a list when the project is built on several. The list was added on 2026-10-02; before that the field held one name.
approachThe method in one line.
startedOptional. When the work began, "YYYY-MM-DD". Only needed when the repository is younger than the project, for example a fresh public history cut from a private one: the board then shows this date as Started instead of the date the repository was created. Added on 2026-10-29.
maintainersA list of { "name": "…", "link": "https://…" }, the link optional.
linksA list of { "label": "…", "url": "https://…" }: devlog, Discord, forum thread.
helpShort phrases, one per thing the project would welcome a hand with.
tagsShort words.
notesFree text: what works, what is next.
x-…Any field starting with x- is an extension for one reader or tool. Others ignore it.

Release tags, commit dates and download counts are not in the file: the repository host already says them, and a copy would go stale.

Names

system and targets are free text, so a platform nobody listed can still be named. For the platforms below, use these spellings: two files that mean the same machine then say it the same way. A console in targets takes its system name. A reader should still expect other spellings ("PlayStation", "Nintendo 64") and read them as the same platform.

system"Xbox Series" "Xbox 360" "Xbox One" "Xbox" "PS5" "PS4" "PS3" "PS2" "PSP" "PS Vita" "PS1" "Wii U" "Wii" "GameCube" "N64" "Switch 2" "Switch" "SNES" "GBA" "GBC" "GB" "NDS" "3DS" "Virtual Boy" "NES" "Master System" "Game Gear" "Sega CD" "3DO" "Atari Lynx" "Atari Jaguar" "N-Gage" "CD-i" "32X" "Saturn" "Dreamcast" "Genesis" "Neo Geo Pocket Color" "Neo Geo" "Arcade" "PC (DOS)" "PC (Windows)" "Mac" "Amiga" "Atari ST" "Commodore 64" "ZX Spectrum" "Amstrad CPC" "MSX" "MSX2" "PC-98"
targets"Windows" "Linux" "macOS" "Steam Deck" "Android" "iOS" "Switch" "Browser", or a console under its system name.

Never in the file

A game file, a ROM or disc image, or where to get one. The sha1 of original lets a user check a copy they own; it is not a way to find one. A reader may refuse a file that breaks this.

For sites and tools that read it

Versions

The $schema address names the version. Within version 1, changes only add optional fields or widen what a field accepts ("port" as a type, a list in toolchain), each dated in the table above. A change that would break a reader becomes version 2 at a new address, and schema/v1.json stays where it is.

Licence

This specification and schema/v1.json are under CC BY 4.0: use them, implement them, adapt them, and credit recomp.board. The board’s data keeps its own terms.