games.atmosphere.define

atmosphere.games

Documentation

One game definition per record, published in the developer's own repo. Keep the same rkey to update it in place.

main record

One game definition per record, published in the developer's own repo. Keep the same rkey to update it in place.

Record Key any Any valid record key

Properties

catalog array of ref #catalogRef Optional

Links to matching entries in other game catalogs. Purely supplementary.

maxLength: 8 items
category string Required

Type of experience.

maxLength: 30 bytes
Known values: browser, download, physical, other
cover blob Optional

Card thumbnail image. 16:9 recommended.

maxSize: 4.0 MB
createdAt string datetime Required

An RFC 3339 formatted timestamp.

description string Optional

Full description.

maxLength: 2000 bytes
developer ref #party Optional

The studio or person who made this.

icon blob Optional

Square icon. 256x256 recommended.

maxSize: 512.0 KB
legacyIds array of string Optional

Old IDs used for this same game by other catalogs or tools.

maxLength: 12 items
media array of ref #mediaItem Optional

Extra screenshots, banners, and key art.

maxLength: 24 items
name string Required

Display name.

maxLength: 100 bytes
publisher string at-uri Required

AT-URI of the repo that owns this record. Must match this record's own repo.

releasedAt string datetime Optional

When this became available.

requires array of ref #rule Optional

Hard gates. Every rule must pass before a player can use this game.

maxLength: 16 items
statNamespace string Optional

Deprecated. Use uses[] instead.

maxLength: 80 bytes
status string Optional

Current availability.

Known values: live, beta, coming, archived
tagline string Optional

One-line summary.

maxLength: 200 bytes
tags array of string Optional

Freeform search tags.

maxLength: 12 items
trailers array of ref #video Optional

Video trailers or gameplay clips.

maxLength: 8 items
updatedAt string datetime Optional

An RFC 3339 formatted timestamp.

url string uri Required

Where to play, download, or access the game.

uses array of ref #recordUse Optional

Other records this game reads or writes. Not required to play.

maxLength: 32 items
View raw schema
{
  "key": "any",
  "type": "record",
  "record": {
    "type": "object",
    "required": [
      "name",
      "url",
      "publisher",
      "category",
      "createdAt"
    ],
    "properties": {
      "url": {
        "type": "string",
        "format": "uri",
        "description": "Where to play, download, or access the game."
      },
      "icon": {
        "type": "blob",
        "accept": [
          "image/png",
          "image/webp"
        ],
        "maxSize": 512000,
        "description": "Square icon. 256x256 recommended."
      },
      "name": {
        "type": "string",
        "maxLength": 100,
        "description": "Display name."
      },
      "tags": {
        "type": "array",
        "items": {
          "type": "string",
          "maxLength": 32
        },
        "maxLength": 12,
        "description": "Freeform search tags."
      },
      "uses": {
        "type": "array",
        "items": {
          "ref": "#recordUse",
          "type": "ref"
        },
        "maxLength": 32,
        "description": "Other records this game reads or writes. Not required to play."
      },
      "cover": {
        "type": "blob",
        "accept": [
          "image/png",
          "image/jpeg",
          "image/webp"
        ],
        "maxSize": 4000000,
        "description": "Card thumbnail image. 16:9 recommended."
      },
      "media": {
        "type": "array",
        "items": {
          "ref": "#mediaItem",
          "type": "ref"
        },
        "maxLength": 24,
        "description": "Extra screenshots, banners, and key art."
      },
      "status": {
        "type": "string",
        "description": "Current availability.",
        "knownValues": [
          "live",
          "beta",
          "coming",
          "archived"
        ]
      },
      "catalog": {
        "type": "array",
        "items": {
          "ref": "#catalogRef",
          "type": "ref"
        },
        "maxLength": 8,
        "description": "Links to matching entries in other game catalogs. Purely supplementary."
      },
      "tagline": {
        "type": "string",
        "maxLength": 200,
        "description": "One-line summary."
      },
      "category": {
        "type": "string",
        "maxLength": 30,
        "description": "Type of experience.",
        "knownValues": [
          "browser",
          "download",
          "physical",
          "other"
        ]
      },
      "requires": {
        "type": "array",
        "items": {
          "ref": "#rule",
          "type": "ref"
        },
        "maxLength": 16,
        "description": "Hard gates. Every rule must pass before a player can use this game."
      },
      "trailers": {
        "type": "array",
        "items": {
          "ref": "#video",
          "type": "ref"
        },
        "maxLength": 8,
        "description": "Video trailers or gameplay clips."
      },
      "createdAt": {
        "type": "string",
        "format": "datetime"
      },
      "developer": {
        "ref": "#party",
        "type": "ref",
        "description": "The studio or person who made this."
      },
      "legacyIds": {
        "type": "array",
        "items": {
          "type": "string",
          "maxLength": 80
        },
        "maxLength": 12,
        "description": "Old IDs used for this same game by other catalogs or tools."
      },
      "publisher": {
        "type": "string",
        "format": "at-uri",
        "description": "AT-URI of the repo that owns this record. Must match this record's own repo."
      },
      "updatedAt": {
        "type": "string",
        "format": "datetime"
      },
      "releasedAt": {
        "type": "string",
        "format": "datetime",
        "description": "When this became available."
      },
      "description": {
        "type": "string",
        "maxLength": 2000,
        "description": "Full description."
      },
      "statNamespace": {
        "type": "string",
        "maxLength": 80,
        "description": "Deprecated. Use uses[] instead."
      }
    }
  },
  "description": "One game definition per record, published in the developer's own repo. Keep the same rkey to update it in place."
}
all object

