Sync your Obsidian vault to an atproto PDS community.obsidian.md/plugins/pds-sync
0

Configure Feed

Select the types of activity you want to include in your feed.

lexicon: add the note schema and vendored dependency lexicons

author
moshyfawn
date (Jun 11, 2026, 5:42 PM -0400) commit 407f7ad9 parent 9cad6834 change-id syskmutx
+696
+1
.gitignore
··· 1 1 # build output 2 2 main.js 3 3 *.js.map 4 + src/lexicons/ 4 5 5 6 # deps 6 7 node_modules/
+43
lexicons.json
··· 1 + { 2 + "version": 1, 3 + "lexicons": [ 4 + "at.markpub.markdown", 5 + "at.markpub.text", 6 + "site.standard.document", 7 + "site.standard.publication" 8 + ], 9 + "resolutions": { 10 + "at.markpub.markdown": { 11 + "uri": "at://did:plc:kfxbexqtvw76572grhv2f3on/com.atproto.lexicon.schema/at.markpub.markdown", 12 + "cid": "bafyreie54ai2jwjnmuv524xwifld3glpqtutxz7ufnw2abu3pbct35dr7a" 13 + }, 14 + "at.markpub.text": { 15 + "uri": "at://did:plc:kfxbexqtvw76572grhv2f3on/com.atproto.lexicon.schema/at.markpub.text", 16 + "cid": "bafyreicq255g6olx2e3hbkzstyplckjjg7adkfkxcgjzxp6t3t6wlsalwa" 17 + }, 18 + "com.atproto.label.defs": { 19 + "uri": "at://did:plc:6msi3pj7krzih5qxqtryxlzw/com.atproto.lexicon.schema/com.atproto.label.defs", 20 + "cid": "bafyreidp2wpcbzl2qiob2uwoc7lhntojx3tjcr553mmahw2f5cumtm3wpm" 21 + }, 22 + "com.atproto.repo.strongRef": { 23 + "uri": "at://did:plc:6msi3pj7krzih5qxqtryxlzw/com.atproto.lexicon.schema/com.atproto.repo.strongRef", 24 + "cid": "bafyreifrkdbnkvfjujntdaeigolnrjj3srrs53tfixjhmacclps72qlov4" 25 + }, 26 + "site.standard.document": { 27 + "uri": "at://did:plc:re3ebnp5v7ffagz6rb6xfei4/com.atproto.lexicon.schema/site.standard.document", 28 + "cid": "bafyreifylc5lfr4vqfzrwdtqm4pnfg7cbra7z4acbgikylqandzefwdeaq" 29 + }, 30 + "site.standard.publication": { 31 + "uri": "at://did:plc:re3ebnp5v7ffagz6rb6xfei4/com.atproto.lexicon.schema/site.standard.publication", 32 + "cid": "bafyreiapvnarfn3nl2wvg27hsylli5zqvou7a74p7od5mu4detprtejapy" 33 + }, 34 + "site.standard.theme.basic": { 35 + "uri": "at://did:plc:re3ebnp5v7ffagz6rb6xfei4/com.atproto.lexicon.schema/site.standard.theme.basic", 36 + "cid": "bafyreiabm6f64zosv5jcdmwd3qvekjhoi7enevg53rxj734ney4sd6lmku" 37 + }, 38 + "site.standard.theme.color": { 39 + "uri": "at://did:plc:re3ebnp5v7ffagz6rb6xfei4/com.atproto.lexicon.schema/site.standard.theme.color", 40 + "cid": "bafyreicps42z5maxdqwml7t3klsrrpk332jthyfgpeb4zjn3wlvp5vyjia" 41 + } 42 + } 43 + }
+48
lexicons/at/markpub/markdown.json
··· 1 + { 2 + "id": "at.markpub.markdown", 3 + "defs": { 4 + "main": { 5 + "type": "object", 6 + "required": [ 7 + "text" 8 + ], 9 + "properties": { 10 + "text": { 11 + "ref": "at.markpub.text", 12 + "type": "ref", 13 + "description": "An object that includes the text in markdown. May include anything that is valid markdown syntax for your flavor. Make sure it is properly escaped if necessary." 14 + }, 15 + "flavor": { 16 + "type": "string", 17 + "description": "Markdown may be rendered in many flavors. The most common are CommonMark and Github Flavored Markdown (GFM). Generally your markdown is one of those two and if you don't know then it is likely CommonMark. At this time the lexicon only recognizes these two flavors. Submit a PR if you think one should be added.", 18 + "knownValues": [ 19 + "gfm", 20 + "commonmark" 21 + ] 22 + }, 23 + "extensions": { 24 + "type": "array", 25 + "items": { 26 + "type": "string" 27 + }, 28 + "description": "The Markdown community expects certain extensions to mainline Markdown flavors. This setting allows you to note to a renderer what extensions might be expected. The most common is LaTeX. Rendering systems may choose to render these extensions in a variety of ways or present them raw. It is not required that you include YAML in the markdown text itself, if you choose to include a YAML metadata block, note it in this field." 29 + }, 30 + "frontMatter": { 31 + "type": "array", 32 + "items": { 33 + "refs": [], 34 + "type": "union", 35 + "closed": false 36 + }, 37 + "description": "If your markdown includes a front matter block, you can include it here as a set of objects describing the data. This is optional but may be more convenient for some systems to have it separate. It is expected that if you include this field that the front matter block is not included in the raw markdown text field. It would likely be parsed out of a YAML block and transformed into this array of objects or an array holding a single object." 38 + }, 39 + "renderingRules": { 40 + "type": "string", 41 + "description": "Using this field is highly suggested. Different rendering systems for Markdown may introduce slight or significant changes to the resulting HTML. This setting allows you to specify your renderer so systems can understand the rules you expect. Keep in mind that no consuming entity is obligated to honor this preference. While rendering views may infer rules established by different Markdown renderers with this field, they can and should use the rendering system of their choice. Do **not** use rendering systems you don't know. Some examples might be `marked`, `pandoc`, `markdown-it` `mdxt`, etc. Generally, this lexicon assumes that you are pulling the Markdown from an existing site that includes an existing rendering process. The processor used for that process to build your site's pages is the one you should include here. If you don't know then just leave this field out." 42 + } 43 + } 44 + } 45 + }, 46 + "$type": "com.atproto.lexicon.schema", 47 + "lexicon": 1 48 + }
+45
lexicons/at/markpub/text.json
··· 1 + { 2 + "id": "at.markpub.text", 3 + "defs": { 4 + "main": { 5 + "type": "object", 6 + "required": [ 7 + "markdown" 8 + ], 9 + "properties": { 10 + "facets": { 11 + "type": "array", 12 + "items": { 13 + "refs": [], 14 + "type": "union", 15 + "closed": false 16 + }, 17 + "description": "Facets here represent rendered versions of Markdown strings. A bold Markdown string `**bold**` might be represented by a richtext facet of #bold, in which case it is suggested to be presented without the Markdown markup as `<strong>bold</strong>`. Facets select their character ranges based on position in the Markdown text but should be rendered without the related characters. For example: `### Header` will be selected using a character range that includes the hashes like (0,9) but will be rendered without the hashes like `<h3>Header</h3>`. It is recommended that processors to not transform in-place for this reason. The goal of having an open union for facets is that constructing systems may choose to use the facets they prefer from across the ecosystem, either here or in other places like `pub.leaflet.richtext.facet`" 18 + }, 19 + "lenses": { 20 + "type": "array", 21 + "items": { 22 + "refs": [], 23 + "type": "union", 24 + "closed": false 25 + }, 26 + "description": "Lenses are lexicons that define translatable facets for rendering layers with limited facets. `pub.leaflet.richtext.facet#bold` and `at.markpub.facets.baseFormatting#strong` expect the same output. A lens would then include a union with both those facets and a renderer that understands either of them could translate between the two." 27 + }, 28 + "markdown": { 29 + "type": "string", 30 + "description": "The raw text in markdown. May include anything that is valid markdown syntax for your flavor. Make sure it is properly escaped if necessary." 31 + }, 32 + "textBlob": { 33 + "type": "blob", 34 + "accept": [ 35 + "text/*" 36 + ], 37 + "maxSize": 1000000, 38 + "description": "Text may be blob-ified as raw Markdown and stored on a PDS, pass it here by reference. If you use this property it is assumed that it overrides the \"rawMarkdown\" property. It is a PDS address for a markdown text file. You still must provide some value, even if it is a preview for \"rawMarkdown\" in this field." 39 + } 40 + } 41 + } 42 + }, 43 + "$type": "com.atproto.lexicon.schema", 44 + "lexicon": 1 45 + }
+190
lexicons/com/atproto/label/defs.json
··· 1 + { 2 + "id": "com.atproto.label.defs", 3 + "defs": { 4 + "label": { 5 + "type": "object", 6 + "required": [ 7 + "src", 8 + "uri", 9 + "val", 10 + "cts" 11 + ], 12 + "properties": { 13 + "cid": { 14 + "type": "string", 15 + "format": "cid", 16 + "description": "Optionally, CID specifying the specific version of 'uri' resource this label applies to." 17 + }, 18 + "cts": { 19 + "type": "string", 20 + "format": "datetime", 21 + "description": "Timestamp when this label was created." 22 + }, 23 + "exp": { 24 + "type": "string", 25 + "format": "datetime", 26 + "description": "Timestamp at which this label expires (no longer applies)." 27 + }, 28 + "neg": { 29 + "type": "boolean", 30 + "description": "If true, this is a negation label, overwriting a previous label." 31 + }, 32 + "sig": { 33 + "type": "bytes", 34 + "description": "Signature of dag-cbor encoded label." 35 + }, 36 + "src": { 37 + "type": "string", 38 + "format": "did", 39 + "description": "DID of the actor who created this label." 40 + }, 41 + "uri": { 42 + "type": "string", 43 + "format": "uri", 44 + "description": "AT URI of the record, repository (account), or other resource that this label applies to." 45 + }, 46 + "val": { 47 + "type": "string", 48 + "maxLength": 128, 49 + "description": "The short string name of the value or type of this label." 50 + }, 51 + "ver": { 52 + "type": "integer", 53 + "description": "The AT Protocol version of the label object." 54 + } 55 + }, 56 + "description": "Metadata tag on an atproto resource (eg, repo or record)." 57 + }, 58 + "selfLabel": { 59 + "type": "object", 60 + "required": [ 61 + "val" 62 + ], 63 + "properties": { 64 + "val": { 65 + "type": "string", 66 + "maxLength": 128, 67 + "description": "The short string name of the value or type of this label." 68 + } 69 + }, 70 + "description": "Metadata tag on an atproto record, published by the author within the record. Note that schemas should use #selfLabels, not #selfLabel." 71 + }, 72 + "labelValue": { 73 + "type": "string", 74 + "knownValues": [ 75 + "!hide", 76 + "!warn", 77 + "!no-unauthenticated", 78 + "porn", 79 + "sexual", 80 + "nudity", 81 + "graphic-media", 82 + "bot" 83 + ] 84 + }, 85 + "selfLabels": { 86 + "type": "object", 87 + "required": [ 88 + "values" 89 + ], 90 + "properties": { 91 + "values": { 92 + "type": "array", 93 + "items": { 94 + "ref": "#selfLabel", 95 + "type": "ref" 96 + }, 97 + "maxLength": 10 98 + } 99 + }, 100 + "description": "Metadata tags on an atproto record, published by the author within the record." 101 + }, 102 + "labelValueDefinition": { 103 + "type": "object", 104 + "required": [ 105 + "identifier", 106 + "severity", 107 + "blurs", 108 + "locales" 109 + ], 110 + "properties": { 111 + "blurs": { 112 + "type": "string", 113 + "description": "What should this label hide in the UI, if applied? 'content' hides all of the target; 'media' hides the images/video/audio; 'none' hides nothing.", 114 + "knownValues": [ 115 + "content", 116 + "media", 117 + "none" 118 + ] 119 + }, 120 + "locales": { 121 + "type": "array", 122 + "items": { 123 + "ref": "#labelValueDefinitionStrings", 124 + "type": "ref" 125 + } 126 + }, 127 + "severity": { 128 + "type": "string", 129 + "description": "How should a client visually convey this label? 'inform' means neutral and informational; 'alert' means negative and warning; 'none' means show nothing.", 130 + "knownValues": [ 131 + "inform", 132 + "alert", 133 + "none" 134 + ] 135 + }, 136 + "adultOnly": { 137 + "type": "boolean", 138 + "description": "Does the user need to have adult content enabled in order to configure this label?" 139 + }, 140 + "identifier": { 141 + "type": "string", 142 + "maxLength": 100, 143 + "description": "The value of the label being defined. Must only include lowercase ascii and the '-' character ([a-z-]+).", 144 + "maxGraphemes": 100 145 + }, 146 + "defaultSetting": { 147 + "type": "string", 148 + "default": "warn", 149 + "description": "The default setting for this label.", 150 + "knownValues": [ 151 + "ignore", 152 + "warn", 153 + "hide" 154 + ] 155 + } 156 + }, 157 + "description": "Declares a label value and its expected interpretations and behaviors." 158 + }, 159 + "labelValueDefinitionStrings": { 160 + "type": "object", 161 + "required": [ 162 + "lang", 163 + "name", 164 + "description" 165 + ], 166 + "properties": { 167 + "lang": { 168 + "type": "string", 169 + "format": "language", 170 + "description": "The code of the language these strings are written in." 171 + }, 172 + "name": { 173 + "type": "string", 174 + "maxLength": 640, 175 + "description": "A short human-readable name for the label.", 176 + "maxGraphemes": 64 177 + }, 178 + "description": { 179 + "type": "string", 180 + "maxLength": 100000, 181 + "description": "A longer description of what the label means and why it might be applied.", 182 + "maxGraphemes": 10000 183 + } 184 + }, 185 + "description": "Strings which describe the label in the UI, localized into a specific language." 186 + } 187 + }, 188 + "$type": "com.atproto.lexicon.schema", 189 + "lexicon": 1 190 + }
+25
lexicons/com/atproto/repo/strongRef.json
··· 1 + { 2 + "id": "com.atproto.repo.strongRef", 3 + "defs": { 4 + "main": { 5 + "type": "object", 6 + "required": [ 7 + "uri", 8 + "cid" 9 + ], 10 + "properties": { 11 + "cid": { 12 + "type": "string", 13 + "format": "cid" 14 + }, 15 + "uri": { 16 + "type": "string", 17 + "format": "at-uri" 18 + } 19 + } 20 + } 21 + }, 22 + "$type": "com.atproto.lexicon.schema", 23 + "lexicon": 1, 24 + "description": "A URI with a content-hash fingerprint." 25 + }
+126
lexicons/site/standard/document.json
··· 1 + { 2 + "id": "site.standard.document", 3 + "defs": { 4 + "main": { 5 + "key": "tid", 6 + "type": "record", 7 + "record": { 8 + "type": "object", 9 + "required": [ 10 + "site", 11 + "title", 12 + "publishedAt" 13 + ], 14 + "properties": { 15 + "path": { 16 + "type": "string", 17 + "description": "Combine with site or publication url to construct a canonical URL to the document. Prepend with a leading slash." 18 + }, 19 + "site": { 20 + "type": "string", 21 + "format": "uri", 22 + "description": "Points to a publication record (at://) or a publication url (https://) for loose documents. Avoid trailing slashes." 23 + }, 24 + "tags": { 25 + "type": "array", 26 + "items": { 27 + "type": "string", 28 + "maxLength": 1280, 29 + "maxGraphemes": 128 30 + }, 31 + "description": "Array of strings used to tag or categorize the document. Avoid prepending tags with hashtags." 32 + }, 33 + "links": { 34 + "refs": [], 35 + "type": "union", 36 + "description": "Array of values describing relationships between this document and external resources" 37 + }, 38 + "title": { 39 + "type": "string", 40 + "maxLength": 5000, 41 + "description": "Title of the document.", 42 + "maxGraphemes": 500 43 + }, 44 + "labels": { 45 + "refs": [ 46 + "com.atproto.label.defs#selfLabels" 47 + ], 48 + "type": "union", 49 + "description": "Self-label values for this post. Effectively content warnings." 50 + }, 51 + "content": { 52 + "refs": [], 53 + "type": "union", 54 + "closed": false, 55 + "description": "Open union used to define the record's content. Each entry must specify a $type and may be extended with other lexicons to support additional content formats." 56 + }, 57 + "updatedAt": { 58 + "type": "string", 59 + "format": "datetime", 60 + "description": "Timestamp of the documents last edit." 61 + }, 62 + "coverImage": { 63 + "type": "blob", 64 + "accept": [ 65 + "image/*" 66 + ], 67 + "maxSize": 1000000, 68 + "description": "Image to used for thumbnail or cover image. Less than 1MB is size." 69 + }, 70 + "bskyPostRef": { 71 + "ref": "com.atproto.repo.strongRef", 72 + "type": "ref", 73 + "description": "Strong reference to a Bluesky post. Useful to keep track of comments off-platform." 74 + }, 75 + "description": { 76 + "type": "string", 77 + "maxLength": 30000, 78 + "description": "A brief description or excerpt from the document.", 79 + "maxGraphemes": 3000 80 + }, 81 + "publishedAt": { 82 + "type": "string", 83 + "format": "datetime", 84 + "description": "Timestamp of the documents publish time." 85 + }, 86 + "textContent": { 87 + "type": "string", 88 + "description": "Plaintext representation of the documents contents. Should not contain markdown or other formatting." 89 + }, 90 + "contributors": { 91 + "type": "array", 92 + "items": { 93 + "ref": "#contributor", 94 + "type": "ref" 95 + } 96 + } 97 + } 98 + }, 99 + "description": "A document record representing a published article, blog post, or other content. Documents can belong to a publication or exist independently." 100 + }, 101 + "contributor": { 102 + "type": "object", 103 + "required": [ 104 + "did" 105 + ], 106 + "properties": { 107 + "did": { 108 + "type": "string", 109 + "format": "did" 110 + }, 111 + "role": { 112 + "type": "string", 113 + "maxLength": 1000, 114 + "maxGraphemes": 100 115 + }, 116 + "displayName": { 117 + "type": "string", 118 + "maxLength": 1000, 119 + "maxGraphemes": 100 120 + } 121 + } 122 + } 123 + }, 124 + "$type": "com.atproto.lexicon.schema", 125 + "lexicon": 1 126 + }
+73
lexicons/site/standard/publication.json
··· 1 + { 2 + "id": "site.standard.publication", 3 + "defs": { 4 + "main": { 5 + "key": "tid", 6 + "type": "record", 7 + "record": { 8 + "type": "object", 9 + "required": [ 10 + "url", 11 + "name" 12 + ], 13 + "properties": { 14 + "url": { 15 + "type": "string", 16 + "format": "uri", 17 + "description": "Base publication url (ex: https://standard.site). The canonical document URL is formed by combining this value with the document path." 18 + }, 19 + "icon": { 20 + "type": "blob", 21 + "accept": [ 22 + "image/*" 23 + ], 24 + "maxSize": 1000000, 25 + "description": "Square image to identify the publication. Should be at least 256x256." 26 + }, 27 + "name": { 28 + "type": "string", 29 + "maxLength": 5000, 30 + "description": "Name of the publication.", 31 + "maxGraphemes": 500 32 + }, 33 + "labels": { 34 + "refs": [ 35 + "com.atproto.label.defs#selfLabels" 36 + ], 37 + "type": "union", 38 + "description": "Self-label values for this publication. Effectively content warnings." 39 + }, 40 + "basicTheme": { 41 + "ref": "site.standard.theme.basic", 42 + "type": "ref", 43 + "description": "Simplified publication theme for tools and apps to utilize when displaying content." 44 + }, 45 + "description": { 46 + "type": "string", 47 + "maxLength": 30000, 48 + "description": "Brief description of the publication.", 49 + "maxGraphemes": 3000 50 + }, 51 + "preferences": { 52 + "ref": "#preferences", 53 + "type": "ref", 54 + "description": "Object containing platform specific preferences (with a few shared properties)." 55 + } 56 + } 57 + }, 58 + "description": "A publication record representing a blog, website, or content platform. Publications serve as containers for documents and define the overall branding and settings." 59 + }, 60 + "preferences": { 61 + "type": "object", 62 + "properties": { 63 + "showInDiscover": { 64 + "type": "boolean", 65 + "default": true, 66 + "description": "Boolean which decides whether the publication should appear in discovery feeds." 67 + } 68 + } 69 + } 70 + }, 71 + "$type": "com.atproto.lexicon.schema", 72 + "lexicon": 1 73 + }
+51
lexicons/site/standard/theme/basic.json
··· 1 + { 2 + "id": "site.standard.theme.basic", 3 + "defs": { 4 + "main": { 5 + "key": "tid", 6 + "type": "record", 7 + "record": { 8 + "type": "object", 9 + "required": [ 10 + "background", 11 + "foreground", 12 + "accent", 13 + "accentForeground" 14 + ], 15 + "properties": { 16 + "accent": { 17 + "refs": [ 18 + "site.standard.theme.color#rgb" 19 + ], 20 + "type": "union", 21 + "description": "Color used for links and button backgrounds." 22 + }, 23 + "background": { 24 + "refs": [ 25 + "site.standard.theme.color#rgb" 26 + ], 27 + "type": "union", 28 + "description": "Color used for content background." 29 + }, 30 + "foreground": { 31 + "refs": [ 32 + "site.standard.theme.color#rgb" 33 + ], 34 + "type": "union", 35 + "description": "Color used for content text." 36 + }, 37 + "accentForeground": { 38 + "refs": [ 39 + "site.standard.theme.color#rgb" 40 + ], 41 + "type": "union", 42 + "description": "Color used for button text." 43 + } 44 + } 45 + }, 46 + "description": "A simplified theme definition for publications, providing basic color customization for content display across different platforms and applications." 47 + } 48 + }, 49 + "$type": "com.atproto.lexicon.schema", 50 + "lexicon": 1 51 + }
+63
lexicons/site/standard/theme/color.json
··· 1 + { 2 + "id": "site.standard.theme.color", 3 + "defs": { 4 + "rgb": { 5 + "type": "object", 6 + "required": [ 7 + "r", 8 + "g", 9 + "b" 10 + ], 11 + "properties": { 12 + "b": { 13 + "type": "integer", 14 + "maximum": 255, 15 + "minimum": 0 16 + }, 17 + "g": { 18 + "type": "integer", 19 + "maximum": 255, 20 + "minimum": 0 21 + }, 22 + "r": { 23 + "type": "integer", 24 + "maximum": 255, 25 + "minimum": 0 26 + } 27 + } 28 + }, 29 + "rgba": { 30 + "type": "object", 31 + "required": [ 32 + "r", 33 + "g", 34 + "b", 35 + "a" 36 + ], 37 + "properties": { 38 + "a": { 39 + "type": "integer", 40 + "maximum": 100, 41 + "minimum": 0 42 + }, 43 + "b": { 44 + "type": "integer", 45 + "maximum": 255, 46 + "minimum": 0 47 + }, 48 + "g": { 49 + "type": "integer", 50 + "maximum": 255, 51 + "minimum": 0 52 + }, 53 + "r": { 54 + "type": "integer", 55 + "maximum": 255, 56 + "minimum": 0 57 + } 58 + } 59 + } 60 + }, 61 + "$type": "com.atproto.lexicon.schema", 62 + "lexicon": 1 63 + }
+31
lexicons/xyz/2877686/obsidian-pds-sync/note.json
··· 1 + { 2 + "lexicon": 1, 3 + "id": "xyz.2877686.obsidian-pds-sync.note", 4 + "defs": { 5 + "main": { 6 + "type": "record", 7 + "key": "tid", 8 + "description": "An end-to-end encrypted note. The ciphertext body is readable only with the user's passphrase-derived key.", 9 + "record": { 10 + "type": "object", 11 + "required": ["enc", "kdf", "data"], 12 + "properties": { 13 + "enc": { 14 + "type": "string", 15 + "description": "Symmetric cipher used for `data`.", 16 + "knownValues": ["AES-256-GCM"] 17 + }, 18 + "kdf": { 19 + "type": "string", 20 + "description": "Key-derivation function for the encryption key.", 21 + "knownValues": ["Argon2id"] 22 + }, 23 + "data": { 24 + "type": "bytes", 25 + "description": "Ciphertext: a 12-byte IV followed by the AES-256-GCM output." 26 + } 27 + } 28 + } 29 + } 30 + } 31 + }