{ "$schema": "https://json-schema.org/draft/2020-12/schema", "title": "PS5 React app", "type": "object", "required": [ "titleId", "contentId", "name", "version", "timeoutSeconds" ], "properties": { "$schema": { "type": "string" }, "titleId": { "type": "string", "pattern": "^PPSA[0-9]{5}$", "description": "Unique homebrew title ID; do not reuse an installed application ID." }, "contentId": { "type": "string", "pattern": "^[A-Z]{2}[0-9]{4}-PPSA[0-9]{5}_00-[A-Z0-9]{16}$" }, "name": { "type": "string", "minLength": 1, "maxLength": 80 }, "version": { "type": "string", "pattern": "^[0-9]{2}\\.[0-9]{3}\\.[0-9]{3}$" }, "timeoutSeconds": { "type": "integer", "minimum": 0, "maximum": 3600, "description": "Seconds after first frame until closure; 0 disables the timeout." }, "render": { "type": "object", "required": [ "width", "height" ], "properties": { "width": { "type": "integer", "minimum": 1, "maximum": 3840 }, "height": { "type": "integer", "minimum": 1, "maximum": 3840 } }, "additionalProperties": false }, "surface": { "type": "object", "required": [ "width", "height" ], "properties": { "width": { "type": "integer", "minimum": 1, "maximum": 3840 }, "height": { "type": "integer", "minimum": 1, "maximum": 3840 } }, "additionalProperties": false }, "refreshRate": { "enum": [ 60, 120 ], "default": 60, "description": "Display refresh in Hz. 120 needs a display with 120 Hz input; others stay at 60." }, "refreshRates": { "type": "array", "items": { "enum": [ 60, 120 ] }, "uniqueItems": true, "minItems": 1, "description": "Rates Display.setRefreshRate may switch to while the app runs; must include refreshRate. Defaults to refreshRate alone." }, "resolution": { "const": "auto", "description": "Instead of render and surface: build 1920x1080 and 3840x2160 layouts and pick the one matching the console's output at launch (1440p uses 3840x2160)." }, "filesystemAccess": { "type": "string", "enum": [ "sandbox", "console" ], "default": "sandbox", "description": "console packages the pinned Lapy helper and requests filesystem access at startup; requires local elfldr on port 9021 or resident Lapy." }, "networking": { "type": "boolean", "default": false, "description": "Enable native HTTP and large-file downloads; PS5 requires filesystemAccess: console. Desktop networking is available independently." }, "resources": { "type": "array", "maxItems": 16, "uniqueItems": true, "items": { "type": "string", "minLength": 1 }, "description": "Relative files or directories copied read-only into the application folder. No symlinks, traversal or package-infrastructure paths." }, "textFonts": { "type": "array", "uniqueItems": true, "items": { "enum": [ "chinese", "japanese", "devanagari", "bengali", "arabic" ] }, "description": "Scripts whose subset Noto font is packaged in fonts/ and shaped and rasterized at runtime when text needs it: chinese (GB 2312), japanese (JIS X 0208), devanagari (Hindi), bengali, arabic (Arabic and Urdu). See docs/TEXT.md." }, "video": { "type": "boolean", "default": false, "description": "Plays video with