ATmosphere Games Lexicons

Game Lexicons

Portable AT Protocol schemas for games and live status.

These are evolving community lexicons. Proposals and implementation feedback are welcome at the AT Protocol Games Workgroup.
Interoperable Game Definitions

games.atmosphere.define

Purpose

Identifies a game: its publisher, where to play it, and the AT Protocol records it needs or uses.

Publish

Publish one record per game in the developer's own repository, and keep its record key stable across updates.

  • name, url, publisher, category, and createdAt are required.
  • publisher must be the AT-URI of the repository publishing the record.
  • requires declares compatibility gates; uses declares optional integrations.
  • catalog and legacyIds may link the same game across other catalogs.

Developer identity

A DID is the durable identity behind a game record. When a developer self-publishes, publisher is already their DID, so developer is display text only. When a listing is held on a developer's behalf, developer.did should be set to their real DID.

Discovery

Once published, a definition is discoverable directly from AT Protocol repository events, such as Jetstream and the firehose.

Basic Example

A simplified version of the real Clun's Cannon definition record. It requires an actor.rpg.sprite to play, and uses a Jet Pack .item vouched for by protoimsg.app.

{
  "$type": "games.atmosphere.define",
  "name": "Clun's Cannon",
  "url": "https://rpg.actor/cannon",
  "publisher": "at://did:plc:kwgllf365cwmxbnxitx4pjdj",
  "category": "browser",
  "status": "live",
  "createdAt": "2026-07-17T14:54:25.448Z",
  "requires": [{
    "check": "record",
    "nsid": "actor.rpg.sprite",
    "label": "Your character sprite",
    "acquire": "https://rpg.actor/generator"
  }],
  "uses": [{
    "role": "perk",
    "nsid": "equipment.rpg.item",
    "purpose": "Owning a Jet Pack offers an extra boost when launched",
    "acquire": "https://protoimsg.app/games",
    "verify": {
      "check": "vouch",
      "nsid": "equipment.rpg.item",
      "authority": "did:plc:ew5e3up4h2jf4j263qhdjo4e",
      "filters": [
        { "field": "item", "op": "eq", "value": "jet_pack" },
        { "field": "recipient", "op": "isPlayer" }
      ]
    }
  }]
}

Compatibility Rules

  • record, field, and matches inspect player records.
  • vouch checks a trusted authority's repository.
  • all, any, and not compose rules.
  • Unknown checks must fail. Optional uses never block play.

Schema

The JSON schema is available at /lexicons/games.atmosphere.define.json. Its public source and documentation are maintained at tangled.org/beta.atmosphere.games/lexicons.

Live Player Status

games.atmosphere.status

Purpose

A record of live game activity, one per account. Portals and social clients use it to show what someone is playing right now.

Publish

Write one record per account and keep it updated while the session is active.

  • game, createdAt, and staleAt are required.
  • game is an AT-URI to the game being played. Any game catalog works, not just games.atmosphere.define.
  • platform is an optional AT-URI to a platform or storefront record.
  • staleAt should be refreshed every 5–15 minutes while the session continues. Consumers treat the record as abandoned once it passes.
  • via names the client managing the record, so multiple launchers can update the same account without overwriting each other.

Consent and privacy

Publish only with the account owner's consent. The record is meant to describe an active session, not a hidden or covert state.

Use playing.party.dids only for participants who agreed to be shown. For basic party counts, prefer current and max.

Basic Example

An active multiplayer session in Clun's Cannon, with a party of two.

{
  "$type": "games.atmosphere.status",
  "game": "at://did:plc:kwgllf365cwmxbnxitx4pjdj/games.atmosphere.define/cluns-cannon",
  "state": "4-player game",
  "details": {
    "event": "Round 3 of 5",
    "startedAt": "2026-09-16T20:10:00.000Z"
  },
  "playing": {
    "id": "launch-party-9f2",
    "party": { "current": 2, "max": 4 }
  },
  "embed": {
    "$type": "app.bsky.embed.external",
    "external": {
      "uri": "https://rpg.actor/cannon",
      "title": "Clun's Cannon",
      "description": "Get launched into the atmosphere!"
    }
  },
  "createdAt": "2026-09-16T20:05:00.000Z",
  "staleAt": "2026-09-16T20:25:00.000Z",
  "via": "beta.atmosphere.games"
}

Schema

The JSON schema is available at /lexicons/games.atmosphere.status.json. It is proposed for community stewardship at tangled.org/beta.atmosphere.games/lexicons and remains a draft until the working group settles on it.