Modern, native, WYSIWYG markdown editor for Windows / macOS / Linux.
Built with Tauri 2 + Svelte 5 + TypeScript + Milkdown Crepe.
English · Türkçe
Download · Features · Shortcuts · Development
@ behavior, autosave, outline panel, close confirmation — toggle each from a single Settings panel.Ctrl+E to see actual #, **, ``` syntax.Ctrl+E) — edit the raw markdown directly@ — two modes:$...$ and block $$...$$```mermaid code blocks render to SVG in both WYSIWYG preview and HTML/PDF export> [!NOTE] / [!TIP] / [!IMPORTANT] / [!WARNING] / [!CAUTION] rendered both in WYSIWYG and exportsCtrl+Tab to cycleCtrl+R).md / .markdown / .mdown / .mkd opens directlyCtrl+F / Ctrl+H)Ctrl+Shift+P) — fuzzy-searchable list of every action, every open tab, and every recent file| Shortcut | Action |
|---|---|
Ctrl/Cmd + N or +T |
New tab |
Ctrl/Cmd + W |
Close active tab |
Ctrl/Cmd + Tab |
Next tab |
Ctrl/Cmd + O |
Open file |
Ctrl/Cmd + S |
Save |
Ctrl/Cmd + Shift + S |
Save as |
Ctrl/Cmd + R |
Recent files menu |
Ctrl/Cmd + F |
Find |
Ctrl/Cmd + H |
Replace |
Ctrl/Cmd + P |
Print as PDF |
Ctrl/Cmd + Shift + P |
Command palette |
Ctrl/Cmd + E |
Toggle source / WYSIWYG |
@ |
Open block menu |
Esc |
Close active panel / menu |
Download the latest version from the Releases page:
| Platform | Package |
|---|---|
| Windows (per-user) | Markdown Editor_X.Y.Z_x64-setup.exe (NSIS, small, recommended) |
| Windows (enterprise) | Markdown Editor_X.Y.Z_x64_en-US.msi (MSI, for GPO deployment) |
File associations for .md / .markdown / .mdown / .mkd are installed automatically.
webkit2gtk + build-essential · macOS: Xcode CLIgit clone https://github.com/ethemdemirkaya/markdown-editor.git
cd markdown-editor
npm install
npm run tauri dev # hot-reload development
npm run tauri build # production build (MSI / NSIS / .dmg / .deb / .AppImage)
The icon is defined only in src-tauri/icons/icon.svg. To regenerate all variants:
node scripts/generate-icons.mjs # SVG → PNG + NSIS BMPs
npx @tauri-apps/cli icon src-tauri/icons/icon-source.png -o src-tauri/icons
markdown-editor/
├─ src/ # Svelte 5 frontend
│ ├─ lib/
│ │ ├─ WysiwygEditor.svelte # Milkdown Crepe wrapper
│ │ ├─ SourceView.svelte # Source (textarea) view
│ │ ├─ TabBar.svelte # Tab strip
│ │ ├─ OutlinePanel.svelte # Outline
│ │ ├─ FindReplace.svelte # Find / Replace overlay
│ │ ├─ InlineBlockMenu.svelte # Inline `@` popup
│ │ ├─ SettingsPanel.svelte # ⚙ Settings modal
│ │ ├─ CommandPalette.svelte # Ctrl+Shift+P palette
│ │ ├─ autosave.ts # Debounced disk + snapshot
│ │ ├─ documents.ts # Multi-tab doc state
│ │ ├─ export.ts # HTML / PDF self-contained
│ │ ├─ cli.ts # CLI args + open-files event
│ │ ├─ auto-language.ts # ProseMirror plugin: hljs auto-detect
│ │ ├─ github-alerts.ts # Marked extension + PM decoration
│ │ ├─ theme.ts # Dark/light store
│ │ ├─ settings.ts # Settings store
│ │ ├─ i18n.ts # Locale store + translations
│ │ └─ ...
│ └─ routes/+page.svelte # Main page
├─ src-tauri/ # Rust backend
│ ├─ src/lib.rs # Plugin init + force_exit + get_startup_files
│ ├─ icons/
│ │ ├─ icon.svg # Single icon source
│ │ ├─ nsis-header.bmp # Installer banner
│ │ └─ nsis-sidebar.bmp # Installer welcome image
│ ├─ tauri.conf.json # Bundle / fileAssociations / NSIS config
│ └─ capabilities/default.json # Tauri permissions
├─ scripts/
│ └─ generate-icons.mjs # SVG → PNG + BMP generator
└─ REQUIREMENTS.md
| Layer | Library |
|---|---|
| Runtime | Tauri 2 (Rust) |
| Frontend | Svelte 5 + SvelteKit (adapter-static, SPA), TypeScript, Vite |
| WYSIWYG | Milkdown Crepe (ProseMirror) |
| Markdown render | marked + DOMPurify |
| Syntax highlight | highlight.js |
| Math | KaTeX |
| Tauri plugins | plugin-dialog, plugin-fs, plugin-opener, plugin-single-instance |
[[Note]] + backlinks panelFeature.AIPull requests and issues are welcome. For large changes please open an issue first to discuss.
MIT © Ethem Demirkaya