# Pagecord Install Pagecord from the Obsidian community plugin directory: https://community.obsidian.md/plugins/pagecord Publish notes from Obsidian to your [Pagecord](https://pagecord.com) blog. Write in Obsidian, hit a command, done. Supports images, frontmatter, and drafts. ## Features - Publish notes as blog posts or drafts - Update existing posts (tracks via frontmatter) - Upload embedded images automatically - Publish to multiple configured Pagecord blogs - Read title, slug, tags, and more from frontmatter ## Installation In Obsidian, go to **Settings → Community Plugins → Browse** and search for **Pagecord**. ## Setup 1. Enable the API in your Pagecord blog settings 2. Copy your API key 3. In Obsidian, go to **Settings → Pagecord** 4. Under **Pagecord Blog Connections**, click the **+** icon 5. Enter a blog name and API key, then click **Save** Use the edit and delete icons beside a connection to update or remove it. Deleting a connection only removes it from Obsidian settings; it does not delete the Pagecord blog. ## Commands Open the command palette (`Cmd/Ctrl + P`) and run: - **Publish to Blog Name** – creates or updates the post as published - **Publish to Blog Name (draft)** – creates or updates the post as a draft Commands are only available when a markdown file is active. One pair of commands is shown for each saved blog connection. ## Frontmatter You can use YAML frontmatter to override post metadata: ```yaml --- title: My Post Title slug: my-post-title tags: [personal, update] published_at: 2025-01-15T10:00:00Z canonical_url: https://example.com/original hidden: false locale: en --- ``` | Field | Usage | |-------|-------| | `title` | Post title (falls back to filename). Leave the value blank (`title:` or `title: ""`) to publish without a title | | `slug` | URL slug (auto-generated by Pagecord if omitted) | | `tags` | Array or comma-separated string | | `published_at` | ISO 8601 timestamp | | `canonical_url` | Canonical URL for the post | | `hidden` | `true` to hide from the feed | | `locale` | Post language code | All fields are optional. You do not need frontmatter for the basics: the plugin uses the note filename as the default title, Pagecord generates the slug if you omit one, and the command you run chooses whether the post is published or saved as a draft. Add `tags` explicitly if you want tags on the post, and use the other fields only when you want to change the defaults. After publishing, the plugin adds metadata to your frontmatter automatically: - `pagecord_token` – links the note to the Pagecord post so future publishes update it instead of creating a duplicate - `pagecord_blog_fingerprint` – links the note to the configured Pagecord blog used for publishing. It does not contain your API key - `pagecord_attachments` – caches uploaded image hashes so unchanged images aren't re-uploaded - `status` – records the last status used by the publish command These fields are managed by the plugin. Deleting `pagecord_token` will cause the next publish to create a new post. Existing notes published before multi-blog support still work; the plugin adds `pagecord_blog_fingerprint` after the next successful update. ## Images For images you want Pagecord to host, drag the image into Obsidian or otherwise add it as a local file in your vault, then embed it in the note. Both Obsidian image syntaxes are supported: - `![[photo.jpg]]` (wiki-style) - `![](photo.jpg)` (markdown-style) Vault-local images are uploaded to Pagecord and embedded in the post automatically. The plugin sends each file to the Pagecord attachments API, receives an `attachable_sgid`, and replaces the Markdown image reference with the Action Text attachment tag Pagecord needs. External Markdown images, such as `![](https://example.com/photo.jpg)`, are left as normal Markdown image tags. They will reference the external image URL and are not uploaded to Pagecord. Supported upload formats: JPEG, PNG, GIF, WebP. ## Building from Source ``` git clone https://github.com/lylo/obsidian-pagecord.git cd obsidian-pagecord npm install npm run build ``` Copy `main.js` and `manifest.json` to your vault's `.obsidian/plugins/pagecord/` directory. ## Local Development The plugin sends requests to `https://api.pagecord.com` by default. To point a local test install at another Pagecord API host, add a `baseUrl` value to the plugin's Obsidian data file. The data file lives inside your vault: ``` /.obsidian/plugins/pagecord/data.json ``` For a local Pagecord environment, it should look like this: ```json { "baseUrl": "http://api.localhost:3000", "blogs": [ { "name": "Local test blog", "apiKey": "your-api-key" } ] } ``` If Obsidian has already saved your Pagecord settings, keep the existing `blogs` array and add only the top-level `baseUrl` field. ## License [MIT](LICENSE)