Passes only when every rule passes.

Properties

acquire string uri Optional

A valid URI.

check string Required

No description available.

label string Optional

No description available.

maxLength: 120 bytes
rules array of ref#rule Required

No description available.

maxLength: 16 itemsminLength: 1 items
View raw schema
{
  "type": "object",
  "required": [
    "check",
    "rules"
  ],
  "properties": {
    "check": {
      "type": "string",
      "const": "all"
    },
    "label": {
      "type": "string",
      "maxLength": 120
    },
    "rules": {
      "type": "array",
      "items": {
        "ref": "#rule",
        "type": "ref"
      },
      "maxLength": 16,
      "minLength": 1
    },
    "acquire": {
      "type": "string",
      "format": "uri"
    }
  },
  "description": "Passes only when every rule passes."
}
any object

Passes when at least one rule passes.

Properties

acquire string uri Optional

A valid URI.

check string Required

No description available.

label string Optional

No description available.

maxLength: 120 bytes
rules array of ref#rule Required

No description available.

maxLength: 16 itemsminLength: 1 items
View raw schema
{
  "type": "object",
  "required": [
    "check",
    "rules"
  ],
  "properties": {
    "check": {
      "type": "string",
      "const": "any"
    },
    "label": {
      "type": "string",
      "maxLength": 120
    },
    "rules": {
      "type": "array",
      "items": {
        "ref": "#rule",
        "type": "ref"
      },
      "maxLength": 16,
      "minLength": 1
    },
    "acquire": {
      "type": "string",
      "format": "uri"
    }
  },
  "description": "Passes when at least one rule passes."
}
catalogRef object

A link to a matching entry in another game catalog. Purely supplementary; never affects eligibility.

Properties

borrow array of string Optional

Which parts of the referenced record a portal may show alongside this one.

maxLength: 8 items
name string Optional

Display name of the referenced entry.

maxLength: 100 bytes
source string Optional

Short name of the catalog.

maxLength: 60 bytes
uri string at-uri Required

AT-URI of the external catalog record.

