A visual markdown workspace for people who work with large collections of .md files.
If you've ever maintained a documentation site and found yourself hand-editing a YAML nav file, a sidebars.js, or a custom sidebar config every time you added, renamed, or reorganized a page — this tool is for you.
PiTH gives you a visual, drag-and-drop interface for organizing markdown files into a hierarchy. The hierarchy lives in a tree.yaml that can be anywhere on your filesystem — point PiTH at your existing files instead of moving them. PiTH reads and writes MkDocs nav: configs, custom YAML, and its own format, preserving whatever structure and extra fields your file already has.
- Visual hierarchy — drag and drop files to reorder and nest them; keyboard shortcuts for fine-grained control
- Unlinked file management — files not in the hierarchy surface automatically; rubber-band, shift-click, and ctrl-click multi-select; multi-drag to hierarchy
- Flatten / restore — flatten the tree to start fresh; restore the saved hierarchy if you change your mind
- Multiple projects — switch between doc sets without losing your place; quick access to the last 5 opened, full searchable list via Open Project
- Built-in editor with live preview — split pane with syntax highlighting, rendered preview, and vi mode (
:w/:x) - Readability stats — word count, sentence length, and 5 readability scores per file
- Scan Project — project-wide analysis report with export to HTML/PDF
- Frontmatter templates — define expected keys per project, scan for compliance, batch-update files
- Internal link validation — project-wide broken link scan; per-file panel that re-checks on save
- Full-text search — search across all files with highlighted match context
- Mermaid diagrams — flowcharts, sequence diagrams, and more render live in the preview pane
- Point at existing files — create a project by selecting any markdowns directory, or leave it blank and PiTH creates one for you; PiTH works with the files in place rather than copying them
- Use any YAML as your hierarchy — point a project at an existing
mkdocs.yml, a custom YAML file, or let PiTH create one; changes are written back preserving the original format and any extra fields - MkDocs and Docusaurus — import an existing nav config or export when ready to publish
- Add files from anywhere — copy individual
.mdfiles into a project from any directory - HTML/PDF export — whole-collection export to a single document with table of contents and print CSS
- Runs entirely on your machine — no cloud, no accounts, no ongoing cost
- Your files stay where they are — PiTH stores only lightweight metadata in
~/.pith/projects/(hierarchy pointer, template, recent projects). It never copies or moves your markdowns unless you ask it to. - Available as a PyPI package or standalone executable
Requires Python 3.10+.
pip install pith-md
pith
On Windows and Mac, pith opens a desktop window. On Linux, it starts a server and prints the URL. On WSL, it opens your Windows browser automatically.
| Flag | Effect |
|---|---|
--server |
Force headless mode on any platform — starts the server and opens a browser tab |
--port N |
Listen on port N instead of 5000 |
ssh -L 5000:localhost:5000 user@host "/path/to/pith"
Then open http://localhost:5000 in your local browser. Close the terminal to stop PiTH. If you use an SSH config alias (e.g. Host myserver), substitute that for user@host.
To find the pith path on the remote: which pith
No Python required. Download the latest build from the Releases page.
| Platform | File |
|---|---|
| Windows | pith-Windows.zip |
| Mac | pith-macOS.zip |
| Linux | pith-Linux.zip |
Unzip and run the executable:
- Windows: Double-click
pith.exe - Mac: Right-click → Open the first time to bypass the unsigned app warning
- Linux: Run
./pithfrom a terminal
Full documentation is available at rick-does.github.io/pith.
Requires Python 3.12+ and Node.js LTS.
Windows:
git clone git@github.com:rick-does/pith.git
cd pith
start.batMac / Linux / WSL:
git clone git@github.com:rick-does/pith.git
cd pith
./start.shThen open http://localhost:8002 in your browser.
- Backend: Python, FastAPI
- Frontend: React, Vite, TypeScript
- Editor: CodeMirror 6 (vi mode via @replit/codemirror-vim)
- Drag and drop: dnd-kit
- Readability: textstat
- YAML: pyyaml (PiTH-native format), ruamel.yaml (round-trip for MkDocs and custom formats)
- Standalone: PyInstaller, pywebview