Skip to content

Manifest

Every extension archive must include a manifest.json file at the root level. The manifest describes which slots your extension occupies, how pages map to those slots, and optionally defines backend actions.

Minimal Example

json
{
    "version": "v2.0",
    "views": {
        "slots": [
            "EXTENSION_SLOT_RIGHT_OVERLAY", 
            "EXTENSION_SLOT_MAIN_GAME_FUN", 
            "EXTENSION_SLOT_BACKGROUND"],
        "pages": {
            "rightOverlay": "rightOverlay.html",
            "mainGameFun": "mainGameFun.html",
            "background": "background.html"
        },
        "resolveSlotPageScript": "resolveSlotPage.js"
    }
}

Full Example

json
{
  "version": "v2.0",
  "views": {
    "settings": "settings.html",
    "slots": [
            "EXTENSION_SLOT_MAIN_SEX_TOY", 
            "EXTENSION_SLOT_MOVEABLE_OVERLAY", 
            "EXTENSION_SLOT_BACKGROUND"],
    "pages": {
      "menu": "menu.html",
      "overlay": "overlay.html",
      "background": "background.html"
    },
    "resolveSlotPageScript": "resolveSlotPage.js"
  },
  "moveableSlot": {
    "width": 400,
    "height": 600
  },
  "storage": {
    "mutexes": [
      {
        "name": "game_round",
        "read": "everyone",
        "write": "everyone"
      }
    ],
    "strings": [
      {
        "name": "chat_log",
        "read": "everyone",
        "write": "everyone"
      }
    ],
    "ints": [
      {
        "name": "total_votes",
        "read": "everyone",
        "write": "everyone"
      }
    ],
    "top": [
      {
        "name": "tips",
        "read": "everyone",
        "write": "model"
      }
    ]
  },
  "actions": []
}

Fields Reference

Top-level Fields

FieldTypeRequiredDescription
versionstringYesManifest format version. Must be "v2.0".
viewsobjectYesDefines the rendering contract — slots, pages, resolver, and settings.
moveableSlotobjectConditionalRequired when EXTENSION_SLOT_MOVEABLE_OVERLAY is listed in views.slots.
storageobjectNoDeclares Extension Storage keys and mutexes used by the storage data APIs.
actionsarrayNoBackend action definitions. See Backend Actions.

views Object

FieldTypeRequiredDescription
views.slotsstring[]YesArray of slot names your extension occupies.
views.pagesobjectYesMap of page names to HTML file paths. Each key is an arbitrary name; each value is a path to an HTML file in the archive.
views.resolveSlotPageScriptstringYesA script that maps each slot to a page key from views.pages at runtime. See Resolve Slot Page.
views.settingsstringNoSettings HTML entry point. See Extension Settings.

moveableSlot Object

Defines the dimensions of the moveable overlay container. Required only when views.slots includes "EXTENSION_SLOT_MOVEABLE_OVERLAY".

FieldTypeRequiredDescription
moveableSlot.widthnumberYesWidth of the moveable overlay in pixels. Must be a positive integer, max 450px.
moveableSlot.heightnumberYesHeight of the moveable overlay in pixels. Must be a positive integer, max 740px.

storage Object

Declares the keys and mutexes your extension uses with the Extension Storage data APIs.

FieldTypeRequiredDescription
storage.mutexesStorageEntry[]NoMutex names for exclusive lock, unlock, and state operations.
storage.stringsStorageEntry[]NoString storage keys used by string get, set, and append operations.
storage.intsStorageEntry[]NoInteger counter keys used by counter get, increment, and reset operations.
storage.topStorageTopEntry[]NoTop counter keys used by leaderboard-style top get, increment, and reset operations.

Storage Entry Object

Each entry in storage.mutexes, storage.strings and storage.ints uses the same shape.

FieldTypeRequiredDescription
namestringYesKey or mutex name. Must be unique within its list and 1-256 UTF-8 bytes long. Dynamic segments may use exactly {uint64} or {string} placeholders, for example user_{uint64}_state.
readstringYesRead permission for this resource. Allowed values: owner, owner_and_model, everyone, model.
writestringYesWrite permission for this resource. Allowed values: owner, owner_and_model, everyone, model.

Storage Top Entry Object

The storage.top array has different allowed values for the write field. Only models can write to the top storage.

FieldTypeRequiredDescription
namestringYesKey or mutex name. Must be unique within its list and 1-256 UTF-8 bytes long. Dynamic segments may use exactly {uint64} or {string} placeholders, for example user_{uint64}_state.
readstringYesRead permission for this resource. Allowed values: owner, owner_and_model, everyone, model.
writestringYesWrite permission for this resource. Allowed values: model.

Slots

The views.slots array determines which UI slots your extension will render into. Available slot keys depend on the extension category selected in the Extension Platform.

Each slot listed in views.slots must have a corresponding HTML page mapped through views.pages and the resolver script.

For a detailed explanation of what each slot does and where it appears in the UI, see Extension Slots.