# app.json

> Every field and its rule.

Every app has an `app.json` at the top of its folder. `$schema` is `https://0x1audio.com/schema/app/v1.json`; editors use it for autocomplete. Unknown fields are errors. `mixel check` applies these rules, and so do Mixel and the registry.

| Field | | Rule |
| --- | --- | --- |
| `$schema` | required | Always this URL. It says the file is app.json v1. |
| `name` | required | The app's id: lowercase letters, digits and dashes. Never changes. |
| `displayName` | required | The name people see. |
| `summary` | optional | One sentence about what the app does, for the catalog. |
| `version` | required | MAJOR.MINOR.PATCH. Raise it before each release. |
| `sdk` | required | The Mixel versions the app runs on, as a caret range like ^0.3. |
| `entry` | entry or page | The Python file with the app's @ox.action functions. |
| `page` | entry or page | An optional page, built by Vite. |
| `permissions` | optional | What the app may use, each with the reason the person reads. Binding: anything else is refused. |
| `accent` | optional | The app's colour, like #5b8cff. |
| `icon` | optional | A square .svg or .png inside the app. |
| `window` | optional | The size the app's window opens at, in pixels. |
| `tags` | optional | Up to 5 words for the catalog, like "convert". |
| `license` | optional | The app's licence, an SPDX identifier like "Apache-2.0". mixel new writes Apache-2.0; change it if you choose another. |

Window sizes in pixels: `width` 400–2560, `height` 320–1600, `minWidth` 400–2560, `minHeight` 320–1600. Reasons are 12 to 120 characters.
