grove
grove is a terminal-native note-taking app — Obsidian for the command line. Plain markdown files, wiki-links, fuzzy search, Vim keybindings, and Gemini-powered AI search across the vault. Zero Electron, zero lock-in.
Why It Exists
"I live in the terminal." Every switch to Obsidian broke flow. grove is what was actually wanted: note-taking without leaving the terminal.
Architecture
Written in Go. Key dependencies: Bubble Tea (Elm-style TUI), Glamour (markdown rendering), Lip Gloss (terminal styling). Notes live at ~/.local/share/grove/notes/ as plain .md files with YAML frontmatter. Four views: list, viewer, search, AI chat.
Config at ~/.config/grove/config.json — shared with pairy (same Gemini key reused deliberately).
Hard Bugs Solved
Two debugging experiences worth recording:
1. Glamour hanging — WithAutoStyle() sends OSC terminal queries to detect dark/light mode, which blocks inside Bubble Tea's alt-screen mode. Fix: detect the theme *before* Bubble Tea takes stdin.
2. ANSI interference — Glamour and Lip Gloss both emit ANSI escape codes; composing them naively corrupts output. Fix: keep rendering pipelines separate and concatenate rather than nest styled regions.
Relation to This Wiki
This wiki (p-wiki) and grove share the same philosophy: knowledge as files, not apps. grove is the CLI-first instantiation of that idea. Cross-reference when designing CLI workflows.
Related Pages
Sources
- GitHub Repo: grove -
wiki/sources/github/grove.md - Website Source: blog / grove_blog -
wiki/sources/website/blog-grove-blog.md
Evidence
Linked source: GitHub Repo: grove
Linked source: Website Source: blog / grove_blog