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:

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.