Search...Search plugins and themes...
⌘K
Sign in
  • Get started
  • Download
  • Pricing
  • Enterprise
  • Account
  • Obsidian
  • Overview
  • Sync
  • Publish
  • Canvas
  • Mobile
  • Web Clipper
  • CLI
  • Learn
  • Help
  • Developers
  • Changelog
  • About
  • Roadmap
  • Blog
  • Resources
  • System status
  • License overview
  • Terms of service
  • Privacy policy
  • Security
  • Community
  • Plugins
  • Themes
  • Discord
  • Forum / 中文论坛
  • Merch store
  • Brand guidelines
Follow us
DiscordTwitterBlueskyThreadsMastodonYouTubeGitHub
© 2026 Obsidian

Self-Hosted Note Share

Somonor HongSomonor Hong2 downloads

Publish a note to a public link on a server you run yourself.

Add to Obsidian
  • Overview
  • Scorecard
  • Updates2

Share a single Obsidian note as a public link. The note renders in any browser with syntax highlighting, GFM tables, callouts and its attachments — no Obsidian required on the other end.

https://notes.example.com/V1StGXR8_Z5jdHi6B-myT

Self-hosted. No telemetry, no third-party requests, no accounts for readers. Unsharing deletes the content.

What is in here

Path What it is
apps/api NestJS on Fastify: shares, attachments, API-key auth, rate limits
apps/web Next.js viewer: server-rendered, sanitized, cached
apps/plugin Obsidian plugin: share, update, copy link, unshare
packages/contracts zod schemas, types and route constants — the API contract
packages/config shared tsconfig, ESLint flat config, Prettier config

Quick start

Node 22+, pnpm 11, Docker.

pnpm install
pnpm dev:up                                       # postgres, redis, minio, migrations
cp apps/api/.env.example apps/api/.env
cp apps/web/.env.example apps/web/.env.local

pnpm --filter @share-note/api build
pnpm --filter @share-note/api cli create-user --email [email protected]

That last command prints an API key once. Put it, and http://localhost:3001, into the plugin's settings.

pnpm --filter @share-note/api dev      # http://localhost:3001  (/docs for OpenAPI)
pnpm --filter @share-note/web dev      # http://localhost:3000
pnpm --filter @share-note/plugin dev   # rebuilds main.js on change

To try the plugin, symlink apps/plugin into a vault:

ln -s "$PWD/apps/plugin" /path/to/vault/.obsidian/plugins/self-hosted-note-share

Run everything the way CI does:

pnpm verify                                   # lint + typecheck + test + build
pnpm --filter @share-note/api test:integration        # needs the compose stack

For a real deployment, see self-hosting.

How it works

The plugin reads a note, strips its frontmatter, and POSTs the title and markdown to the API, which stores it under a 21-character CSPRNG slug and returns the public URL. Attachments the note embeds are uploaded separately, identified by their magic bytes rather than their extension, and stored in S3-compatible object storage behind a StoragePort. The viewer server-renders the note through a unified/remark/rehype pipeline that sanitizes before it highlights, under a CSP whose script-src is nonce-only. Re-sharing PUTs to the same id, so the URL never changes; unsharing deletes the row and its objects.

Three layers in the API — controller, service, repository/port — with every authorization check in the service layer, where it is unit-testable without a request object.

Security

The sharp edges are rendering one person's markdown into another person's browser, and making sure a link nobody was given cannot be found. Both are covered in the threat model, which maps each threat to what answers it and says what is deliberately not defended.

Found something? Please report it privately rather than opening an issue.

Documentation

  • Architecture and threat model
  • API reference and a curl walkthrough
  • Self-hosting
  • Releasing
  • Decisions — why things are the way they are
  • Roadmap and known limitations

Licence

MIT.

HealthExcellent
ReviewCaution
About
Share a single Obsidian note as a public, self-hosted web link that renders Markdown with syntax highlighting, GFM tables, callouts, and attachments in any browser. Keep hosting private with no telemetry or third-party requests, let readers view without accounts, and unshare to delete the published content.
PublishingAttachments
Details
Current version
0.2.0
Last updated
4 hours ago
Created
16 hours ago
Updates
2 releases
Downloads
2
Compatible with
Obsidian 1.5.0+
Platforms
Desktop, Mobile
License
MIT
Report bugRequest featureReport plugin
Author
Somonor HongSomonor Hongcachewraith
GitHubcachewraith
  1. Community
  2. Plugins
  3. Publishing
  4. Self-Hosted Note Share

Related plugins

Share Note

Instantly share/publish a note, with the full theme and content exactly like you see in Obsidian. Data is shared encrypted by default, and only you and the person you send it to have the key.

MP Publisher

Preview with custom CSS themes and publish articles to WeChat Official Accounts with one click.

Document Exporter

Export notes, folders, and query results into Markdown bundles, HTML documents, and print-ready exports.

TTRPG Tools - Publish

Generates publish.js/publish.css and a publish-assets manifest for TTRPG Tools: Maps (Zoom Map).

Consistent Attachments and Links

Move note attachments and update links automatically.

Ink

Handwriting and drawing directly between paragraphs using a digital pen, stylus, or Apple pencil.

YAOS

Simple real-time sync powered by your own Cloudflare Worker.

Imagine

A comprehensive image management plugin for managing, inserting, resizing, viewing, and batch processing images.

Pixel Perfect Image

Pixel perfect 100% image resizing, copy to clipboard, show image in Finder/Explorer, and much more.

Local Images Plus

A reincarnation of Local Images to download images in Markdown notes to local storage.