Turn a Markdown note into a focused, shareable workspace. MD Share lets you open one note in the browser, invite collaborators, and edit together live, while your vault stays self-hosted and under your control.
MD Share is built for the moment when a note needs input from someone else. Choose a note, create a private link, and bring collaborators into the browser without exposing your entire Obsidian vault.
- 🔗 Create a private, tokenized link for one Markdown note
- ✍️ Collaborate live in the browser with participant names and cursors
- 👀 Keep the rendered Markdown preview close to the editor
- 🖼️ Display local note images without exposing raw filesystem paths
- 📋 Paste or drop images into a note and keep them beside the Markdown file
- ⚡ Type
/in the editor for headings, formatting, lists, tables, and image uploads - 🗂️ Manage notes, links, and exports from a focused admin workspace
- 🔒 Keep your vault and admin surface private
- 🐳 Run the whole experience locally with Docker Compose
See CHANGELOG.md for what changed in each release.
- Admin UI:
http://localhost:3020 - Public editor:
http://localhost:3021 - Project page: https://marcelrsoub.github.io/md-share/
The admin note view keeps the rendered preview and share controls for the selected file together.
The public editor is the document itself: live cursors, checkboxes, and images stay in the writing surface.
Type / to reach headings, formatting, lists, tables, and image upload without leaving the keyboard.
Obsidian image embeds render in place. Images are served through the note's own token and never exposed as a browsable folder.
On mobile, the editor, task checkboxes, and images are sized for touch.
Type / at the start of a line, or after a space, to open the command menu. It supports the keyboard and touch:
- Headings 1–6, bold, italic, strikethrough, inline code, highlight, and links
- Bullet, numbered, and task lists
- Quotes, code blocks, tables, and dividers
- Image upload
Paste or drag an image straight into a note. MD Share stores it next to the Markdown file as Pasted image <timestamp>.<ext> and inserts an Obsidian embed such as ![[Pasted image 20261027130509.png]]. PNG, JPEG, GIF, WebP, BMP, and AVIF are supported up to 15 MB. The server validates the bytes and chooses the file name, so uploads cannot overwrite existing files or escape the vault.
Existing Obsidian embeds work too: ![[image.png]] resolves across the vault, ![[99 Attachments/image.png]] works by path, and |300 or |caption aliases control width and alt text. Extensionless embeds remain plain text for now.
The mounted notes directory can be:
- an Obsidian vault
- a plain folder of Markdown files
Images pasted into a note are written beside that Markdown file, so the mounted notes folder must be writable. See .env.example for the supported variables.
Use the installer script for the fastest setup:
curl -fsSL https://raw.githubusercontent.com/marcelrsoub/md-share/main/install.sh | bashThe installer asks for your notes folder path, writes a local env file, and starts Docker Compose.
curl -fsSL https://raw.githubusercontent.com/marcelrsoub/md-share/v0.2.0/install.sh | bashTo work from a local clone instead, review the files first:
git clone https://github.com/marcelrsoub/md-share.git
cd md-share
bash install.shKanban shares consume the generated obsidian-react-kanban library from the pinned 0.2.0 release archive over HTTPS. For local library development, temporarily replace that dependency with a file: reference to a sibling checkout and regenerate package-lock.json before switching back to the pinned archive for deployment.
docker-compose.obsidian.ymlis the supported install path for mounting an existing notes folder.docker-compose.ymlis a simple local/dev compose file that mounts./notesand./datafrom the repo root.
To publish the public editor without exposing the admin surface, follow the Cloudflare Tunnel guide.
Quick test:
cloudflared tunnel --url http://localhost:3021Use a named tunnel and set PUBLIC_BASE_URL to the public hostname for stable share links. Keep the admin on 3020 private.
- Only
.mdfiles inside your mounted vault can be shared. - A public link opens only its note and the images that note references.
- Active public collaborators can add image files beside the note. Uploads are validated, size-capped, server-named, and never overwrite existing files.
- Images are not browsable: there is no asset directory listing or raw-path access.
- Keep the admin UI on a trusted network or behind your own auth.




