bvn1324 downloadsPublishes a note (with its images) to a private GitHub repo and creates a UUID-only public link rendered by a Cloudflare Worker.
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.
Obsidian vault ──(GitHub API, your PAT)──▶ your private GitHub repo
│
▼
worker reads the repo and renders
https://<your-worker>/v/<uuid>
uuid
stored in its properties (frontmatter). If absent, one is generated.<root>/<uuid>/index.md plus the images into the same folder of your
private repo.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:
Contents: Read and write
scoped to that repository.Settings → Community plugins → Browse → search for Note publisher → Install → Enable.
manifest.json and main.js from the
latest release.<vault>/.obsidian/plugins/note-publisher/.Open Settings → Note publisher and fill in:
| Setting | Description | Default |
|---|---|---|
| Personal Access Token (write) | Fine-grained PAT with Contents: Read and write. Stored locally in this vault only. |
— |
| Owner | GitHub user or organization that owns the repo. | — |
| Repository | Private repository name. | — |
| Branch | Branch to commit to. | main |
| Root directory | Path in the repo under which each document gets its own folder. | docs |
| Worker base URL | Public URL of your worker, no trailing slash. | — |
| UUID property | Note property that stores the document UUID. | publish_uuid |
| Link property | Note property that stores the public URL after publishing. | public_url |
Open the command palette and run one of:
For reviewers and privacy-conscious users, here is exactly what the plugin does over the network:
api.github.com,
authenticated with your own fine-grained token, to create, list, and delete
files in your private repository.<worker>/v/<uuid>. The worker independently reads the notes
from your GitHub repo — the plugin never talks to it..obsidian/plugins/note-publisher/data.json) and is never committed to your
repo or sent anywhere except GitHub's own API.requestUrl, so the plugin works on desktop
without CORS workarounds.MIT — see LICENSE.