Skip to content

Ray0907/obsidian-buffer

Repository files navigation

Buffer Publisher for Obsidian

Draft social media posts in Obsidian, send them to Buffer with one command — queue, schedule, or publish immediately across all your connected channels (X, LinkedIn, Instagram, TikTok, Threads, Bluesky, Mastodon, Facebook, Pinterest, YouTube, Google Business).

Built on Buffer's official GraphQL API.

Why

Your notes are where ideas start. Buffer's integrations cover Notion, n8n, Raycast, and every major AI assistant — but not Obsidian. This plugin closes that gap: write in your vault, publish without leaving it, and keep the note as a permanent record of what was posted where.

  • The note is the post — body text becomes the post content, frontmatter carries the config
  • The note is the audit trail — after sending, the post ID and status are written back into frontmatter
  • No double-posting — a note that already carries a buffer-post-id is blocked from resending

Setup

  1. Get a Buffer API key: buffer.comSettingsAPI → create a key (available on all plans, including Free)
  2. In Obsidian: Settings → Community plugins → Buffer Publisher → paste the key → hit Test
  3. You should see Connected ✓ — N channel(s) found

The API key is stored locally in your vault's plugin data and sent only to api.buffer.com.

Usage

  1. Open (or create) the note you want to post — the note body becomes the post text
  2. Run Insert Buffer channel into frontmatter (Cmd/Ctrl+P) and pick a channel
  3. Run Send current note to Buffer

That's it. By default the post is added to your Buffer queue (nothing publishes immediately unless you ask it to).

Frontmatter reference

---
buffer-channel: My LinkedIn      # channel name or ID (required — use the insert command)
buffer-mode: addToQueue          # optional, defaults to plugin setting
buffer-due: 2026-07-20T09:00     # required only when mode is customScheduled
---
Your post text goes here. Everything below the frontmatter is sent as-is.
Key Values Notes
buffer-channel channel name or ID Case-insensitive name match. Set it via the Insert Buffer channel command
buffer-mode shareNow · addToQueue · shareNext · customScheduled shareNext puts the post at the front of the queue
buffer-due ISO 8601 datetime Only used with customScheduled; converted to UTC automatically
buffer-draft true Save as a Buffer draft instead of scheduling — safe for pipelines you might re-run
buffer-thread true Split the note body on --- dividers into a thread (X/Twitter, Mastodon, Threads, Bluesky only)

Thread example — one note becomes a 2-post chain:

---
buffer-channel: My X account
buffer-thread: true
---
First post of the thread.

---

Second post. Add more `---` dividers for more posts.

| buffer-post-id | (written by plugin) | Set after a successful send; remove it to allow resending | | buffer-status | (written by plugin) | Post status returned by Buffer | | buffer-idea-ids | (written by plugin) | IDs of ideas captured from this note |

Commands

Command What it does
Send current note to Buffer Sends the active note's body to the channel in its frontmatter
Insert Buffer channel into frontmatter Fuzzy-search your connected channels, write the pick into buffer-channel
Save selection (or note) to Buffer Ideas Sends the selected text — or the whole note body if nothing is selected — to your Buffer Ideas board with a group picker; the note title becomes the idea title. Also available from the editor right-click menu when text is selected
Quick idea to Buffer Hotkey-able capture modal: type an idea, pick a group, Cmd/Ctrl+Enter — no note required
Show Buffer metrics sidebar Opens a right-sidebar panel showing per-post performance for the active note
Show Buffer ideas sidebar Browse your Ideas board from Obsidian, grouped by idea group; click an idea to insert its text at the cursor
Update Buffer post from note Edit the note, run this, and the still-unpublished post is updated in place — scheduling is carried forward unchanged
Cancel Buffer post (delete) Deletes the post referenced by buffer-post-id and clears the frontmatter so the note can be sent again

Metrics sidebar

Open any note that has been sent to Buffer (it carries a buffer-post-id) and run Show Buffer metrics sidebar. The panel shows the post's status and, once Buffer's daily ingestion has run, its performance metrics (reactions, comments, and network-specific numbers like reach, impressions, clicks, engagement rate where the platform provides them). It follows the active note as you switch files.

Settings

Setting Default Notes
Buffer API key Required. Generate at buffer.com → Settings → API
Default share mode addToQueue Used when a note has no buffer-mode key

Install

Beta (now): install via BRAT — add Ray0907/obsidian-buffer as a beta plugin.

Manual: download main.js + manifest.json from the latest release into <vault>/.obsidian/plugins/buffer-publisher/, then enable the plugin in Settings → Community plugins.

Known limitations

  • Text-only posts — image/video attachments not yet supported (on the roadmap)
  • One channel per note — multi-channel fan-out is planned
  • No length validation — the plugin sends your full note body; platform character limits (e.g. X's 280) are enforced by Buffer's API, which returns a clear error
  • Instagram/TikTok/YouTube posts are sent with schedulingType: automatic; Buffer may require additional metadata for some post types on those platforms

Roadmap

  • Post performance metrics in a sidebar (v0.2)
  • Save ideas to the Buffer Ideas board (v0.2)
  • Idea groups, quick capture, ideas browser (v0.3)
  • Drafts, edit-in-place, cancel/delete, threads from note dividers (v0.4)
  • Multi-channel fan-out from a single note
  • Idea → post conversion from the ideas sidebar
  • Image/video attachments from vault files (blocked on Buffer's planned media overhaul — the API currently requires already-public URLs that stay live until publish time)
  • Pre-send character-count check against the target platform's limit
  • LLM-as-judge draft scoring before publish (pre-publish quality gate)

Troubleshooting

Symptom Fix
Add buffer-channel to frontmatter… The active note has no buffer-channel key — the insert command writes to whichever note is open when you run it
Channel not found: … The name in frontmatter doesn't match any connected channel; re-run the insert command
Channel "…" is disconnected Reconnect the channel inside Buffer
Already sent to Buffer (post …) Intentional double-post guard — delete buffer-post-id from frontmatter to resend
Buffer API HTTP 401 API key is wrong or was revoked; generate a new one

Development

npm install
npm run dev     # watch build
npm run build   # type-check + production build (main.js)

Copy main.js + manifest.json into <vault>/.obsidian/plugins/buffer-publisher/ to test locally.

GraphQL operation shapes were verified against Buffer's official buffer-n8n node, the API reference, and live end-to-end testing against a real account (every command in this README has been exercised against the production API).

Disclaimer

This is a community plugin, not an official Buffer product. It talks only to Buffer's public API with your own API key.

License

MIT

About

Obsidian plugin: draft posts in your notes, send them to Buffer via the official GraphQL API

Resources

License

Stars

0 stars

Watchers

0 watching

Forks

Packages

 
 
 

Contributors