Reference
Resource Manifest
The app metadata, runtime, resource, and release file contract.
For agents: Create
manifest.userland.jsonwithapp,runtime, and optionalresources. The CLI adds releasefileswhen publishing a directory.
Minimal Manifest
{
"app": { "name": "Recipe Box", "visibility": "public" },
"runtime": {
"static_root": "public",
"server_entry": "server/index.js",
"fallback": "server"
},
"resources": {}
}
Do not expose raw platform resource configuration in this manifest.
Top-level fields
appis required. It contains mutable display metadata and does not affect the app origin.runtimeis required. It tells Userland where static files live and whether dynamic requests go to a server module.resourcesis optional. It declares durable managed capabilities for the release.
When publishing with the CLI, manifest.userland.json does not include release files. The CLI reads the directory, builds the files array, infers content types, and sends a publish request to the API.
App
{
"name": "Recipe Box",
"summary": "A recipe CMS with a public site and admin editor.",
"visibility": "public",
"tags": ["recipes", "cms"]
}
nameis required and must be non-empty.summaryis optional text for humans and agents.visibilityispublicorprivate; v0 defaults topublic.tagsuse the same lowercase resource-name shape as other author-defined names.
Runtime
{
"static_root": "public",
"server_entry": "server/index.js",
"fallback": "server"
}
static_rootis required and must point to at least one release file.server_entryis required whenfallbackisserver; it must point to a release file.fallbackisserver,index.html, or404.- Paths are relative, slash-separated, and cannot use empty, dot, parent, or reserved
_userlandsegments.
Resources
{
"auth": { "mode": "app_users", "roles": ["admin", "editor"] },
"data": {
"collections": {
"posts": {
"fields": {
"title": "string",
"slug": "string",
"status": { "type": "enum", "values": ["draft", "published"] }
},
"indexes": [{ "name": "by_slug", "fields": ["slug"], "unique": true }],
"access": { "read": "public", "write": "role:editor" }
}
}
},
"secrets": { "required": ["OPENAI_API_KEY"] },
"jobs": { "send-digest": { "trigger": "manual", "max_attempts": 3 } },
"webhooks": {
"github": {
"provider": "github",
"secret": "GITHUB_WEBHOOK_SECRET",
"deliver_to": "server"
}
}
}
Use /schemas/resource-manifest-v0.schema.json as the machine-readable schema for manifest.userland.json.