Skip to main content
Every release has a patch.json at the root of its folder. Patch checks it when you publish, stores it with the release, and the desktop app follows it to install and launch your work. It’s plain JSON in snake_case. Start it with the $schema line below: editors like VS Code then autocomplete and check it as you type, and coding agents can read the exact shape.

Examples

Playing games in Patch’s own window is coming soon. You can already describe them in patch.json.

Kind

You don’t set a kind. Patch reads it from runs_in and from whether requires.games lists any game with the role source, meaning a game whose files your release uses:

Trust tier

You don’t set this either. Patch reads it from your install steps and shows it on the game page; the API returns it as trust_tier. Releases that run code on the player’s PC ask for their consent before the first Play. An archive counts as code until Patch’s checks have looked inside it.

Fields

Games

Each entry in requires.games names a game by its slug on Patch, such as hollow-knight. A release that runs in a host game lists exactly one game with the role host. A release that runs in Patch can only list source games.

Install steps

install is a list of steps that the desktop app runs in order. Every step can have a note of up to 500 characters saying why it’s there, which reviewers see. There are no script steps: a release can only do what these steps describe. That way Patch knows exactly what an install changes and can undo it, and reviewers can read it.

Paths

from paths are files in your release, relative to patch.json. Paths on the player’s PC start with one of these: No path can use ... Prefer {profile} wherever the game and its mod loader allow it: the game’s own folder stays untouched, and uninstalling just removes the profile.

Validation

Patch checks the manifest and the file list when you create a release. Each problem comes back as an error code with the details:

Versions of the schema

This is version 1 of patch.json. New optional fields can be added to it; anything that would break an existing patch.json becomes version 2 at a new $schema URL.