View raw schema
{
  "type": "object",
  "required": [
    "uri"
  ],
  "properties": {
    "uri": {
      "type": "string",
      "format": "at-uri",
      "description": "AT-URI of the external catalog record."
    },
    "name": {
      "type": "string",
      "maxLength": 100,
      "description": "Display name of the referenced entry."
    },
    "borrow": {
      "type": "array",
      "items": {
        "type": "string",
        "knownValues": [
          "media",
          "trailers",
          "genres",
          "platforms",
          "releases",
          "ratings",
          "description",
          "summary"
        ]
      },
      "maxLength": 8,
      "description": "Which parts of the referenced record a portal may show alongside this one."
    },
    "source": {
      "type": "string",
      "maxLength": 60,
      "description": "Short name of the catalog."
    }
  },
  "description": "A link to a matching entry in another game catalog. Purely supplementary; never affects eligibility."
}
field object

Passes if a field on the player's record meets a condition.

Properties

acquire string uri Optional

A valid URI.

check string Required

No description available.

field string Required

Dot-path to the property to test.

maxLength: 200 bytes
label string Optional

No description available.

maxLength: 120 bytes
nsid string nsid Required

A namespaced identifier (e.g., app.bsky.feed.post).

op string Required

Comparison operator.

Known values: exists, notExists, isPlayer, eq, neq, gt, gte, lt, lte
rkey string Optional

Record key. Defaults to 'self'; 'any' scans the collection.

maxLength: 50 bytes
value unknown Optional

Comparison value.

View raw schema
{
  "type": "object",
  "required": [
    "check",
    "nsid",
    "field",
    "op"
  ],
  "properties": {
    "op": {
      "type": "string",
      "description": "Comparison operator.",
      "knownValues": [
        "exists",
        "notExists",
        "isPlayer",
        "eq",
        "neq",
        "gt",
        "gte",
        "lt",
        "lte"
      ]
    },
    "nsid": {
      "type": "string",
      "format": "nsid"
    },
    "rkey": {
      "type": "string",
      "maxLength": 50,
      "description": "Record key. Defaults to 'self'; 'any' scans the collection."
    },
    "check": {
      "type": "string",
      "const": "field"
    },
    "field": {
      "type": "string",
      "maxLength": 200,
      "description": "Dot-path to the property to test."
    },
    "label": {
      "type": "string",
      "maxLength": 120
    },
    "value": {
      "type": "unknown",
      "description": "Comparison value."
    },
    "acquire": {
      "type": "string",
      "format": "uri"
    }
  },
  "description": "Passes if a field on the player's record meets a condition."
}
filter object

One field condition, used by matches and vouch. 'isPlayer' passes when the field names the signed-in player.

Properties

field string Required

Dot-path to the field.

maxLength: 200 bytes
op string Required

Comparison operator.

Known values: exists, notExists, isPlayer, eq, neq, gt, gte, lt, lte
value unknown Optional

Comparison value.

View raw schema
{
  "type": "object",
  "required": [
    "field",
    "op"
  ],
  "properties": {
    "op": {
      "type": "string",
      "description": "Comparison operator.",
      "knownValues": [
        "exists",
        "notExists",
        "isPlayer",
        "eq",
        "neq",
        "gt",
        "gte",
        "lt",
        "lte"
      ]
    },
    "field": {
      "type": "string",
      "maxLength": 200,
      "description": "Dot-path to the field."
    },
    "value": {
      "type": "unknown",
      "description": "Comparison value."
    }
  },
  "description": "One field condition, used by matches and vouch. 'isPlayer' passes when the field names the signed-in player."
}
matches object

Passes if one record satisfies all filters.

Properties

acquire string uri Optional

A valid URI.

check string Required

No description available.

filters array of ref#filter Required

All filters must match on the same record.

maxLength: 8 itemsminLength: 1 items
label string Optional

No description available.

maxLength: 120 bytes
nsid string nsid Required

A namespaced identifier (e.g., app.bsky.feed.post).

View raw schema
{
  "type": "object",
  "required": [
    "check",
    "nsid",
    "filters"
  ],
  "properties": {
    "nsid": {
      "type": "string",
      "format": "nsid"
    },
    "check": {
      "type": "string",
      "const": "matches"
    },
    "label": {
      "type": "string",
      "maxLength": 120
    },
    "acquire": {
      "type": "string",
      "format": "uri"
    },
    "filters": {
      "type": "array",
      "items": {
        "ref": "#filter",
        "type": "ref"
      },
      "maxLength": 8,
      "minLength": 1,
      "description": "All filters must match on the same record."
    }
  },
  "description": "Passes if one record satisfies all filters."
}
mediaItem object

