Open source · self-hosted

Your notes stay yours. Even the AI ones.

mdnest keeps every note as a plain Markdown file on a server you own — and opens it from your browser, your terminal, or Claude.

Start in 3 minutes View on GitHub

MIT licensed · no database needed · nothing phones home

The mdnest app: a nested folder tree on the left, and a note holding an editable table and a task list, with a badge showing a colleague typing in the same note

One note: an editable table, tasks that feed the board — and a colleague typing in it with you. Light or dark follows your system, and so does this page. .

Just files

Every note is a .md file in a folder you picked. Grep it, back it up, commit it. No database owns your writing.

Your machine

One Docker command on a box you control. No cloud account, no seat pricing, nothing leaving the building.

Open to everything

Browser, terminal, REST API, or an AI assistant over MCP — all reading and writing the same files.

Watch

Two minutes, start to finish

Notes, drawings, tasks and the terminal — the whole thing in one pass.

Diagrams

The diagrams your AI can already draw

Mermaid is plain text, which is exactly why a model is good at it. Ask Claude for a flowchart, paste the fence, and mdnest renders it — in colour, in both themes.

  • Flowcharts, sequences, state machines, timelines and class diagrams — every one of them from a fenced mermaid block
  • Click any label to rename it right on the picture — the Markdown underneath updates itself
  • Zoom, fit and fullscreen, with a Source toggle for when you want the text back
  • Readable whichever theme you are in — each label's ink is picked from the colour behind it, so your own palette never washes the text out
A note containing a fenced mermaid block rendered as a colourful flowchart: Browser, Terminal and Claude all feeding an mdnest API box, which writes to plain .md files, git history and an in-memory search index
Drawings

Sketch it when words are slower

A whiteboard that saves as a Markdown file, right next to the notes it belongs to.

  • Boxes, arrows, freehand — a full Excalidraw canvas
  • Embed one in any note; edit once, updates everywhere
  • The words inside stay searchable, because it is still Markdown
An mdnest whiteboard showing a hand-drawn diagram of a browser and an AI agent both reading and writing the same plain Markdown files
Tasks

A kanban board made of your checkboxes

Every - [ ] you have already written becomes a card. Move the card, the line changes.

  • Due dates, priorities, assignees and sub-steps — all plain text
  • One workspace or every workspace at once
  • No separate tracker to keep in sync — the note is the tracker
The mdnest kanban board with To Do and Doing columns; cards show priority, due date, assignee, sub-step progress and tags
Together

Two people, one note, no copies

Open the same note as someone else and you can see them there — who is reading, who is typing right now, and what they think of that paragraph.

  • Live presence. Their avatar appears the moment they open the note, and turns into “is typing…” as they work
  • Comment threads anchored to the text. Highlight a phrase, ask the question there, reply, resolve — the discussion lives beside the words, not in a chat app
  • Per-person access. Invite someone to one workspace or one folder, read-only or read-write, with groups when the list gets long
  • Everything stays a plain .md file — comments and presence sit alongside it, never inside your prose
Two people in the same mdnest note: a badge reads “alex is typing”, a highlighted sentence is anchored to a comment thread in the right-hand panel, and a colleague has replied in the thread
Just yours

A corkboard for the things that never become a note

The phone number to call back. Three things to finish today. Stickies sit beside your workspace, and they are private in the strongest sense: they never leave the server.

  • Never pushed anywhere. Stickies are not notes — they never appear in a workspace and git-sync cannot see them, so nothing you paste in can reach a remote
  • Yours alone. Every person gets their own board. On a shared server nobody else can open it, admins included
  • A note, a list, or both. Give a card a title, some text, a checklist — or none of them. Ticking happens per line, not per card
  • Drag them anywhere. Full screen they are a real corkboard — move a card, resize it, and it stays where you put it. Or keep the side panel open while you write

The trade is deliberate and worth knowing: a sticky has no git history and no off-server copy. Anything you would be upset to lose belongs in a real note.

The mdnest sticky board full screen: six coloured cards scattered across a corkboard, one titled “Ship v4.5.0” with two of three checklist items ticked off, others holding a staging URL, a shopping list, a trip checklist and a reminder to call the landlord
Structure

Real folders, not a flat pile of notes

Most markdown apps give you one bucket and a search box. mdnest gives you the tree you already think in — and more than one of them.

  • Nest folders as deep as you like, drag files between them, and the folders on disk are exactly what you see
  • Separate workspaces for work, home and side projects — each one a directory you mounted
  • Full-text search across a workspace, and [[wikilinks]] if you are bringing an Obsidian vault
The mdnest sidebar: a workspace picker set to demo, and a folder tree nesting Engineering into Runbooks and Specs, Meetings into a 2026 folder of dated notes, and Product, with the open note beside it
One set of files

Reach them however you work

The same notes, whichever door you come through — and one terminal that talks to every server you run.

