A lightweight, cross-platform desktop application for viewing Markdown files with a clean, native-looking interface. One window per file. No editor. By Stravica.
-
One window per file
- Opening a file either transitions the Welcome window into a viewer in place, or spawns a new viewer window.
- Opening an already-open file focuses the existing window (path-based duplicate detection, canonicalised so
.., symlinks, and equivalent paths collapse to the same window). - OS "Open With…",
tauri-plugin-single-instance, recents, and the File menu all route through the same Rust command (open_file_in_window).
-
Welcome screen
- Shown when the app launches with no file, or when you open the app with no arguments via the dock/taskbar.
- Lists recent files (up to 20) with title + path, click-to-open, remove-one, and clear-all.
- "Open File…", "New from Clipboard", and "User Guide" actions alongside the current version + build-hash.
-
New from Clipboard (
Cmd/Ctrl+N)- Saves the clipboard's text as a new Markdown file and opens it in a window.
- Suggests a filename from the first heading (or first line) of the content.
-
Reveal in file manager
- File → Reveal in Finder / Show in File Explorer (or the toolbar folder icon) selects the open file in the OS file manager.
-
Native experience
- True native menus (File, Edit, View, Window, Help — plus the MarkDoc app menu on macOS).
- System fonts (San Francisco on macOS, Segoe UI on Windows).
- Automatic dark/light theme following OS preference.
- Tiny bundle — Tauri ships the OS WebView rather than bundling Chromium.
-
Rendering
- CommonMark-compliant via
markdown-it. - Prism syntax highlighting in code blocks.
- Sanitised HTML + external-link routing via
tauri-plugin-opener. - Collapsible document outline sidebar auto-built from headings.
- CommonMark-compliant via
-
Themes
- Five built-in themes: Default, Cobalt, Sage, Amber, Slate.
- Choice persists in
localStorageand applies to every new window opened after the change.
-
Zoom + Auto-resize
Cmd/Ctrl +/-/0for zoom in/out/reset; persisted per viewer.- Optional auto-resize fits the window to document width on load.
-
Export
- Export to HTML (standalone, theme CSS inlined).
- Export to PDF via headless Chromium (
headless_chrome). - Export progress overlay with cancel support.
-
OS integration
- File associations for
.md/.markdownon macOS, Windows, and Linux. - Windows installer registers MarkDoc in Default Apps / Open With as a "Viewer".
- Second-instance launches forward their argv into the live process.
- File associations for
Recents grid with Open / Help actions and the current build version.
Rendered markdown with optional outline sidebar, theme selector, zoom, and export controls.
See the Releases page for the latest installers.
- macOS —
.app.zip(Apple Silicon) and.dmg(Intel) - Windows —
.msiinstaller (64-bit) - Linux —
.deb(Debian/Ubuntu) and.AppImage
Option 1 — App Bundle:
- Download the
.app.zipfile. - Extract and drag
MarkDoc.appto your Applications folder. - Right-click → "Open" the first time to bypass Gatekeeper.
Option 2 — DMG Installer:
- Download the
.dmgfile. - Open the DMG and drag MarkDoc to your Applications folder.
- Download the
.msiinstaller. - Run it and follow the wizard.
After install, MarkDoc appears in Settings → Default Apps and in the right-click "Open With" menu as a registered Markdown viewer.
For Debian/Ubuntu (using .deb):
sudo dpkg -i MarkDoc_<version>_amd64.debFor other distributions (using AppImage):
chmod +x MarkDoc_*.AppImage
./MarkDoc_*.AppImageCmd/Ctrl+N— New from ClipboardCmd/Ctrl+O— Open fileCmd/Ctrl+W— Close windowCmd/Ctrl+Shift+H— Export to HTMLCmd/Ctrl+Shift+P— Export to PDFCmd/Ctrl++/=— Zoom inCmd/Ctrl+-— Zoom outCmd/Ctrl+0— Reset zoomCmd/Ctrl+\— Toggle outline sidebar
File — New from Clipboard…, Open…, Open Recent ▸ (dynamic), Reveal in Finder (platform label), Close Window, Export ▸ (HTML / PDF)
Edit — Copy, Select All (native roles)
View — Zoom In / Out / Actual Size, Theme ▸ (Default / Cobalt / Sage / Amber / Slate), Toggle Sidebar, Toggle Auto-resize
Window — Minimize, Maximize, (dynamic list of open file windows — click to focus)
Help — User Guide
# Clone the repository
git clone https://github.com/Stravica/markdoc.git
cd markdoc
# Install dependencies
npm install
# Desktop dev (hot reload)
npm run tauri:dev
# Build frontend only
npm run build
# Full desktop bundle
npm run tauri:buildnpm run typecheck # tsc --noEmit
npm run lint # eslint .
npm run format # prettier --write .
npm run format:check # prettier --check .
npm run test:unit # Vitest
npm run test:coverage # Vitest + v8 coverage
npm run test:e2e # Playwright (starts dev:web automatically)
npm run test:all # typecheck + lint + unit + e2eRust-side checks live under src-tauri/:
cd src-tauri
cargo check --locked
cargo clippy --locked -- -D warnings
cargo test --lockednpm run dev:web launches Vite with VITE_TARGET=web, swapping the Tauri platform bridge for an in-memory mock (src/platform/web.ts). This is what Playwright drives, and what agents should use for fast UI iteration without needing the Tauri shell. See docs/testing.md.
After building, installers end up under:
- macOS:
src-tauri/target/release/bundle/dmg/(andmacos/for the raw.app) - Windows:
src-tauri/target/release/bundle/msi/ - Linux:
src-tauri/target/release/bundle/deb/andappimage/
- Tauri 2.10 — Rust + OS WebView desktop framework
- React 19 + TypeScript 5.9
- Vite 7 — dev server and bundler
- markdown-it — CommonMark rendering
- Prism — syntax highlighting in rendered code blocks
- isomorphic-dompurify — HTML sanitisation
- Vitest + Testing Library — unit tests
- Playwright — end-to-end tests via the web-mode harness
- Smaller bundle — tens of MB vs 100+ MB for Electron.
- Lower memory — uses the OS WebView.
- Native menus — real OS menu bars rather than HTML approximations.
- Rust backend — narrower attack surface with capability-scoped FS access.
Contributions are welcome. See CONTRIBUTING.md.
MIT — see LICENSE.
Potential enhancements:
- Search within document
- Drag-and-drop file opening
- Custom user-defined themes
- Mermaid diagrams / math equations
- Print support (beyond PDF export)
- Built with Tauri
- Rendering by markdown-it
- Syntax highlighting by Prism
- Open an issue
- Browse discussions
Made by Stravica for the Markdown community.