Structured key-value data stored alongside a page, not inside it. Changing a key never creates a page revision — it updates one row and writes one audit event.
What you get
- Values are any JSON:
0.92, true, ["a","b"], {"due":"2026-08-01"}.
- Merge-patch writes: send only the keys you’re changing.
set upserts (JSON null deletes)
append extends arrays atomically
appendUnique skips duplicates so re-run agents are idempotent
- Per-key audit trail: who set what, when, with previous values.
- Queryable:
eq, neq, exists, missing, gt/gte/lt/lte (numbers and ISO-date strings), contains (array membership), AND-ed together, with orderBy ranking.
- Discoverable:
GET /search/metadata/keys lists the key namespace with usage counts so writers converge on existing keys.
Patch example
Query example
Full details and design rationale live in the repo at specs/PAGE-METADATA.md.