One document. Two ways in.
Write the Markdown or edit the finished page.
Both views are live, and they always agree.
Most Markdown editors make you pick a side. Plain-text editors show the syntax and leave the result to your imagination. Rich-text editors show the result and quietly decide what gets saved.
Markdown Studio gives every note one document with two editors attached: CodeMirror for the Markdown and Tiptap for the formatted page. Edit either one and the other is rebuilt from the same source, so they never drift apart.
- Two editable views. Split, Markdown only or formatted only, with both panes scrolled to the same heading.
- Linked notes.
[[Note]]and[[Note#Heading]]links, links in and out for every note, and a map of how it all connects. - Rich content. KaTeX math, Mermaid diagrams, sheet music, callouts, task lists and right-to-left text.
- Hard to lose work. Autosave, version history, and deleted notes you can recover for up to 30 days.
- In and out. Import Markdown, HTML, Word, JSON and ZIP archives. Export to Markdown, HTML, Word, PDF and JSON.
- Works offline. Install it as an app. Notes live in your browser first and sync across devices when you sign in.
- Share with a link. The note travels inside the link, and whoever opens it needs no account.
- Embeddable. Drop the editor into your own product as a React component or an iframe.
Just want to write? Open markdownstudio.com and start writing, no account needed. Sign in with Google when you want your notes synced across devices.
You need Bun 1.4 and Node.js 24.
git clone https://github.com/Perssonify/Markdown-Studio.git
cd Markdown-Studio
bun install --frozen-lockfile
bun run devOpen http://localhost:5173. That's the full editor, running in your browser with a few starter notes. No database, storage or accounts needed, and it's all most contributions require.
Sync needs PostgreSQL, an S3-compatible bucket and a Google sign-in client. With Docker, the first two take one command:
cp apps/api/.env.example apps/api/.env # local defaults, already filled in
bun run db:up # PostgreSQL + a local S3, in Docker
bun run db:migrate # create the tablesNo Docker? Point DATABASE_URL at any PostgreSQL 17 and pick a storage option below.
Then add BETTER_AUTH_SECRET and your Google client ID and secret to apps/api/.env (how to get them) and restart bun run dev.
Bring your own storage. Any S3-compatible bucket works, so you can skip the Docker S3:
| Storage | S3_ENDPOINT |
S3_REGION |
S3_FORCE_PATH_STYLE |
|---|---|---|---|
| Local S3 in Docker (default) | http://localhost:9540 |
us-east-1 |
true |
| Your own MinIO | http://localhost:9000 |
us-east-1 |
true |
| Amazon S3 | leave empty | your bucket's region | false |
| Cloudflare R2 | https://<account-id>.r2.cloudflarestorage.com |
auto |
false |
Put those values, your bucket name and your keys in apps/api/.env, then run:
bun run storage:setup # creates the bucket, applies the settings, tests a real uploadIt tells you exactly what your storage supports. More providers and details are in the storage guide.
import { PerssonifyEditorIntegration } from "@perssonify/editor";
import "@perssonify/editor/styles.css";
import "katex/dist/katex.min.css";
<PerssonifyEditorIntegration
initialMode="split"
onSave={({ docId, markdown }) => saveDoc(docId, markdown)}
/>The package isn't on npm yet, so build it with bun run --cwd apps/web build. The integration guide covers every prop, the iframe version and theming.
Note
Using Markdown Studio in a commercial product needs a commercial license. Write to hello@markdownstudio.com.
Contributions are welcome, and most fixes need only the editor running, no backend.
- Pick a good first issue and comment to claim it.
- Read CONTRIBUTING.md, especially the house rules that keep people's notes safe.
- Before you open a pull request, run
bun run lint && bun run typecheck && bun run test.
Tip
Using AI is welcome. Claude Code, Cursor, Copilot or any other assistant can help you fix an issue here. Point it at CLAUDE.md and apps/web/CLAUDE.md so it follows the same rules we do. Just own the result: read every line, run the tests yourself, and mention in your pull request that AI helped.
Questions go in issues, security reports go through SECURITY.md, and everyone here follows our Code of Conduct.
If Markdown Studio is useful to you, a star helps other people find it.
Markdown Studio is source-available under CC BY-NC 4.0. You're free to use, share and adapt it for non-commercial purposes, as long as you credit Perssonify Labs. For commercial use, write to hello@markdownstudio.com.
Built by Perssonify Labs · Copyright © 2026