One image in the media gallery.

Properties

alt string Optional

Accessibility caption.

maxLength: 300 bytes
height integer Optional

Pixel height, if known.

image blob Required

The image blob.

maxSize: 8.0 MB
type string Optional

Kind of image.

Known values: screenshot, banner, artwork, poster, background, logo, thumbnail
width integer Optional

Pixel width, if known.

View raw schema
{
  "type": "object",
  "required": [
    "image"
  ],
  "properties": {
    "alt": {
      "type": "string",
      "maxLength": 300,
      "description": "Accessibility caption."
    },
    "type": {
      "type": "string",
      "description": "Kind of image.",
      "knownValues": [
        "screenshot",
        "banner",
        "artwork",
        "poster",
        "background",
        "logo",
        "thumbnail"
      ]
    },
    "image": {
      "type": "blob",
      "accept": [
        "image/png",
        "image/jpeg",
        "image/webp",
        "image/gif"
      ],
      "maxSize": 8000000,
      "description": "The image blob."
    },
    "width": {
      "type": "integer",
      "description": "Pixel width, if known."
    },
    "height": {
      "type": "integer",
      "description": "Pixel height, if known."
    }
  },
  "description": "One image in the media gallery."
}
not object

Passes only when the nested rule fails.

Properties

check string Required

No description available.

label string Optional

No description available.

maxLength: 120 bytes
rule ref #rule Required

No description available.

View raw schema
{
  "type": "object",
  "required": [
    "check",
    "rule"
  ],
  "properties": {
    "rule": {
      "ref": "#rule",
      "type": "ref"
    },
    "check": {
      "type": "string",
      "const": "not"
    },
    "label": {
      "type": "string",
      "maxLength": 120
    }
  },
  "description": "Passes only when the nested rule fails."
}
party object

An entity associated with the experience, such as its developer.

Properties

did string did Optional

DID of this entity's account, if it has one.

name string Required

Display name.

maxLength: 100 bytes
url string uri Optional

Website.

View raw schema
{
  "type": "object",
  "required": [
    "name"
  ],
  "properties": {
    "did": {
      "type": "string",
      "format": "did",
      "description": "DID of this entity's account, if it has one."
    },
    "url": {
      "type": "string",
      "format": "uri",
      "description": "Website."
    },
    "name": {
      "type": "string",
      "maxLength": 100,
      "description": "Display name."
    }
  },
  "description": "An entity associated with the experience, such as its developer."
}
record object

Passes if the player holds any record in this collection.

Properties

acquire string uri Optional

Where to get this.

check string Required

No description available.

label string Optional

Why this is required.

maxLength: 120 bytes
nsid string nsid Required

Collection to check.

View raw schema
{
  "type": "object",
  "required": [
    "check",
    "nsid"
  ],
  "properties": {
    "nsid": {
      "type": "string",
      "format": "nsid",
      "description": "Collection to check."
    },
    "check": {
      "type": "string",
      "const": "record"
    },
    "label": {
      "type": "string",
      "maxLength": 120,
      "description": "Why this is required."
    },
    "acquire": {
      "type": "string",
      "format": "uri",
      "description": "Where to get this."
    }
  },
  "description": "Passes if the player holds any record in this collection."
}
recordUse object

An optional record this game reads or writes. Not required to play; see requires[] for hard gates.

Properties

acquire string uri Optional

Where to create or manage this record.

authority string did Optional

DID of the repo holding this record, if not the player's own.

filters array of ref#filter Optional

Conditions to match, used with rkey 'any' or an authority.

maxLength: 8 items
label string Optional

Short label for this use.

maxLength: 120 bytes
nsid string nsid Required

Collection to read.

path string Optional

Dot-path to the relevant value inside the record.

maxLength: 200 bytes
purpose string Optional

Why this record matters.

maxLength: 300 bytes
rkey string Optional

