Note publisher

approved

by bvn13

Publishes a note (with its images) to a private GitHub repo and creates a UUID-only public link rendered by a Cloudflare Worker. - This plugin has not been manually reviewed by Obsidian staff.

24 downloadsUpdated 22d agoMIT

Note publisher

Publish a single Obsidian note — together with its embedded images — to your own private GitHub repository, and get a clean, UUID-only public link that is rendered by a small worker you host yourself.

The plugin is a thin client. There is no vendor backend: the author has no access to your notes, your GitHub token, or your repository. Everything runs between your vault, your GitHub repo, and the worker you deploy.

How it works

Obsidian vault ──(GitHub API, your PAT)──▶ your private GitHub repo
                                                   │
                                                   ▼
                                    worker reads the repo and renders
                                    https://<your-worker>/v/<uuid>
  1. When you publish a note, the plugin ensures the note has a stable uuid stored in its properties (frontmatter). If absent, one is generated.
  2. It reads the note body, collects the embedded images, and rewrites the embeds to relative filenames.
  3. Using your fine-grained GitHub token, it commits the document as <root>/<uuid>/index.md plus the images into the same folder of your private repo.
  4. The public link https://<your-worker>/v/<uuid> is written back into the note's properties and copied to your clipboard.

The worker that turns <uuid> into a readable page is deployed by you. Two reference implementations are available:

Requirements

  • A private GitHub repository to hold the published documents.
  • A fine-grained Personal Access Token with Contents: Read and write scoped to that repository.
  • A deployed worker (Cloudflare or self-hosted — see the links above) that has read access to the same repository and renders the public pages.

Installation

From Community Plugins (once approved)

Settings → Community plugins → Browse → search for Note publisher → Install → Enable.

Manual

  1. Download manifest.json and main.js from the latest release.
  2. Copy them into <vault>/.obsidian/plugins/note-publisher/.
  3. Reload Obsidian and enable the plugin in Settings → Community plugins.

Configuration

Open Settings → Note publisher and fill in:

SettingDescriptionDefault
Personal Access Token (write)Fine-grained PAT with Contents: Read and write. Stored locally in this vault only.
OwnerGitHub user or organization that owns the repo.
RepositoryPrivate repository name.
BranchBranch to commit to.main
Root directoryPath in the repo under which each document gets its own folder.docs
Worker base URLPublic URL of your worker, no trailing slash.
UUID propertyNote property that stores the document UUID.publish_uuid
Link propertyNote property that stores the public URL after publishing.public_url

Usage

Open the command palette and run one of:

  • Publish current note — uploads the note and its images to the private repo and copies the public link.
  • Unpublish current note — deletes the note's folder from the repo, so the public link goes dead. The note keeps its UUID.
  • Copy public link — copies the already-published link from the note's properties.

Privacy & network usage

For reviewers and privacy-conscious users, here is exactly what the plugin does over the network:

  • The plugin makes outbound requests to one host only: api.github.com, authenticated with your own fine-grained token, to create, list, and delete files in your private repository.
  • The plugin does not send your note content to the worker. It only builds the link string <worker>/v/<uuid>. The worker independently reads the notes from your GitHub repo — the plugin never talks to it.
  • No telemetry, no analytics, no calls to any author-controlled server.
  • Your GitHub token is stored locally in the vault (.obsidian/plugins/note-publisher/data.json) and is never committed to your repo or sent anywhere except GitHub's own API.
  • All requests use Obsidian's requestUrl, so the plugin works on desktop without CORS workarounds.

License

MIT — see LICENSE.

For plugin developers

Search results and similarity scores are powered by semantic analysis of your plugin's README. If your plugin isn't appearing for searches you'd expect, try updating your README to clearly describe your plugin's purpose, features, and use cases.