A terminal-based note-taking and journaling app built with Go and Bubble Tea.
Built while learning from this YouTube tutorial to explore TUI development with BubbleTea
github.mp4
Important
- Tested only on Linux as of now
- Image preview requires a Kitty-compatible terminal (e.g. Kitty, WezTerm) and
chafainstalled. It will not work in standard terminals like GNOME Terminal, Alacritty, or tmux. - Still in development, bugs are expected. All the above mentioned will also be fixed
- Go 1.21+
- chafa (optional, for image previews in Kitty-compatible terminals)
Clone the repository:
git clone https://github.com/A-Knee09/YapPad.git
cd YapPadmake installThis installs to ~/.local/bin/yap. Make sure it's in your PATH:
- Bash/Zsh:
export PATH="$HOME/.local/bin:$PATH" - Fish:
fish_add_path ~/.local/bin
make uninstallyap # Open default vault (~/.YapPad) in "all" mode
yap . # Open in current directory (WIP)
yap --mode daily # Open in daily journal mode
yap --mode weekly ~/notes # Use ~/notes as vault, weekly mode| Flag | Description |
|---|---|
--mode <mode> |
Set default yap mode: all, daily, weekly, monthly, yearly |
--editor <editor name> |
Set editor for editing files: nvim,nano,inbuilt (yet to be implemented) |
--version |
Print the application version |
[vault-dir] |
Optional path to notes directory (default: ~/.YapPad) |
Notes are organized into subdirectories by frequency: daily/, weekly/, monthly/, yearly/. Press 0-4 to switch between All/Daily/Weekly/Monthly/Yearly views.
Press ctrl+n to enter creation mode. You will be prompted for a filename first, then an optional description. Pressing enter on an empty filename auto-generates a date-stamped file in the current mode's directory (e.g. daily/2026-02-18.md). Press tab while typing the filename to cycle through journal modes before creating. Pressing enter on an empty description skips it and falls back to showing the modified date.
Each note can have a custom description that appears in the file list beneath its title. Descriptions are stored in ~/.YapPad/.metadesc/ as hidden sidecar files and do not modify the note content at all. If no description is set, the last modified date is shown instead.
Press ctrl+r to rename the selected note. You will be prompted for the new filename and then a new description. If you skip the description step, the existing description is preserved automatically.
Place template files in ~/.YapPad/.templates/ named after the mode (daily.md, weekly.md, etc.). New default journal entries will be pre-filled with the matching template content.
Toggle with ctrl+p. Displays syntax-highlighted text previews for markdown and code files, and inline image previews for supported image formats. The preview pane auto-hides if the terminal is too narrow (below 80 columns). Image previews require chafa and a Kitty-compatible terminal.
Press ctrl+s to cycle through sort modes: Modified (newest/oldest), Created (newest/oldest), and Alphabetic (ascending/descending).
Scroll the file list and preview pane independently using the mouse wheel.
Press / to filter notes by filename within the current view.
| Key | Action |
|---|---|
ctrl+n |
Create new note |
ctrl+r |
Rename selected note |
ctrl+d |
Delete selected note |
ctrl+p |
Toggle preview pane |
ctrl+s |
Cycle sort mode |
enter |
Open selected note in $EDITOR (default: nvim) |
0-4 |
Switch mode (0=all, 1=daily, 2=weekly, 3=monthly, 4=yearly) |
tab |
Cycle journal mode while creating a note |
/ |
Filter notes by name |
? |
Toggle help menu |
esc |
Cancel current action |
All notes are stored locally in ~/.YapPad/ (or the vault directory you specify). Each note is a plain Markdown file. Descriptions are stored separately in ~/.YapPad/.metadesc/ and do not affect the files themselves.
~/.YapPad/
├── daily/
├── weekly/
├── monthly/
├── yearly/
├── .metadesc/
└── .templates/
make run # Run with Go
make build # Build binary to build/yap
make clean # Remove build artifacts