Manifest reference
All fields supported by picorunner.toml version 1. Nested fields use dotted names; [] identifies an array item. Unlisted fields are not accepted.
| Field | Type | Required | Rules and defaults |
|---|---|---|---|
schema | number | Required | Must equal: 1 |
name | string | Required | Minimum length: 1Maximum length: 120 |
runtime | object | Required | Additional fields: false |
runtime.kind | string | Required when parent is present | Allowed values: ["node","python"] |
runtime.version | string | Required when parent is present | Minimum length: 1Maximum length: 80 |
runtime.package_manager | string | Optional | Allowed values: ["npm","pnpm","yarn","uv"] |
runtime.workspace | string | Optional | Default: "."Minimum length: 1Must not match: {"pattern":"(^/|(^|/)\\.\\.(/|$))"} |
setup | object | Optional | Additional fields: false |
setup.steps | array | Optional | — |
setup.steps[].kind | string | Optional | Must equal: "dependencies" |
setup.steps[].run | array | Optional | Minimum items: 1Maximum items: 64 |
setup.steps[].run[] | string | Each item | Minimum length: 1Maximum length: 4096 |
setup.steps[].working_directory | string | Optional | Default: "."Minimum length: 1Must not match: {"pattern":"(^/|(^|/)\\.\\.(/|$))"} |
setup.steps[].locked | boolean | Optional | Default: false |
setup.steps[].when | string | Optional | Must equal: "install-or-update"Default: "install-or-update" |
setup.steps[] | object | Each item | Additional fields: falseExactly one rule must match: [{"required":["kind"],"not":{"required":["run"]}},{"required":["run"],"not":{"required":["kind"]}}] |
launch | object | Required | Additional fields: false |
launch.command | array | Required when parent is present | Minimum items: 1Maximum items: 64 |
launch.command[] | string | Each item | Minimum length: 1Maximum length: 4096 |
launch.working_directory | string | Optional | Default: "."Minimum length: 1Must not match: {"pattern":"(^/|(^|/)\\.\\.(/|$))"} |
launch.host | string | Optional | Must equal: "127.0.0.1"Default: "127.0.0.1" |
launch.host_env | string | Optional | Must match: "^[A-Z_][A-Z0-9_]{0,127}$" |
launch.port | integer | Required when parent is present | Minimum: 1Maximum: 65535 |
launch.port_env | string | Optional | Default: "PORT"Must match: "^[A-Z_][A-Z0-9_]{0,127}$" |
launch.environment | object | Optional | Additional fields: {"type":"string","maxLength":4096} |
health | object | Optional | Additional fields: false |
health.type | string | Required when parent is present | Allowed values: ["tcp","http"] |
health.path | string | Optional | Default: "/"Must match: "^/(?!/)" |
health.timeout_seconds | integer | Optional | Default: 90Minimum: 1Maximum: 3600 |
persistence | object | Optional | Additional fields: false |
persistence.paths | array | Optional | — |
persistence.paths[] | string | Each item | Minimum length: 1Must not match: {"pattern":"(^/|(^|/)\\.\\.(/|$))"} |
inputs | array | Optional | — |
inputs[].name | string | Required when parent is present | Must match: "^[A-Z_][A-Z0-9_]{0,127}$" |
inputs[].kind | string | Required when parent is present | Allowed values: ["configuration","secret"] |
inputs[].required | boolean | Optional | Default: false |
inputs[].description | string | Optional | Maximum length: 500 |
inputs[] | object | Each item | Additional fields: false |
picorunner-manifest-v1.json
{
"$schema": "https://json-schema.org/draft/2020-12/schema",
"$id": "https://picorunner.com/schemas/picorunner-manifest-v1.json",
"title": "PicoRunner manifest v1",
"type": "object",
"additionalProperties": false,
"required": [
"schema",
"name",
"runtime",
"launch"
],
"properties": {
"schema": {
"const": 1
},
"name": {
"type": "string",
"minLength": 1,
"maxLength": 120
},
"runtime": {
"type": "object",
"additionalProperties": false,
"required": [
"kind",
"version"
],
"properties": {
"kind": {
"enum": [
"node",
"python"
]
},
"version": {
"type": "string",
"minLength": 1,
"maxLength": 80
},
"package_manager": {
"enum": [
"npm",
"pnpm",
"yarn",
"uv"
]
},
"workspace": {
"$ref": "#/$defs/relativePath",
"default": "."
}
}
},
"setup": {
"type": "object",
"additionalProperties": false,
"properties": {
"steps": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"properties": {
"kind": {
"const": "dependencies"
},
"run": {
"$ref": "#/$defs/command"
},
"working_directory": {
"$ref": "#/$defs/relativePath",
"default": "."
},
"locked": {
"type": "boolean",
"default": false
},
"when": {
"const": "install-or-update",
"default": "install-or-update"
}
},
"oneOf": [
{
"required": [
"kind"
],
"not": {
"required": [
"run"
]
}
},
{
"required": [
"run"
],
"not": {
"required": [
"kind"
]
}
}
]
}
}
}
},
"launch": {
"type": "object",
"additionalProperties": false,
"required": [
"command",
"port"
],
"properties": {
"command": {
"$ref": "#/$defs/command"
},
"working_directory": {
"$ref": "#/$defs/relativePath",
"default": "."
},
"host": {
"const": "127.0.0.1",
"default": "127.0.0.1"
},
"host_env": {
"$ref": "#/$defs/environmentName"
},
"port": {
"type": "integer",
"minimum": 1,
"maximum": 65535
},
"port_env": {
"$ref": "#/$defs/environmentName",
"default": "PORT"
},
"environment": {
"type": "object",
"propertyNames": {
"$ref": "#/$defs/environmentName"
},
"additionalProperties": {
"type": "string",
"maxLength": 4096
}
}
}
},
"health": {
"type": "object",
"additionalProperties": false,
"required": [
"type"
],
"properties": {
"type": {
"enum": [
"tcp",
"http"
]
},
"path": {
"type": "string",
"pattern": "^/(?!/)",
"default": "/"
},
"timeout_seconds": {
"type": "integer",
"minimum": 1,
"maximum": 3600,
"default": 90
}
}
},
"persistence": {
"type": "object",
"additionalProperties": false,
"properties": {
"paths": {
"type": "array",
"uniqueItems": true,
"items": {
"$ref": "#/$defs/relativePath"
}
}
}
},
"inputs": {
"type": "array",
"items": {
"type": "object",
"additionalProperties": false,
"required": [
"name",
"kind"
],
"properties": {
"name": {
"$ref": "#/$defs/environmentName"
},
"kind": {
"enum": [
"configuration",
"secret"
]
},
"required": {
"type": "boolean",
"default": false
},
"description": {
"type": "string",
"maxLength": 500
}
}
}
}
},
"$defs": {
"command": {
"type": "array",
"minItems": 1,
"maxItems": 64,
"items": {
"type": "string",
"minLength": 1,
"maxLength": 4096
}
},
"environmentName": {
"type": "string",
"pattern": "^[A-Z_][A-Z0-9_]{0,127}$"
},
"relativePath": {
"type": "string",
"minLength": 1,
"not": {
"pattern": "(^/|(^|/)\\.\\.(/|$))"
}
}
}
}