···11+# ATProto Publisher for Obsidian
22+33+Publish Obsidian notes to AT Protocol records, including the Standard.site long-form lexicon.
44+55+## Features
66+77+- Publish a single note or all notes marked as published.
88+- Supports Standard.site `site.standard.document` records.
99+- Auto-creates a `site.standard.publication` record when needed.
1010+- Writes back ATProto metadata to frontmatter for future updates.
1111+1212+## Setup
1313+1414+1. Install the plugin in your vault.
1515+2. Open Obsidian settings and configure **ATProto Publisher**:
1616+ - Identifier (handle or email)
1717+ - App password
1818+ - Service URL (PDS)
1919+ - Collection NSID
2020+ - Publication URL or AT-URI (for Standard.site)
2121+2222+## Usage
2323+2424+- Command palette:
2525+ - **Publish current note to ATProto**
2626+ - **Publish all notes marked as published**
2727+2828+### Frontmatter keys
2929+3030+Default keys used by the plugin (customizable in settings):
3131+3232+```yaml
3333+published: true
3434+slug: my-article
3535+title: My Article
3636+summary: A short summary.
3737+tags: [writing, obsidian]
3838+```
3939+4040+Metadata written back after publishing:
4141+4242+```yaml
4343+atprotoUri: at://did:plc.../site.standard.document/...
4444+atprotoCid: ...
4545+atprotoCollection: site.standard.document
4646+atprotoRkey: ...
4747+atprotoPublishedAt: 2026-01-24T10:20:30.000Z
4848+atprotoUpdatedAt: 2026-01-24T10:20:30.000Z
4949+```
5050+5151+## Standard.site mode
5252+5353+To publish Standard.site documents:
5454+5555+1. Set **Collection NSID** to `site.standard.document`.
5656+2. Set **Publication URL or AT-URI** to your site URL (e.g. `https://example.com`).
5757+3. Optionally set **Publication name** and **Publication description**.
5858+5959+On first publish the plugin will look for a matching publication record in your repo. If it does not exist, it will create one and store its AT-URI in settings.
6060+6161+## Development
6262+6363+```bash
6464+npm install
6565+npm run build
6666+```
6767+6868+To create a distributable folder:
6969+7070+```bash
7171+npm run package
7272+```
+2-2
src/main.ts
···119119120120 this.addCommand({
121121 id: "publish-all-notes-atproto",
122122- name: "Publish all notes marked published",
122122+ name: "Publish all notes marked as published",
123123 callback: () => {
124124 void this.publishAllPublished();
125125 }
···151151 for (const file of publishedFiles) {
152152 await this.publishFile(file, true);
153153 }
154154- new Notice("ATProto publish finished.");
154154+ new Notice("ATProto publish complete.");
155155 }
156156157157 private async publishFile(file: TFile, suppressNotices = false) {