Turn any document into clean, editable Markdown.
A desktop Markdown editor that imports Word files, spreadsheets, PDFs, and presentations in one click, then lets you write and edit with a live visual preview — free, offline, and open source.
demo.mp4
Importing a PDF and getting editable Markdown back in one click.
![]() |
![]() |
Most writing lives in Word documents, spreadsheets, or slide decks — formats that are hard to version-control, collaborate on, or publish as-is. Pourdown lets you import any of them directly into an editable Markdown document, so you can clean up, restructure, and export without manual copy-pasting.
Files are converted to Markdown before processing to minimize token usage. Community benchmarks show Markdown is ~15% more token-efficient than JSON, and up to 96% more efficient than raw PDF when fed to LLMs
This approach was inspired by Microsoft's MarkItDown;
see markdown-import.md for how Pourdown's
Rust implementation works and how it differs.
| Format | What's preserved | Known limitations |
|---|---|---|
| Word (.docx) | Headings (styles + outline level), bold / italic / strikethrough, nested bullet and numbered lists, tables, hyperlinks, embedded images | Vector images (EMF/WMF) can't be displayed; tracked changes and comments are dropped; a TOC placeholder is inserted |
| Spreadsheet (.xlsx / .xls / .ods) | Each sheet becomes a section with a full GFM table; date columns are auto-detected and formatted as ISO dates; embedded images are extracted | Capped at 500 rows per sheet; images can't be mapped to a specific cell/sheet |
Headings inferred from font-size ratios; paragraph flow sorted top-to-bottom; tables are detected via column-alignment clustering and ruling-line boxes and rendered as GFM tables; Table of Contents entries render as a bulleted list; equations are demarcated as $…$ / $$…$$; embedded images are extracted with adjacent figure/table captions used as alt text |
Text-based PDFs only — scanned / image PDFs are not supported; complex multi-column layouts may reorder; tables with deeply nested/bulleted wrapped cells may fall back to plain text; math is Unicode symbols demarcated in $…$/$$…$$, not reconstructed LaTeX |
|
| PowerPoint (.pptx) | Slide titles become # headings; body text becomes paragraphs, one slide per section; embedded images are extracted |
Animations are not captured; vector images (EMF/WMF) can't be displayed |
Extracted images are saved as sidecar files next to the imported document (an assets/ folder, relocated to <name>.assets/ alongside the .md once saved) and render live in the editor.
Import converts content to Markdown. It is not a round-trip format converter — exporting back to the original format will not restore the original layout exactly.
- Document Import — Convert Word, Excel, PDF, and PowerPoint files to Markdown in one click
- Visual Markdown Editing — Write and edit Markdown the way you see it, without dealing with raw symbols
- Source Mode — Toggle to raw Markdown text at any time
- File Management — Open, save, and manage your Markdown files using native system dialogs
- Rich Text Formatting — Bold, italic, lists, code blocks, blockquotes, and more
- Auto-save — Your work is saved automatically at regular intervals
- Find & Replace — In-document search with replace support; cross-file search in the sidebar
- Multiple Themes — Choose from seven built-in UI themes
- i18n — English and Traditional Chinese interface
- Frontend: React 18 + TypeScript
- Editor: Tiptap v2 with extensions
- Desktop: Tauri v2
- State Management: Zustand
- Styling: Tailwind CSS
- UI Components: Custom components with shadcn/ui patterns
- Build Tool: Vite
Start the development server with hot reload:
pnpm devFor Tauri-specific development:
pnpm tauri devCreate an optimized production build:
pnpm buildCreate the desktop application:
pnpm tauri buildContributions are welcome! See CONTRIBUTING.md for setup
steps, the test-first workflow for conversion changes, and the PR process.
The docs site has a full user guide
(English / 繁體中文) if you want to understand a feature in more depth than
this README covers.
The Markdown Import feature was inspired by Microsoft's
MarkItDown — both projects are
MIT-licensed. Pourdown is an independent reimplementation in Rust (not a fork
or port); see markdown-import.md for details
on how the two differ.
MIT