BrowserLive editor, drawings, board
TerminalOne CLI, every server you own
REST APIWire it into anything
AI agentsClaude and Cursor over MCP
How each interface reaches the same Markdown files A browser, the mdnest command-line tool, and an AI assistant over MCP all talk to one mdnest server, which reads and writes ordinary .md files in a folder you own. Your browser The full editor, anywhere Your terminal mdnest CLI · many servers at once Claude, Cursor, an agent over MCP — reads and writes notes HTTPS mdnest MCP mdnest one server, your box Docker · no database needed read/write Your folder Specs/Offline sync.md Meetings/2026-08-21.md journal/today.md plain files · yours · grep-able

Same files, three front doors. Nothing is locked inside an app — an agent editing a note over MCP and you editing it in the browser are touching the same bytes on disk. Which is why a partial edit sends the version it read: if the note moved underneath it, the write is refused rather than quietly winning.

$ mdnest servers -v
@work https://notes.acme.internal 4.5.0 *default
@home https://mdnest.lan 4.5.0
$ mdnest search @work/engineering "offline sync"
Specs/Offline sync.md:3 A note edited on a plane must merge cleanly…
$ mdnest append @home/journal/today.md "- [ ] send the recap"
written · 42 bytes
$ mdnest edit @work/engineering/spec.md "Status: draft" "Status: final"
Error (409): file was modified by another user
Hint: nothing was overwritten. Re-run the edit against the current content.
Fast, and hard to lose

Quick to open. Impossible to misplace.

Two things you should never have to think about again.

It answers before you finish blinking

There is no import, no index to rebuild, no database round-trip. A note is a file, and mdnest hands it to you straight off the disk.

  • Opens and saves are direct file reads and writes — nothing to sync first
  • Search results and the task board are held in memory, so the second look is instant
  • Growing past one box? Point it at Redis and every replica serves the same in-memory working set

If the folder is a git repo, it backs itself up

Mount a workspace that is a git repository and mdnest keeps it committed and pushed on a schedule. You write; it saves the history.

  • Every change commits automatically and pushes to the remote you already own
  • Open any note's history, compare two versions, restore one — from inside the app
  • Your backup is a normal git repo: clone it, grep it, read it without mdnest at all
And the rest

Everything else it already does

Built over four major releases. Every one of these is in the box today.

Spreadsheet-style tablesAdd and remove rows and columns with buttons. Underneath it is still an ordinary pipe table.
Per-note authorshipWho created it, who touched it last, and everyone who has contributed since.
Obsidian wikilinks[[note]], aliases and headings resolve in-app. Bring a vault across as-is.
Mermaid diagramsFlowcharts, sequences and timelines from a fenced code block — click a label to edit it.
Marp slide decksAdd marp: true and the note becomes a deck you can present and export.
Corporate SSO & 2FAAny OIDC provider — Google, Okta, Entra, Keycloak, Auth0 — or local accounts with TOTP.
API tokensLong-lived, revocable tokens for scripts and CI — no sharing your password with a cron job.
Image uploadPaste or drop a picture straight into a note; it lands beside the file.
Marp themesShip your own CSS theme and every deck in the workspace can use it.
Works on a phoneThe whole app, including the board and drawings, on a small screen.
Runs anywhereDocker Compose on a spare box, or the Helm chart if you already have Kubernetes.
Setup

Running before your coffee cools

Clone it, point it at a folder, start it. On your own, there is no database to install.

$ git clone https://github.com/mahsanamin/mdnest.git && cd mdnest
$ ./mdnest-server setup
# point mdnest.conf at the folders you want to serve
$ ./mdnest-server start
ready · http://localhost:3000

Need accounts, SSO or per-folder permissions? Multi-user setup adds Postgres for people and permissions — never for your notes.

FAQ

Plain answers

The questions people ask before installing it.

What is mdnest, in one sentence?

A notes app you run yourself, that keeps your notes as ordinary Markdown files on your own disk — openable from a browser, a terminal, or an AI assistant.

Where are my notes actually stored?

As plain .md files in folders you choose. There is no proprietary database holding your writing, so you can open them in any editor, copy them to a USB stick, or track them in git. If you stop using mdnest tomorrow, your notes are still just files.

Can I draw, not just type?

Yes. A drawing is a whiteboard canvas saved as an .excalidraw.md file next to your notes, and any note can show it. The words inside stay searchable, because it is still Markdown underneath. You can also write Mermaid diagrams in a code block and they render as you type.

Do I need a database?

No. On your own, mdnest needs no database at all. PostgreSQL comes in only if you invite other people, and even then it stores accounts and permissions — never your notes.

Can Claude or Cursor read and write my notes?

Yes. mdnest ships an MCP server, so an AI assistant can search, read and write your notes directly — the same files you see, with the same permissions.

Is it really free?

Yes — MIT licensed and open source. You provide the machine; there is no paid tier and nothing phones home.

Own your notes again

Free, open source, and running in about three minutes.