Published to the publisher's own repository, one record per game. Use a stable, readable record key and update that same record in place. The record's at:// URI is its canonical identity; 'url' is an access location and may change. A portal must not merge definitions solely because their URLs match.
any
Any valid record key
Properties
catalog
array
of
ref
#catalogRef
Optional
Optional links to records in other game catalogs that describe this same title, most often a Pentaract (games.gamesgamesgamesgames.game) entry. This is how a definition borrows rich metadata a dedicated catalog already maintains, genres, platforms, screenshots, release dates, ratings, instead of duplicating it here. Purely supplementary: evaluation never reads these, and the experience is complete without them. Cooperate, don't re-enter.
maxLength: 8 itemscategory
string
Required
Broad type of experience, used for portal filtering and display. Known values: 'browser' (plays in a web browser), 'download' (downloaded and run locally), 'physical' (tabletop or in-person), 'other'. This is an open set, portals should tolerate values they do not recognise.
maxLength: 30 bytesbrowser, download, physical, othercover
blob
Optional
Primary cover image. Portals display this as the card thumbnail. Recommended ratio 16:9.
maxSize: 4.0 MBcreatedAt
string
datetime
Required
An RFC 3339 formatted timestamp.
description
string
Optional
Full description of the experience. Plain text; portals may render line breaks.
maxLength: 2000 bytesdeveloper
ref
#party
Optional
The studio or individual who built the experience. Prefer a DID when available so the developer is verifiable on the network.
icon
blob
Optional
Square icon for compact display contexts. Recommended 256x256 px.
maxSize: 512.0 KBlegacyIds
array
of
string
Optional
Stable identifiers used by older catalogues, score readers, or inventory integrations for this same game. These are compatibility aliases, not canonical identity.
maxLength: 12 itemsmedia
array
of
ref
#mediaItem
Optional
Extended media gallery, screenshots, banners, key art, and posters a portal can show on a detail page. 'cover' and 'icon' above stay the primary card images; this is the deeper set, mirroring the rich galleries dedicated game catalogs keep.
maxLength: 24 itemsname
string
Required
Display name of the experience as shown in portal listings.
maxLength: 100 bytespublisher
string
at-uri
Required
Stable AT-URI identifying the account that publishes and maintains this definition, normally at:// followed by the publishing DID. It must name the same repository that contains this record; portals should reject a mismatch.
releasedAt
string
datetime
Optional
When this experience became publicly available.
requires
array
of
ref
#rule
Optional
Hard playability requirements. Every rule must pass before the game can be played as declared. Do not put recommendations, bonuses, or merely supported records here. Portals surface failures as actionable prompts using each rule's 'acquire' link.
maxLength: 16 itemsstatNamespace
string
Optional
Deprecated compatibility hint. Use uses[] with role 'activity' or 'stats' to describe player activity records and display metrics.
maxLength: 80 bytesstatus
string
Optional
Current availability. Known values: 'live', 'beta', 'coming' (announced but not yet playable), 'archived' (no longer available). Open set; portals may badge or filter on these.
live, beta, coming, archivedtagline
string
Optional
One-line summary shown beneath the title in card views.
maxLength: 200 bytestags
array
of
string
Optional
Freeform tags for search and discovery (e.g. 'arcade', 'pixel art', 'multiplayer').
maxLength: 12 itemstrailers
array
of
ref
#video
Optional
Video trailers and gameplay clips. Hosted externally (YouTube, Vimeo, Twitch) or linked directly so portals can embed or link them.
maxLength: 8 itemsupdatedAt
string
datetime
Optional
An RFC 3339 formatted timestamp.
url
string
uri
Required
URL at which the game is played, downloaded, or accessed. This is a launch location, not the record's identity.
uses
array
of
ref
#recordUse
Optional
Non-required records this game uses, understands, produces, validates, or wants portals to read. Use requires[] only for hard gates. Use uses[] for everything else: optional gameplay perks, character imports, cosmetics, bonuses, interoperability, stats, saves, activity, sessions, replays, leaderboards, labels, grants, validation, inventory, or profile context. The role and purpose fields explain whether the use is a player-facing benefit, a game-authored record, or a portal-readable display surface.
maxLength: 32 itemsView raw schema
{
"key": "any",
"type": "record",
"record": {
"type": "object",
"required": [
"name",
"url",
"publisher",
"category",
"createdAt"
],
"properties": {
"url": {
"type": "string",
"format": "uri",
"description": "URL at which the game is played, downloaded, or accessed. This is a launch location, not the record's identity."
},
"icon": {
"type": "blob",
"accept": [
"image/png",
"image/webp"
],
"maxSize": 512000,
"description": "Square icon for compact display contexts. Recommended 256x256 px."
},
"name": {
"type": "string",
"maxLength": 100,
"description": "Display name of the experience as shown in portal listings."
},
"tags": {
"type": "array",
"items": {
"type": "string",
"maxLength": 32
},
"maxLength": 12,
"description": "Freeform tags for search and discovery (e.g. 'arcade', 'pixel art', 'multiplayer')."
},
"uses": {
"type": "array",
"items": {
"ref": "#recordUse",
"type": "ref"
},
"maxLength": 32,
"description": "Non-required records this game uses, understands, produces, validates, or wants portals to read. Use requires[] only for hard gates. Use uses[] for everything else: optional gameplay perks, character imports, cosmetics, bonuses, interoperability, stats, saves, activity, sessions, replays, leaderboards, labels, grants, validation, inventory, or profile context. The role and purpose fields explain whether the use is a player-facing benefit, a game-authored record, or a portal-readable display surface."
},
"cover": {
"type": "blob",
"accept": [
"image/png",
"image/jpeg",
"image/webp"
],
"maxSize": 4000000,
"description": "Primary cover image. Portals display this as the card thumbnail. Recommended ratio 16:9."
},
"media": {
"type": "array",
"items": {
"ref": "#mediaItem",
"type": "ref"
},
"maxLength": 24,
"description": "Extended media gallery, screenshots, banners, key art, and posters a portal can show on a detail page. 'cover' and 'icon' above stay the primary card images; this is the deeper set, mirroring the rich galleries dedicated game catalogs keep."
},
"status": {
"type": "string",
"description": "Current availability. Known values: 'live', 'beta', 'coming' (announced but not yet playable), 'archived' (no longer available). Open set; portals may badge or filter on these.",
"knownValues": [
"live",
"beta",
"coming",
"archived"
]
},
"catalog": {
"type": "array",
"items": {
"ref": "#catalogRef",
"type": "ref"
},
"maxLength": 8,
"description": "Optional links to records in other game catalogs that describe this same title, most often a Pentaract (games.gamesgamesgamesgames.game) entry. This is how a definition borrows rich metadata a dedicated catalog already maintains, genres, platforms, screenshots, release dates, ratings, instead of duplicating it here. Purely supplementary: evaluation never reads these, and the experience is complete without them. Cooperate, don't re-enter."
},
"tagline": {
"type": "string",
"maxLength": 200,
"description": "One-line summary shown beneath the title in card views."
},
"category": {
"type": "string",
"maxLength": 30,
"description": "Broad type of experience, used for portal filtering and display. Known values: 'browser' (plays in a web browser), 'download' (downloaded and run locally), 'physical' (tabletop or in-person), 'other'. This is an open set, portals should tolerate values they do not recognise.",
"knownValues": [
"browser",
"download",
"physical",
"other"
]
},
"requires": {
"type": "array",
"items": {
"ref": "#rule",
"type": "ref"
},
"maxLength": 16,
"description": "Hard playability requirements. Every rule must pass before the game can be played as declared. Do not put recommendations, bonuses, or merely supported records here. Portals surface failures as actionable prompts using each rule's 'acquire' link."
},
"trailers": {
"type": "array",
"items": {
"ref": "#video",
"type": "ref"
},
"maxLength": 8,
"description": "Video trailers and gameplay clips. Hosted externally (YouTube, Vimeo, Twitch) or linked directly so portals can embed or link them."
},
"createdAt": {
"type": "string",
"format": "datetime"
},
"developer": {
"ref": "#party",
"type": "ref",
"description": "The studio or individual who built the experience. Prefer a DID when available so the developer is verifiable on the network."
},
"legacyIds": {
"type": "array",
"items": {
"type": "string",
"maxLength": 80
},
"maxLength": 12,
"description": "Stable identifiers used by older catalogues, score readers, or inventory integrations for this same game. These are compatibility aliases, not canonical identity."
},
"publisher": {
"type": "string",
"format": "at-uri",
"description": "Stable AT-URI identifying the account that publishes and maintains this definition, normally at:// followed by the publishing DID. It must name the same repository that contains this record; portals should reject a mismatch."
},
"updatedAt": {
"type": "string",
"format": "datetime"
},
"releasedAt": {
"type": "string",
"format": "datetime",
"description": "When this experience became publicly available."
},
"description": {
"type": "string",
"maxLength": 2000,
"description": "Full description of the experience. Plain text; portals may render line breaks."
},
"statNamespace": {
"type": "string",
"maxLength": 80,
"description": "Deprecated compatibility hint. Use uses[] with role 'activity' or 'stats' to describe player activity records and display metrics."
}
}
},
"description": "Published to the publisher's own repository, one record per game. Use a stable, readable record key and update that same record in place. The record's at:// URI is its canonical identity; 'url' is an access location and may change. A portal must not merge definitions solely because their URLs match."
}