App manifest
schemaVersion: 1
appId: 6f9619ff-8b86-4e6e-a62a-889950f42d3e
version: 2026.07.28-1
frontend:
directory: frontend
spa: true
runtime:
javascriptSdk:
version: 0.2.2
storage:
authorization: owner-prefix
migrations:
- id: 0001_create_items
file: migrations/0001_create_items.sql
functions:
- name: summarize
entrypoint: functions/summarize/index.ts
verifyJwt: true
cron:
- name: hourly-summary
schedule: "0 * * * *"
function: summarize
enabled: true
health:
path: /
requiredSecrets:
- AI_API_KEY
observability:
metrics:
- name: items_created
type: counter
unit: items
dimensions:
actor_type:
values: [member, admin]
- name: overdue_items
type: gauge
unit: itemsFields
| Field | Rules |
|---|---|
schemaVersion | Must be 1 |
appId | Assigned UUID; must match the deploy target |
version | Unique per deployment; 1–80 safe characters |
frontend.directory | Relative directory containing index.html |
frontend.spa | Enables index.html fallback |
runtime.javascriptSdk.version | Exact installed SDK version pinned to this deployment |
storage.authorization | app or owner-prefix; default app |
migrations | Ordered, append-only IDs and relative SQL files |
functions | Unique logical names, entrypoints, and JWT mode |
cron | Unique names, valid UTC schedules, declared Function targets |
health.path | Same-origin path beginning with / |
requiredSecrets | Names only; uppercase identifier format |
observability.metrics | Optional deployment-pinned counter/gauge catalog; at most 20 metrics |
Custom metric names use lowercase snake_case. A metric can declare at most three dimensions, and each dimension must list at most 20 allowed values. Arbitrary strings, IDs, emails, URLs, and object keys are not valid dimensions. Counters support non-negative increments; gauges record a current value.
Do not write migration checksums. The CLI computes SHA-256 values and emits the canonical opencloud.json inside the archive.
Use an exact SDK version, never latest or a range. The CLI resolves an omitted pin once while building a legacy author manifest, but new manifests should be explicit. Publishing a newer SDK does not change an existing deployment.
Only manifest-reachable files deploy. Reports, briefs, verifier specifications, and local tests remain outside the artifact.