FrameMenuCards frame.menu-cards@1
Generated at from
openvibe-contracts v0.419.0 and
openvibe-sdk v0.161.0.
- Version
- 1.0.0
- Owner
- network
- Visibility
- public
- Status
- active
- Compatibility
- backward
- Schema
https://openvibe.network/contracts/frame/menu-cards.v1.json
frame.menu-cards@1: the public file a site serves at /.well-known/openvibe-menu.json — an array of at most three frame.menu-card@1 cards from one site. Network fetches it every five minutes with a five-second timeout and a 64 KB cap, drops unknown fields and markup, and keeps the site's last good card for 30 minutes if the file fails. An empty array is valid and means the site publishes no card right now.
Fields
This schema has no named fields.
Examples
From the contract's own test fixtures: valid ones validate, rejected ones must fail.
Valid: empty
[]Valid: three
[
{
"id": "live-now",
"site": "live",
"title": "Live now",
"kind": "rail",
"items": [
{
"title": "Nova",
"meta": "12 watching",
"url": "https://openvibe.live/@nova"
}
],
"more": {
"label": "See all",
"url": "https://openvibe.live/live"
},
"updated_at": "2026-11-07T08:00:00Z",
"ttl_s": 30
},
{
"id": "new-worlds",
"site": "games",
"title": "New worlds",
"kind": "rows",
"items": [
{
"title": "Harbour Town",
"meta": "Built by 4 people",
"url": "https://openvibe.games/w/harbour-town"
}
],
"updated_at": "2026-11-07T07:58:00Z",
"ttl_s": 300
},
{
"id": "trending",
"site": "media-hub",
"title": "Trending",
"kind": "rows",
"items": [
{
"title": "Sunday market",
"meta": "2,100 views this week",
"url": "https://openvibe.video/watch/abc"
}
],
"updated_at": "2026-11-07T07:55:00Z",
"ttl_s": 300
}
]Rejected: bad-card
[
{
"id": "live-now",
"site": "live",
"title": "Live now",
"kind": "rail",
"items": [],
"updated_at": "yesterday",
"ttl_s": 30
}
]Rejected: four-cards
[
{
"id": "one",
"site": "live",
"title": "One",
"kind": "rail",
"items": [],
"updated_at": "2026-11-07T08:00:00Z",
"ttl_s": 30
},
{
"id": "two",
"site": "live",
"title": "Two",
"kind": "rows",
"items": [],
"updated_at": "2026-11-07T08:00:00Z",
"ttl_s": 30
},
{
"id": "three",
"site": "live",
"title": "Three",
"kind": "chips",
"items": [],
"updated_at": "2026-11-07T08:00:00Z",
"ttl_s": 30
},
{
"id": "four",
"site": "live",
"title": "Four",
"kind": "rows",
"items": [],
"updated_at": "2026-11-07T08:00:00Z",
"ttl_s": 30
}
]Validate
const contracts = require('openvibe-contracts');
contracts.validate('frame.menu-cards@1', value); // { valid, errors: [{ path, message }] }