Article

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 hangingWithAutoStyle() 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

Evidence

Linked source: GitHub Repo: grove

Linked source: Website Source: blog / grove_blog