A native macOS note-taking app that feels like Ghostty — GPU-accelerated, keyboard-first, monospace, zero-config.
Notes are plain .md files in ~/Documents/ghostmd/. No database, no lock-in. Back up the folder however you want.
- Fast path to writing: open the app, you're typing. AI suggests a title and where to file it later.
- Pure text: no markdown rendering, no images. Raw monospace text like a terminal.
- Files are the truth: just a folder of
.mdfiles with whatever hierarchy you want. - Zero configuration: sane defaults, no settings to fiddle with.
- Keyboard-first: Ghostty-style tabs/splits, Emacs text navigation, command palette.
curl -fsSL https://raw.githubusercontent.com/mimoo/ghostmd/main/scripts/install.sh | bash
This installs GhostMD.app to /Applications/ and creates a ghostmd CLI command. Run ghostmd update to update.
Requires Rust 1.75+ and Xcode with Metal on macOS.
git clone https://github.com/mimoo/ghostmd.git
cd ghostmd
cargo build --release
./scripts/bundle-macos.sh
cp -r target/GhostMD.app /Applications/
Download the latest .tar.gz from Releases, extract, and drag GhostMD.app to /Applications/.
- GPU-accelerated rendering via GPUI (Metal on macOS)
- Branching undo tree (undo past a fork, type something new — old branch preserved)
- Auto-save on every keystroke (debounced 300ms) — quit anytime, nothing is lost
- Diary structure: new notes go to
~/Documents/ghostmd/diary/YYYY/MM/DD/ - Always-visible file tree sidebar with expand/collapse indicators
- Fuzzy file finder (Cmd+P) with full-text content search via ripgrep
- Agentic search (Cmd+Shift+F) — ask Claude natural language questions about your notes
- Command palette (Cmd+Shift+P) with theme switching
- Ghostty-style tabs and splits with close buttons
- 19 built-in themes (15 dark, 4 light) with runtime switching via command palette
- Session persistence (tabs, splits, theme restored on relaunch)
- JetBrains Mono font
| Action | Binding |
|---|---|
| New note | Cmd+N |
| New daily note (with pending items) | Cmd+Opt+N |
| Save | Cmd+S |
| Move to trash | Cmd+Backspace |
| Quit | Cmd+Q |
| Action | Binding |
|---|---|
| New workspace | Cmd+T |
| New window | Cmd+Shift+N |
| Close pane | Cmd+W |
| Restore closed workspace | Cmd+Shift+T |
| Next workspace | Ctrl+Tab |
| Previous workspace | Ctrl+Shift+Tab |
| Jump to workspace 1–9 | Cmd+1..9 |
| Split right | Cmd+D |
| Split down | Cmd+Shift+D |
| Focus pane left/right/up/down | Opt+Cmd+Arrows |
| Action | Binding |
|---|---|
| File finder | Cmd+P |
| Find in file | Cmd+F |
| Agentic search (Claude) | Cmd+Shift+F |
| Note switcher (open notes) | Cmd+Shift+A |
| Command palette | Cmd+Shift+P |
| Toggle sidebar | Cmd+B |
| Go back | Cmd+[ |
| Go forward | Cmd+] |
| Action | Binding |
|---|---|
| Beginning of line | C-a |
| End of line | C-e |
| Forward char | C-f |
| Back char | C-b |
| Forward word | Opt-f |
| Back word | Opt-b |
| Delete forward | C-d |
| Kill line | C-k |
| Yank | C-y |
| Page down | C-v |
| Page up | Opt-v |
| Beginning of buffer | Opt-< |
| End of buffer | Opt-> |
cargo run --release
cargo test # all tests
cargo test -p ghostmd-core # core logic + integration tests
cargo test -p ghostmd # UI state machine tests
cargo bench -p ghostmd-core
Benchmarks cover buffer operations, file tree scanning (100-10K files), and fuzzy/content search at scale.
crates/
ghostmd-core/ # Pure business logic, no UI dependency
buffer.rs # Rope-based text buffer with branching undo tree
note.rs # Note CRUD and auto-save
diary.rs # Date-based diary path generation
tree.rs # File tree model with reveal/collapse
search.rs # Fuzzy file search (nucleo) + content search (ripgrep)
ghostmd/ # Native GPUI application
app_view.rs # Main GPUI view: workspaces, splits, overlays, search
editor_view.rs # GPUI editor view wrapping InputState
file_tree_view.rs # Sidebar file tree with context menu events
palette.rs # Command palette state machine
search.rs # File finder + content search state machines
theme.rs # 19 themes with runtime switching
keybindings.rs # Keyboard shortcut definitions
MIT

