fyi.opensocial.template
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"asGroup": {
"properties": {
"collection": {
"format": "nsid",
"type": "string"
},
"in": {
"description": "The type of space it goes in.",
"format": "nsid",
"type": "string"
}
},
"required": [
"collection",
"in"
],
"type": "object"
},
"entry": {
"description": "A tab, as the template suggests it, without the template itself.",
"properties": {
"appviews": {
"description": "The app servers it reads for the viewer, by the start of their methods' names. Bluesky's, for app.bsky, needs no naming.",
"items": {
"ref": "fyi.opensocial.site#appview",
"type": "ref"
},
"maxLength": 10,
"type": "array"
},
"asGroup": {
"description": "What it writes as the group rather than as the viewer, and the kind of space each goes in. Who may is up to each space's access record.",
"items": {
"ref": "#asGroup",
"type": "ref"
},
"type": "array"
},
"calls": {
"description": "The methods it may call for the viewer: the host's, and an app server's, like Bluesky's.",
"items": {
"format": "nsid",
"type": "string"
},
"maxLength": 50,
"type": "array"
},
"for": {
"description": "The kind of thing a tab of it is about, if it is about one: a collection of records in the group's spaces, or a type of space; or, with pick.link, records anywhere on the network. Such a tab's `about` is one of them.",
"format": "nsid",
"type": "string"
},
"labels": {
"description": "Its words for what it lets people do, by record kind or method, to follow 'Lets people': 'post events'.",
"items": {
"ref": "#label",
"type": "ref"
},
"type": "array"
},
"members": {
"description": "Shown to members only.",
"type": "boolean"
},
"network": {
"description": "Collections it reads from everyone on the network who writes them, not only the group and its members: the host keeps each one whole from when the site is saved, and won't save one more accounts write than it can keep.",
"items": {
"format": "nsid",
"type": "string"
},
"maxLength": 20,
"type": "array"
},
"pick": {
"description": "With for, how choosing which one is put, and what a tab about none of them shows. Without none, a tab of it must be about one.",
"ref": "#pick",
"type": "ref"
},
"reads": {
"description": "The collections it may read from the group, its members and its spaces.",
"items": {
"format": "nsid",
"type": "string"
},
"maxLength": 50,
"type": "array"
},
"slug": {
"maxLength": 64,
"type": "string"
},
"summary": {
"description": "One short line on what a tab of it shows, for choosing it.",
"maxGraphemes": 100,
"maxLength": 1000,
"type": "string"
},
"title": {
"maxGraphemes": 64,
"maxLength": 640,
"type": "string"
},
"writes": {
"description": "The collections it may write for the viewer, in their account or one of the group's spaces.",
"items": {
"format": "nsid",
"type": "string"
},
"maxLength": 50,
"type": "array"
}
},
"required": [
"slug"
],
"type": "object"
},
"label": {
"properties": {
"action": {
"description": "For that write alone.",
"knownValues": [
"create",
"update",
"delete"
],
"type": "string"
},
"nsid": {
"description": "A record kind it writes, or a method it calls.",
"format": "nsid",
"type": "string"
},
"text": {
"maxGraphemes": 80,
"maxLength": 300,
"type": "string"
}
},
"required": [
"nsid",
"text"
],
"type": "object"
},
"main": {
"description": "A template for a tab for a group's site, published by whoever made it. A site names it by URI; an agent installs it as a skill. Keyed by the template's name.",
"key": "any",
"record": {
"properties": {
"createdAt": {
"format": "datetime",
"type": "string"
},
"description": {
"description": "One line saying what it is and when to use it; what an agent matches a request against.",
"maxGraphemes": 300,
"maxLength": 3000,
"type": "string"
},
"entry": {
"description": "How a site uses it unless told otherwise; what it reads, writes and calls are what it needs to be allowed for it to work.",
"ref": "#entry",
"type": "ref"
},
"guide": {
"description": "How to use it, in markdown: what it shows, what it reads and who can see that, how to make it a group's own.",
"maxLength": 50000,
"type": "string"
},
"html": {
"description": "The page: a whole HTML document, drawn in a sandboxed frame with the site kit in front of it.",
"maxLength": 200000,
"type": "string"
},
"name": {
"description": "What a site and an agent call it: lowercase letters, digits and dashes. The same as the record key.",
"maxLength": 64,
"type": "string"
},
"preview": {
"description": "A small drawing of a tab of it, as SVG, for choosing it: drawn in the site's colours by the tokens var(--bg), var(--ink), var(--muted), var(--line), var(--accent), var(--surface) and var(--soft). Shown as an image, so nothing in it runs.",
"maxLength": 20000,
"type": "string"
}
},
"required": [
"name",
"description",
"guide",
"html",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"pick": {
"properties": {
"label": {
"maxGraphemes": 64,
"maxLength": 640,
"type": "string"
},
"link": {
"description": "Picked by pasting a link to one, anywhere on the network, rather than from the group's own: a Bluesky feed's. The field's hint.",
"maxGraphemes": 64,
"maxLength": 640,
"type": "string"
},
"new": {
"description": "Making a new place of its own instead, from Add a tab: a space of this type, readable by everyone or some roles.",
"ref": "#pickNew",
"type": "ref"
},
"none": {
"maxGraphemes": 64,
"maxLength": 640,
"type": "string"
}
},
"required": [
"label"
],
"type": "object"
},
"pickNew": {
"properties": {
"in": {
"description": "The type of space to make.",
"format": "nsid",
"type": "string"
},
"label": {
"maxGraphemes": 60,
"maxLength": 300,
"type": "string"
}
},
"required": [
"label",
"in"
],
"type": "object"
}
},
"id": "fyi.opensocial.template",
"lexicon": 1
}
Metadata
- DID
-
did:plc:2gqnilpksz2e7faj3bwvo6qc - CID
-
bafyreibp7tzdepp76i22dnh7cnnix6loctexanpair2tqwr752qhr3nfk4 - Indexed At
- 2026-10-09 20:04 UTC
- AT-URI
-
at://did:plc:2gqnilpksz2e7faj3bwvo6qc/com.atproto.lexicon.schema/fyi.opensocial.template
Version History (3 versions)
Referenced Schemas (1)
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
fyi.opensocial.site record
A group's site, in its members space: channels of tabs, shown one at a time, each a whole HTML document drawn in a sandboxed frame. Authored by the group DID; written through putSite by whoever holds group.configure. An…
-
fyi.opensocial.putSiteTab procedure
Give something in the group's spaces — a record, or a space — a tab on its site, or name its tab again if it has one. Allowed to whoever may write it as the group (a record: its space's credentialScopes) or configur…
-
fyi.opensocial.page record
A page a member made for their group's site: a whole HTML document, in their own repo in the group's fyi.opensocial.pages space. The one keyed `profile` is their page about themselves, shown in a tab of its own; a profi…