social.craftsky.feed.post
{
"$type": "com.atproto.lexicon.schema",
"defs": {
"aspectRatio": {
"description": "Image aspect ratio metadata used for layout/render hints.",
"properties": {
"height": {
"minimum": 1,
"type": "integer"
},
"width": {
"minimum": 1,
"type": "integer"
}
},
"required": [
"width",
"height"
],
"type": "object"
},
"externalImport": {
"description": "Minimal self-asserted external-import provenance. It is display and distribution metadata only and does not verify ownership of an external account.",
"properties": {
"source": {
"description": "Self-asserted source service token. The value does not verify account ownership; clients should apply source-specific behavior only to values they recognize.",
"knownValues": [
"instagram"
],
"maxLength": 64,
"type": "string"
}
},
"required": [
"source"
],
"type": "object"
},
"image": {
"description": "An image blob with optional alt text.",
"properties": {
"alt": {
"description": "Optional alt text describing the image for accessibility.",
"maxGraphemes": 1000,
"maxLength": 1000,
"type": "string"
},
"aspectRatio": {
"description": "Optional aspect ratio metadata for rendering.",
"ref": "#aspectRatio",
"type": "ref"
},
"image": {
"accept": [
"image/jpeg",
"image/png",
"image/webp"
],
"maxSize": 2000000,
"type": "blob"
}
},
"required": [
"image"
],
"type": "object"
},
"main": {
"description": "A post on Craftsky. May be a general post or a craft project post; when the optional 'project' field is present the post is a project post. The optional open embed union supports quoted records, standard external cards, and standard video.",
"key": "tid",
"record": {
"properties": {
"createdAt": {
"description": "Client-declared creation timestamp.",
"format": "datetime",
"type": "string"
},
"embed": {
"description": "Optional embedded content. Open union supporting local quote embeds, standard external cards, and standard video.",
"refs": [
"#quoteEmbed",
"app.bsky.embed.external",
"app.bsky.embed.video"
],
"type": "union"
},
"externalImport": {
"description": "Optional self-asserted provenance for content created by an external-history importer. This metadata does not verify ownership of an external account or grant trust.",
"ref": "#externalImport",
"type": "ref"
},
"facets": {
"description": "Byte-range annotations over 'text' for mentions, links, and inline hashtags. Reuses app.bsky.richtext.facet so existing renderers Just Work. Inline hashtag facets are composer-merged into project.common.tags on project posts; see the post lexicon fields spec.",
"items": {
"ref": "app.bsky.richtext.facet",
"type": "ref"
},
"type": "array"
},
"images": {
"description": "Images attached to the post. Top-level (not inside 'embed') — a post may carry images alongside a quote embed without needing a wrapper variant.",
"items": {
"ref": "#image",
"type": "ref"
},
"maxLength": 4,
"type": "array"
},
"langs": {
"description": "Indicates human language of post primary text content.",
"items": {
"format": "language",
"type": "string"
},
"maxLength": 3,
"type": "array"
},
"project": {
"description": "If present, this post is a craft project post. Absence means it's a general social post.",
"ref": "social.craftsky.project.defs#project",
"type": "ref"
},
"reply": {
"description": "If present, this post is a reply to another post.",
"ref": "#replyRef",
"type": "ref"
},
"sponsored": {
"description": "Whether the author declares that this post was created with sponsorship or other commercial consideration. Disclosure metadata only; it does not affect distribution.",
"type": "boolean"
},
"text": {
"description": "The primary text content of the post. Plain text; rich-text annotations live in 'facets'. Craftsky allows longer posts than Bluesky (2000 graphemes vs 300) because crafters write fuller project write-ups.",
"maxGraphemes": 2000,
"maxLength": 20000,
"type": "string"
}
},
"required": [
"text",
"sponsored",
"createdAt"
],
"type": "object"
},
"type": "record"
},
"quoteEmbed": {
"description": "Embed wrapping another record (typically a social.craftsky.feed.post) for a quote post.",
"properties": {
"record": {
"description": "Strong reference to the quoted record.",
"ref": "com.atproto.repo.strongRef",
"type": "ref"
}
},
"required": [
"record"
],
"type": "object"
},
"replyRef": {
"description": "Reference to the parent and root posts of a thread.",
"properties": {
"parent": {
"description": "The immediate parent post being replied to.",
"ref": "com.atproto.repo.strongRef",
"type": "ref"
},
"root": {
"description": "The root post of the thread.",
"ref": "com.atproto.repo.strongRef",
"type": "ref"
}
},
"required": [
"root",
"parent"
],
"type": "object"
}
},
"id": "social.craftsky.feed.post",
"lexicon": 1
}
Metadata
- DID
-
did:plc:lmmx63zcns6gewgxqfdt4kof - CID
-
bafyreigehjannnykaehwvnhet5v4b4cjhoxn4veip7bvy7lyx22ytw7sgq - Indexed At
- 2026-10-12 12:51 UTC
- AT-URI
-
at://did:plc:lmmx63zcns6gewgxqfdt4kof/com.atproto.lexicon.schema/social.craftsky.feed.post
Referenced Schemas (4)
Similar Lexicons
Lexicons whose schemas describe something close to this one. Check them before publishing a new one that overlaps.
-
net.anisota.feed.post record
A post that can be created in the world of Anisota
-
blue.backyard.feed.post record
An original post in a user's Backyard feed. Content is structured as an ordered array of blocks (text, images, embeds) to support inline media.
-
app.bsky.feed.post record
Record containing a Bluesky post.
-
Record containing a Bluesky post.
-
so.sprk.feed.post record
Record containing a Spark post.