index.html at the top of its files needs no recipe at all: leave it out and Patch fills in the rest.
It’s plain JSON in snake_case. Its JSON Schema is at https://patch.gg/schemas/recipe/v1.json, and POST /recipes/validate checks one without creating a release.
Examples
Kind
You don’t set a kind. Patch reads it from the recipe’smode and from whether it lists a companion game, meaning another game it needs on the player’s PC:
Trust tier
You don’t set this either. Patch works it out from the recipe and your files, shows it on the game page, and the API returns it astrust_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
Every field is optional; what you leave out takes the default shown.Games
An
installed or workshop release has exactly one host game. A browser game has none.
Components
A component names part of your files: one file, a folder ending in/, or "" for every file. Every file you upload belongs to at least one component.
A browser game’s files are uploaded as they are, never as a zip, and
launch.entry is a path inside its component.
Paths
Paths on the player’s PC start with one of these folders:
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.
Tests
Patch Desktop tests a browser game on its creator’s PC before it goes live: it plays it as players get it and records it. If the recipe liststest.checks, the game reports each one while it’s tested: Patch opens it with ?patch-test=1, and the game logs one console line per check, pass level-loads or fail level-loads: the map didn't load. A run counts only when every check passed.
Validation
Patch checks the recipe and the file list when you create a release. Each problem comes back as an error code with the details:Versions of the format
This is version 1 of the recipe (schema_version: 1). New optional fields can be added to it; anything that would break an existing recipe becomes version 2.