Record key. Defaults to 'self'; 'any' scans the collection.

maxLength: 50 bytes
role string Required

What this record is used for.

Known values: character, perk, cosmetic, interop, stats, activity, leaderboard, profile, session, inventory, other
verify ref #rule Optional

Optional rule confirming this use is genuine.

View raw schema
{
  "type": "object",
  "required": [
    "role",
    "nsid"
  ],
  "properties": {
    "nsid": {
      "type": "string",
      "format": "nsid",
      "description": "Collection to read."
    },
    "path": {
      "type": "string",
      "maxLength": 200,
      "description": "Dot-path to the relevant value inside the record."
    },
    "rkey": {
      "type": "string",
      "maxLength": 50,
      "description": "Record key. Defaults to 'self'; 'any' scans the collection."
    },
    "role": {
      "type": "string",
      "description": "What this record is used for.",
      "knownValues": [
        "character",
        "perk",
        "cosmetic",
        "interop",
        "stats",
        "activity",
        "leaderboard",
        "profile",
        "session",
        "inventory",
        "other"
      ]
    },
    "label": {
      "type": "string",
      "maxLength": 120,
      "description": "Short label for this use."
    },
    "verify": {
      "ref": "#rule",
      "type": "ref",
      "description": "Optional rule confirming this use is genuine."
    },
    "acquire": {
      "type": "string",
      "format": "uri",
      "description": "Where to create or manage this record."
    },
    "filters": {
      "type": "array",
      "items": {
        "ref": "#filter",
        "type": "ref"
      },
      "maxLength": 8,
      "description": "Conditions to match, used with rkey 'any' or an authority."
    },
    "purpose": {
      "type": "string",
      "maxLength": 300,
      "description": "Why this record matters."
    },
    "authority": {
      "type": "string",
      "format": "did",
      "description": "DID of the repo holding this record, if not the player's own."
    }
  },
  "description": "An optional record this game reads or writes. Not required to play; see requires[] for hard gates."
}
rule object

One playability rule. 'check' selects the variant: record, field, matches, vouch, all, any, or not. A rule may include verify for an additional required proof. An unknown check must never pass.

Properties

acquire string uri Optional

Where to get this.

authority string did Optional

DID of the trusted issuer, for vouch.

check string Required

Rule type.

Known values: record, field, matches, vouch, all, any, not
field string Optional

Dot-path to test.

maxLength: 200 bytes
filters array of ref#filter Optional

Conditions for matches or vouch.

maxLength: 8 itemsminLength: 1 items
label string Optional

Why this is required.

maxLength: 120 bytes
nsid string nsid Optional

Collection to read.

op string Optional

Comparison operator.

Known values: exists, notExists, isPlayer, eq, neq, gt, gte, lt, lte
rkey string Optional

Record key. Defaults to 'self'; 'any' scans the collection.

maxLength: 50 bytes
rule ref #rule Optional

Nested rule for not.

rules array of ref#rule Optional

Nested rules for all/any.

maxLength: 16 itemsminLength: 1 items
value unknown Optional

Comparison value.

verify ref #rule Optional

Additional proof that must also pass when this rule is used in requires[].

