A Mooring site. Every field except createdAt is optional: an empty record is a valid site, and the renderer falls back to the owner's profile records and a default section order.
any
Any valid record key
Properties
contactEmail
string
Optional
Public contact email, rendered as a contact affordance on the site. Publishing an address here makes it world-readable.
maxLength: 2540 bytesmaxGraphemes: 254 graphemescreatedAt
string
datetime
Required
Client-declared timestamp when this record was created.
description
string
Optional
Short description of the site, used for meta tags and previews.
maxLength: 30000 bytesmaxGraphemes: 3000 graphemesdiscoverable
boolean
Optional
Default true when absent. When false, the renderer emits noindex directives for the site. Does not affect the public visibility of the underlying atproto records.
icon
blob
Optional
Square image used as the site icon/favicon. Should be at least 256x256.
maxSize: 1.0 MBlabels
union
Optional
No description available.
name
string
Optional
Site title. When absent, renderers should fall back to the owner's profile displayName or handle.
maxLength: 5000 bytesmaxGraphemes: 500 graphemessections
array
of
union
Optional
Ordered sections of the site, rendered top to bottom; order is array position. When absent, renderers should use a sensible default order based on which sources have data.
maxLength: 50 itemssignOff
string
Optional
Valediction rendered before the owner's name in the site's closing sign-off, like 'Warmly,'. When absent, the sign-off shows the name alone.
maxLength: 640 bytesmaxGraphemes: 64 graphemestheme
ref
#theme
Optional
No description available.
View raw schema
{
"key": "any",
"type": "record",
"record": {
"type": "object",
"required": [
"createdAt"
],
"properties": {
"icon": {
"type": "blob",
"accept": [
"image/*"
],
"maxSize": 1000000,
"description": "Square image used as the site icon/favicon. Should be at least 256x256."
},
"name": {
"type": "string",
"maxLength": 5000,
"description": "Site title. When absent, renderers should fall back to the owner's profile displayName or handle.",
"maxGraphemes": 500
},
"theme": {
"ref": "#theme",
"type": "ref"
},
"labels": {
"refs": [
"com.atproto.label.defs#selfLabels"
],
"type": "union"
},
"signOff": {
"type": "string",
"maxLength": 640,
"description": "Valediction rendered before the owner's name in the site's closing sign-off, like 'Warmly,'. When absent, the sign-off shows the name alone.",
"maxGraphemes": 64
},
"sections": {
"type": "array",
"items": {
"refs": [
"#heroSection",
"#postsSection",
"#writingSection",
"#careerSection",
"#pagesSection"
],
"type": "union",
"closed": false
},
"maxLength": 50,
"description": "Ordered sections of the site, rendered top to bottom; order is array position. When absent, renderers should use a sensible default order based on which sources have data."
},
"createdAt": {
"type": "string",
"format": "datetime",
"description": "Client-declared timestamp when this record was created."
},
"description": {
"type": "string",
"maxLength": 30000,
"description": "Short description of the site, used for meta tags and previews.",
"maxGraphemes": 3000
},
"contactEmail": {
"type": "string",
"maxLength": 2540,
"description": "Public contact email, rendered as a contact affordance on the site. Publishing an address here makes it world-readable.",
"maxGraphemes": 254
},
"discoverable": {
"type": "boolean",
"description": "Default true when absent. When false, the renderer emits noindex directives for the site. Does not affect the public visibility of the underlying atproto records."
}
}
},
"description": "A Mooring site. Every field except createdAt is optional: an empty record is a valid site, and the renderer falls back to the owner's profile records and a default section order."
}