bujo - Bullet journaling on the command line.
Bullet journaling is a fast way to capture daily tasks, notes, and events. bujo
lets you bring that workflow to the terminal with both a classic CLI and a rich
TUI experience.
bujo can be installed via:
go install tableflip.dev/bujo@latestMake sure to update the completion script if you are using the auto-completion:
. <(bujo completion)The CLI is a thin layer over your bullet journal. A few common commands:
# Show the collections in your journal
bujo list
# Add a task into today's daily log
bujo add "Finish README refresh"
# Review recently completed work (defaults to 1 week)
bujo report --last 1w
# Set or create a collection type (monthly/daily/generic/tracking)
bujo collections type "Future" monthly
# Jump into the fullscreen TUI
bujo uiMost users keep the TUI running in a terminal pane (bujo ui) and use the CLI
commands from another window to add or migrate tasks. The TUI supports calendar
browsing, bullet/signifier editing, command-mode shortcuts (:), and a
scrollable :report view to review completed entries within a window. Use
:type [collection] <type> to update metadata in place, and launch
:new-collection for a wizard that guides you through choosing the parent,
name, and type. New collections created through moves, :mkdir, or the wizard
surface the inferred type in their prompts.
As of the latest TUI overhaul there are still some capabilities that exist only in the CLI or only in the TUI. This checklist will guide future parity work.
CLI-only today
bujo logrenders day/month/future summaries for piping or quick export; the TUI has no single-shot log output (pkg/commands/log.go).bujo track <collection>appends an occurrence bullet and prints the counter. The TUI bullet picker doesn’t expose the tracking glyph (pkg/commands/track.go,pkg/runner/tea/ui.go:249).bujo keyemits the bullet/signifier legend; the TUI relies on contextual help and can’t print the cheat sheet (pkg/commands/key.go).bujo get …offers cross-collection filters and--show-idoutput suitable for scripting. The TUI can’t slice entries that way (pkg/commands/get.go).bujo report --lastprints reports to stdout fortee/redirect; the TUI:reportoverlay is view-only (pkg/commands/report.go,pkg/runner/tea/ui.go:4141).
TUI-only today
- Inline edit/move/future actions via
i,>,<and escape hovers have no CLI equivalents (pkg/runner/tea/ui.go:2520,pkg/runner/tea/ui.go:2550). - Indent/outdent, parent selection, and hierarchical editing live only behind
tab,shift+tab, and the parent picker (pkg/runner/tea/ui.go:2695,pkg/runner/tea/ui.go:2746). - The move selector (tab completion + create-on-enter) and type-aware validation are TUI-only (
pkg/runner/tea/ui.go:1878). - Bullet/signifier menus let you change glyphs or defaults after creation; CLI can only set signifiers at add-time (
pkg/runner/tea/ui.go:3226). - Overlay workflows—collection wizard, delete confirmation, lock/unlock commands, task metadata panel, and the scrollable report viewport—have no CLI analogs (
pkg/runner/tea/ui.go:2186,pkg/runner/tea/ui.go:2963,pkg/runner/tea/ui.go:2275,pkg/runner/tea/ui.go:4381).
(For Mac)
Make sure you have bash-completion installed:
brew install bash-completionAnd make sure the following two lines are in your .bashrc or .profile:
. /usr/local/etc/profile.d/bash_completion.sh
. <(bujo completion)
Now tab completion should work!