Skip to content

Manifest Reference

Every generated demo includes a pocketstack.manifest.json at its root. It describes the demo in a stable, machine-readable form: the generation mode, host requirements, readiness, and one entry per service with its adapter, copied assets, and config.

A custom website or the browser runtime reads the manifest to render the dashboard, warn about host requirements, and locate copied assets. The manifest is version 2 and always sets browserOnly: true.

Top-level fields

FieldTypeNotes
versionstringManifest schema version. Currently "2".
generatedAtstringRFC 3339 UTC timestamp of generation.
modestringGeneration mode reported by the analyzer.
browserOnlybooleanAlways true. No backend is involved at demo time.
composeFilestringPath to the Compose file the demo was generated from.
storageNamespacestringStable per-project namespace (e.g. ps-1a2b3c4d…) used by browser-database adapters for IndexedDB/storage keys.
readinessobjectBrowser-readiness summary (see readiness).
hostRequirementsobjectCross-origin isolation / network needs (see host requirements). Omitted when empty.
warningsstring[]Project-level warnings (COOP/COEP, network access, skipped profile services). Omitted when empty.
nextStepsstring[]Project-level conversion next steps. Omitted when empty.
servicesobject[]One service entry per generated service.

readiness

readiness mirrors the analyzer's readiness report:

FieldTypeNotes
statusstringready, partial, or blocked.
browserNativeServicesnumberCount of browser-native services.
totalServicesnumberCount of services considered.
scorenumberPercentage of services that are browser-native.
summarystringHuman-readable readiness summary.

INFO

A demo only generates when every service is browser-native, so a successful manifest reports a ready readiness. The same readiness fields appear in pocketstack analyze output before generation. See the readiness report.

host requirements

hostRequirements appears at both the top level (for the whole demo) and on each service. The header values live in hosting & headers.

FieldTypeNotes
crossOriginIsolationRequiredbooleantrue when a COOP/COEP-isolated context is required. Omitted when false.
networkAccessRequiredbooleantrue when the viewer's browser needs CDN/network access at demo time. Omitted when false.
headersobjectHeader name/value pairs the host must apply, when present. Omitted when empty.

Service fields

Each entry in services[] is a ManifestService:

FieldTypeNotes
namestringService name from Compose.
imagestringOriginal image reference. Omitted when empty.
adapterstringSelected adapter: static-web, frontend, mock-http, postgres-pglite, sqlite, or wasi. See the adapter matrix.
browserNativebooleantrue for every service in a generated demo.
publicPortnumberThe service's public port, when one applies. Omitted when zero.
browserPathstringPath to the service's entry document (e.g. a static site's index.html), when it has one. Omitted otherwise.
assetsobject[]Copied asset entries. Omitted when empty.
configobjectString key/value adapter config (e.g. projectPath, openapiPath, fixturesPath, initScripts, seedPath, storageNamespace). Omitted when empty.
warningsstring[]Service-level warnings. Omitted when empty.
hostRequirementsobjectPer-service host requirements. Omitted when empty.

TIP

config keys depend on the adapter. Database adapters (postgres-pglite, sqlite) also receive the demo-wide storageNamespace in their config. Treat config as an open string map keyed by adapter.

asset fields

Each entry in a service's assets[] is a ManifestAsset describing files copied under assets/<service>/:

FieldTypeNotes
namestringLogical asset name (e.g. static, project, module, openapi, fixtures, init, seed).
kindstringHow it was copied: file, directory, sql-directory, or json-directory.
pathstringRoot-relative path to the copied asset, e.g. assets/<service>/<target>.
filesstring[]For directory kinds, the list of copied files (relative paths). Omitted for single files.
targetstringDestination path relative to the service asset folder. Omitted when empty.

Example

A trimmed, realistic manifest for a two-service demo (a mock-http API and a postgres-pglite database):

json
{
  "version": "2",
  "generatedAt": "2026-06-28T10:15:00Z",
  "mode": "browser-only",
  "browserOnly": true,
  "composeFile": "compose.yaml",
  "storageNamespace": "ps-1a2b3c4d5e6f7081",
  "readiness": {
    "status": "ready",
    "browserNativeServices": 2,
    "totalServices": 2,
    "score": 100,
    "summary": "All services are browser-native."
  },
  "services": [
    {
      "name": "api",
      "image": "scratch",
      "adapter": "mock-http",
      "browserNative": true,
      "publicPort": 8080,
      "assets": [
        {
          "name": "openapi",
          "kind": "file",
          "path": "assets/api/openapi.yaml",
          "target": "openapi.yaml"
        },
        {
          "name": "fixtures",
          "kind": "json-directory",
          "path": "assets/api/fixtures",
          "files": ["users.json", "orders.json"],
          "target": "fixtures"
        }
      ],
      "config": {
        "openapiPath": "assets/api/openapi.yaml",
        "fixturesPath": "assets/api/fixtures"
      }
    },
    {
      "name": "db",
      "image": "postgres:16",
      "adapter": "postgres-pglite",
      "browserNative": true,
      "assets": [
        {
          "name": "init",
          "kind": "sql-directory",
          "path": "assets/db/init",
          "files": ["001-schema.sql", "002-seed.sql"],
          "target": "init"
        }
      ],
      "config": {
        "initPath": "assets/db/init",
        "storageNamespace": "ps-1a2b3c4d5e6f7081"
      }
    }
  ]
}

INFO

When a service requires cross-origin isolation, the same generation run also emits _headers, vercel.json, and staticwebapp.config.json next to the manifest. See hosting & headers.

Compose PR in. Static preview out—only when every service is browser-compatible.