View raw schema
{
  "type": "object",
  "required": [
    "check"
  ],
  "properties": {
    "op": {
      "type": "string",
      "description": "Comparison operator.",
      "knownValues": [
        "exists",
        "notExists",
        "isPlayer",
        "eq",
        "neq",
        "gt",
        "gte",
        "lt",
        "lte"
      ]
    },
    "nsid": {
      "type": "string",
      "format": "nsid",
      "description": "Collection to read."
    },
    "rkey": {
      "type": "string",
      "maxLength": 50,
      "description": "Record key. Defaults to 'self'; 'any' scans the collection."
    },
    "rule": {
      "ref": "#rule",
      "type": "ref",
      "description": "Nested rule for not."
    },
    "check": {
      "type": "string",
      "description": "Rule type.",
      "knownValues": [
        "record",
        "field",
        "matches",
        "vouch",
        "all",
        "any",
        "not"
      ]
    },
    "field": {
      "type": "string",
      "maxLength": 200,
      "description": "Dot-path to test."
    },
    "label": {
      "type": "string",
      "maxLength": 120,
      "description": "Why this is required."
    },
    "rules": {
      "type": "array",
      "items": {
        "ref": "#rule",
        "type": "ref"
      },
      "maxLength": 16,
      "minLength": 1,
      "description": "Nested rules for all/any."
    },
    "value": {
      "type": "unknown",
      "description": "Comparison value."
    },
    "verify": {
      "ref": "#rule",
      "type": "ref",
      "description": "Additional proof that must also pass when this rule is used in requires[]."
    },
    "acquire": {
      "type": "string",
      "format": "uri",
      "description": "Where to get this."
    },
    "filters": {
      "type": "array",
      "items": {
        "ref": "#filter",
        "type": "ref"
      },
      "maxLength": 8,
      "minLength": 1,
      "description": "Conditions for matches or vouch."
    },
    "authority": {
      "type": "string",
      "format": "did",
      "description": "DID of the trusted issuer, for vouch."
    }
  },
  "description": "One playability rule. 'check' selects the variant: record, field, matches, vouch, all, any, or not. A rule may include verify for an additional required proof. An unknown check must never pass."
}
video object

A trailer or gameplay clip.

Properties

platform string Optional

Where the video lives.

Known values: youtube, vimeo, twitch, direct
thumbnail blob Optional

Still frame shown before playing.

maxSize: 2.0 MB
title string Required

Clip title.

maxLength: 120 bytes
url string uri Optional

Direct URL, used when no platform/videoId is given.

videoId string Optional

Platform video id.

maxLength: 120 bytes
View raw schema
{
  "type": "object",
  "required": [
    "title"
  ],
  "properties": {
    "url": {
      "type": "string",
      "format": "uri",
      "description": "Direct URL, used when no platform/videoId is given."
    },
    "title": {
      "type": "string",
      "maxLength": 120,
      "description": "Clip title."
    },
    "videoId": {
      "type": "string",
      "maxLength": 120,
      "description": "Platform video id."
    },
    "platform": {
      "type": "string",
      "description": "Where the video lives.",
      "knownValues": [
        "youtube",
        "vimeo",
        "twitch",
        "direct"
      ]
    },
    "thumbnail": {
      "type": "blob",
      "accept": [
        "image/png",
        "image/jpeg",
        "image/webp"
      ],
      "maxSize": 2000000,
      "description": "Still frame shown before playing."
    }
  },
  "description": "A trailer or gameplay clip."
}
vouch object

Passes if a trusted authority's repo holds a matching record. Use for grants, awards, or approvals one account issues about another.

Properties

acquire string uri Optional

A valid URI.

authority string did Required

DID of the account that issues the record.

check string Required

No description available.

filters array of ref#filter Optional

Conditions the record must meet. Use 'isPlayer' to require it name the signed-in player.

maxLength: 8 items
label string Optional

No description available.

maxLength: 120 bytes
nsid string nsid Required

Collection to look for in the authority's repo.

View raw schema
{
  "type": "object",
  "required": [
    "check",
    "authority",
    "nsid"
  ],
  "properties": {
    "nsid": {
      "type": "string",
      "format": "nsid",
      "description": "Collection to look for in the authority's repo."
    },
    "check": {
      "type": "string",
      "const": "vouch"
    },
    "label": {
      "type": "string",
      "maxLength": 120
    },
    "acquire": {
      "type": "string",
      "format": "uri"
    },
    "filters": {
      "type": "array",
      "items": {
        "ref": "#filter",
        "type": "ref"
      },
      "maxLength": 8,
      "description": "Conditions the record must meet. Use 'isPlayer' to require it name the signed-in player."
    },
    "authority": {
      "type": "string",
      "format": "did",
      "description": "DID of the account that issues the record."
    }
  },
  "description": "Passes if a trusted authority's repo holds a matching record. Use for grants, awards, or approvals one account issues about another."
}

Lexicon Garden

@