A modern, cross-platform markdown viewer and editor with platform-native styling.
Built with Tauri v2, React 19, and TypeScript.
The samples/ directory is a tiny demo workspace — open it as a folder (Cmd/Ctrl+Shift+O) to see every rendering feature plus working wikilinks. samples/README.md is the showcase document; the surrounding files exist so its [[wikilinks]] resolve.
- GitHub Flavored Markdown — tables, task lists, strikethrough, autolinks, footnotes
- GitHub-style alerts —
> [!NOTE],[!TIP],[!IMPORTANT],[!WARNING],[!CAUTION] - Heading anchor links — every heading gets a GitHub-compatible slug;
[text](#heading)scrolls smoothly to the target - Wikilinks —
[[note]],[[note|alias]],[[note#heading]]resolve against the open folder workspace; broken links render with a distinct style - Backlinks panel — sidebar list of every workspace note that links to the current file, with surrounding-line snippets
- Syntax highlighting for code blocks (6 themes: Glyph, GitHub, Monokai, Nord, Solarized Light/Dark)
- Copy button on code blocks
- Math/LaTeX rendering — inline (
$...$) and block ($$...$$) equations via KaTeX - Mermaid diagrams — flowcharts, sequence diagrams, Gantt charts, and more (theme-aware);
.mmdsource files open directly as diagrams - CSV/TSV tables —
```csvand```tsvcode blocks render as styled, scrollable tables - Inline HTML —
<kbd>,<sub>,<sup>,<details>, alignment attributes (sanitised allowlist) - YAML frontmatter — title, author, date, and tags render as a metadata block above the document; tags get a per-tag colour
- Emoji shortcodes —
:smile:→ 😊,:+1:→ 👍 - Local and remote image display
- External links open in system browser with optional confirmation dialog
- Markdown editor mode — syntax highlighting, line numbers, undo/redo history
- Split view — edit and preview side-by-side, or switch between modes per tab
- Live preview updates as you type
- Wikilink autocomplete — type
[[in a folder workspace to pick from existing notes; Tab/Enter to insert - Editor keymaps — choose Default, Vim, or VSCode bindings in Settings → Editor
- Jupyter notebooks — open
.ipynbfiles directly; markdown cells render with full markdown (math, code, diagrams), code cells are syntax-highlighted, and image, HTML, plain-text, and colourised stream/traceback outputs show under each cell withIn [n]:/Out [n]:prompts (read-only) - Folder / workspace tabs — open a folder as a tab; browse
.mdfiles in the sidebar tree; right-click a file to open it in a new top-level tab. Right-click a folder, a file, or the empty panel to create a new note or folder there, then type its name inline. Right-click any note or folder to rename, duplicate, move, copy its path, reveal it in the system file manager, or delete it (with confirmation), and use the files-panel toolbar for new note, new folder, and collapse all. One folder is one workspace (a git repository's top level): a folder nested inside another repo, or overlapping an already-open one, is declined so links and search have an unambiguous scope - Multiple files in tabs — open, switch, close, middle-click to close
- Command palette —
Cmd/Ctrl+Kto fuzzy-jump to any workspace file, document heading, or app action - In-document search —
Cmd/Ctrl+Fwith match highlighting and navigation - Zoom in/out —
Cmd/Ctrl+=/-/0with zoom level in status bar - Table of Contents sidebar with active heading tracking
- Print —
Cmd/Ctrl+Pwith configurable page breaks, optional TOC, and theme-color control - Export to HTML, Word (DOCX), EPUB, and PDF —
File → Export; works for markdown documents and Jupyter notebooks, writes a file directly (no print dialog), and reuses the rendered output (math, code highlighting, tables, images inlined) so files are self-contained and offline. Task-list checkboxes are read-only in exports; exported HTML follows the reader's light/dark system preference. - Live reload — file watcher auto-updates on external changes
- Undo / redo for in-document edits —
Cmd/Ctrl+ZandCmd/Ctrl+Shift+Zreverse task-list checkbox toggles and other programmatic edits per tab - Drag and drop markdown files, notebooks, or folders to open
- File associations — double-click
.mdfiles to open in Glyph - CLI support —
glyph README.mdopens a file;glyph notebook.ipynbopens a notebook;glyph ~/notes/opens a folder as a workspace - Recent files list
- Session restore — open tabs persist across restarts
- System / Light / Dark themes
- Customizable font family, size, line height, and content width
- Custom code font support
- Platform-native styling (macOS vibrancy, Windows Mica)
- Summarize, explain, translate, and simplify documents
- Providers: Claude, OpenAI, Ollama (local)
- Text-to-speech with configurable voice and speed
- Cross-platform: macOS (universal), Windows (x64), Linux (amd64 + arm64)
- Window state persistence across restarts
- Native menu bar with customizable keyboard shortcuts (remap any command in Settings → Hotkeys)
- Update notifications — checks for a newer release on launch and shows a banner when one is available (toggle in Settings → Behavior)
- Local-first: your files never leave your machine
- Opt-in crash reporting (off by default) to help fix bugs — see Privacy & Error Reporting
brew tap hamidfzm/tap
brew install --cask glyphchoco install glyphscoop bucket add hamidfzm https://github.com/hamidfzm/scoop-bucket
scoop install glyphyay -S glyph-md-binbrew tap hamidfzm/tap
brew install glyphsudo add-apt-repository ppa:hamidfzm/glyph
sudo apt update
sudo apt install glyphcurl -fsSL https://hamidfzm.github.io/apt-repo/gpg.key | sudo gpg --dearmor -o /usr/share/keyrings/glyph.gpg
echo "deb [signed-by=/usr/share/keyrings/glyph.gpg] https://hamidfzm.github.io/apt-repo stable main" | sudo tee /etc/apt/sources.list.d/glyph.list
sudo apt update
sudo apt install glyphDownload the .deb or .AppImage from Releases.
# Debian/Ubuntu
sudo dpkg -i glyph_*.deb
# AppImage
chmod +x Glyph_*.AppImage
./Glyph_*.AppImagepnpm install
pnpm tauri devOpen a file or folder via CLI argument:
pnpm tauri dev -- -- /path/to/file.md
pnpm tauri dev -- -- /path/to/folderBuild for production:
pnpm tauri buildpnpm test # Run frontend tests (Vitest)
pnpm test:coverage # Run with coverage report
cd src-tauri && cargo test # Run Rust testspnpm lint # Lint TypeScript (Biome)
pnpm format:check # Check formatting (Biome)
pnpm check # Lint + format + organize imports
cd src-tauri && cargo clippy # Lint Rust| Shortcut | Action |
|---|---|
Cmd+O / Ctrl+O |
Open file(s) |
Cmd+Shift+O / Ctrl+Shift+O |
Open folder |
Cmd+K / Ctrl+K |
Command palette (files, headings, app actions) |
Cmd+P / Ctrl+P |
Print / Export to PDF |
Cmd+F / Ctrl+F |
Find in document |
Cmd+= / Ctrl+= |
Zoom in |
Cmd+- / Ctrl+- |
Zoom out |
Cmd+0 / Ctrl+0 |
Reset zoom |
Cmd+Z / Ctrl+Z |
Undo last in-document edit (e.g. task checkbox toggle) |
Cmd+Shift+Z / Ctrl+Shift+Z (also Ctrl+Y on Windows/Linux) |
Redo |
Cmd+B / Ctrl+B |
Toggle files sidebar |
Cmd+\ / Ctrl+\ |
Toggle outline sidebar |
Cmd+, / Ctrl+, |
Settings |
Cmd+W / Ctrl+W |
Close tab |
Cmd+Shift+W / Ctrl+Shift+W |
Close window |
Glyph is built around speed, native feel, and offline-first usage. The tables below compare its current capabilities against widely used markdown apps. Items marked "planned" track to issues on the roadmap.
| Feature | Glyph | Obsidian | Typora | MarkText | Zettlr | Joplin | VS Code |
|---|---|---|---|---|---|---|---|
| GitHub Flavored Markdown | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Math (KaTeX/MathJax) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | plugin |
| Mermaid diagrams | ✅ | ✅ | ✅ | ✅ | ✅ | plugin | |
| Syntax-highlighted code | ✅ (6 themes) | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| GitHub-style alerts | ✅ | ✅ | ❌ | ❌ | ✅ | ||
| YAML frontmatter | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
| Emoji shortcodes | ✅ | ✅ | ✅ | ✅ | ❌ | ✅ | plugin |
Jupyter notebooks (.ipynb) |
✅ | plugin | ❌ | ❌ | ❌ | ❌ | ✅ |
| Feature | Glyph | Obsidian | Typora | MarkText | Zettlr | Joplin | VS Code |
|---|---|---|---|---|---|---|---|
| Source editor | ✅ | ✅ | n/a | ✅ | ✅ | ✅ | ✅ |
| WYSIWYG / inline preview | ✅ | ✅ | ✅ | ❌ | |||
| Split view | ✅ | ✅ | ❌ | ✅ | ✅ | ✅ | ✅ |
| Spell check | planned | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Feature | Glyph | Obsidian | Typora | MarkText | Zettlr | Joplin | VS Code |
|---|---|---|---|---|---|---|---|
| Tabs | ✅ | ✅ | ❌ | ✅ | ✅ | ❌ | ✅ |
| Folder / workspace (vault) sidebar | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
| Wikilinks & backlinks | ✅ | ✅ | ❌ | ❌ | ✅ | ❌ | plugin |
| Tag / metadata search | planned | ✅ | ❌ | ❌ | ✅ | ✅ | plugin |
| Command palette | ✅ | ✅ | ❌ | ❌ | ❌ | ❌ | ✅ |
| In-document search | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Table of contents | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Live reload on disk change | ✅ | n/a | n/a | n/a | ✅ |
| Feature | Glyph | Obsidian | Typora | MarkText | Zettlr | Joplin | VS Code |
|---|---|---|---|---|---|---|---|
| ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | |
| Export PDF | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | plugin |
| Export HTML / DOCX / EPUB | ✅ | plugin | ✅ (Pandoc) | ✅ (Pandoc) | plugin |
| Feature | Glyph | Obsidian | Typora | MarkText | Zettlr | Joplin | VS Code |
|---|---|---|---|---|---|---|---|
| AI (multi-provider, local) | ✅ | plugin | ❌ | ❌ | ❌ | ❌ | plugin |
| Text-to-speech | ✅ | plugin | ❌ | ❌ | ❌ | ❌ | plugin |
| Plugin / extension API | planned | ✅ | ❌ | ❌ | ✅ | ✅ | |
| Cloud sync | planned | paid | ❌ | ❌ | ❌ | ✅ | ✅ |
| Graph view | ❌ | ✅ | ❌ | ❌ | ❌ | ❌ | plugin |
| Feature | Glyph | Obsidian | Typora | MarkText | Zettlr | Joplin | VS Code |
|---|---|---|---|---|---|---|---|
| Native window styling | ✅ (vibrancy/Mica) | ||||||
| Native bundle (non-Electron) | ✅ Tauri (~3 MB core) | ❌ | ✅ Qt | ❌ | ❌ | ❌ | ❌ |
| macOS / Windows / Linux | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
| Mobile (iOS / Android) | planned | ✅ | ❌ | ❌ | ❌ | ✅ | ❌ |
| File associations + CLI | ✅ | ✅ | ❌ | ✅ | |||
| Open source | ✅ MIT | ❌ | ❌ | ✅ | ✅ | ✅ | ✅ |
| Free | ✅ | ✅ | $14.99 | ✅ | ✅ | ✅ | ✅ |
Legend: ✅ supported ·
Note on "WYSIWYG / inline preview": Glyph's editor has split-view live preview and styled markdown tokens (bold/italic render as bold/italic in source), but markdown markers remain visible — Typora-style fully inline rendering is not implemented.
Glyph is local-first: your documents are read and written on your machine and are never uploaded anywhere.
Crash and error reporting is opt-in and off by default. Nothing is sent until you turn it on in Settings → Privacy → Send crash reports, and even then it is only active in production builds (never during development).
When enabled, reports include only:
- Stack traces of the crash or unhandled error
- Operating system and Glyph version
- The error message
They never include your file contents, file paths, file names, or any links — these are stripped from every report before it is sent. You can turn reporting off again at any time from the same setting.
Glyph is free and open source. These sponsors help keep it that way.
Sentry provides error monitoring through their Sponsored Business plan, which we use for the opt-in crash reporting above.
If Glyph is useful to you, donations are welcome via crypto:
| Network | Asset | Address |
|---|---|---|
| Solana | SOL | <pending> |
| BNB Smart Chain (BEP-20) | USDT | <pending> |
| Tron (TRC-20) | USDT | <pending> |

