Minimal journaling CLI for developers. Just type journal in your terminal and start writing.
journalot is a CLI tool for maintaining a daily markdown journal with Git-based version control. It's designed to be lightweight and easy to use, promoting mindfulness and reflection.
You can also search past entries by keyword or date using command-line tools like grep or fzf. For example, grep "confidence" or "new idea" ~/journalot/entries/*.md
- Creates a daily journal file:
YYYY-MM-DD.mdstored inentries/folder - Smart editor detection (respects
$EDITORor falls back to code → vim → nano) - Optional Git integration with auto-commit and push
- Template support for customized entry structure
- Config file support (
~/.journalotrc)
- Quick capture:
journal "Had a great idea"- append to today's entry without opening editor - Enhanced list view: Word count and preview for each entry
- Auto-sync: Set
AUTOSYNC=truein config to skip commit/push prompts - Previous entries:
--yesterdayor--dateto access any day
- Stats:
--statsshows total entries, words, and patterns (non-gamified) - Search:
--search "keyword"to find entries containing text - Week view:
--weekopens all entries from current week - Timestamps:
--timecreates multiple entries per day (e.g.,2025-01-15-1430.md) - Tags: Filter entries by hashtag with
--tag work - Export:
--export htmlor--export pdfto share or archive - Random entry:
--randomrediscover old thoughts - Diff view:
--diff DATEsee what changed in an entry - Archive:
--archive YEARmove old years to archive folder - Daily prompts: Writing prompts for blank entries (disable with
DISABLE_PROMPTS=true)
Every journaling app has the same problem: friction. Open app → wait for sync → click new entry → choose template...
journalot eliminates all of that:
- You're already in terminal → just type
journal - Opens in your preferred editor → no learning curve
- Auto-commits to git → no manual syncing
- Just markdown files → complete ownership
The best productivity tool is the one you actually use.
brew tap jtaylortech/journalot
brew install journalotgit clone [email protected]:jtaylortech/journalot.git
cd journalot
sudo ./install.shIf you want to sync across devices, set up SSH access for GitHub. Guide
By default, this repo points to my public GitHub. To push your own journal entries:
- Create a new private repo on GitHub (e.g.,
journalot-private) - Replace the remote:
git remote remove origin
git remote add origin [email protected]:<your-username>/journalot-private.git
git push -u origin mainjournal # Open today's journal
journal "Had a breakthrough today" # Quick capture (append without editor)
journal --yesterday # Open yesterday's journal
journal --date 2025-01-15 # Open specific date
journal --time # Create timestamped entry (multiple per day)
journal --list # List all entries with previews
journal --help # Show helpjournal --search "confidence" # Search all entries for keyword
journal --week # Open all entries from this week
journal --tag work # Filter entries by #tag
journal --stats # View journal statistics
journal --random # Show a random entry
journal --diff 2025-01-15 # See git history for an entry
journal --prompt # Show today's writing promptjournal --archive 2024 # Archive all 2024 entries
journal --archive 2024 --unarchive # Restore from archivejournal --export html # Export to HTML
journal --export pdf # Export to PDF (requires pandoc)Create ~/.journalotrc to customize behavior:
# Auto-sync without prompts
AUTOSYNC=true
# Custom journal directory (optional)
# JOURNAL_DIR="$HOME/my-journal"Create ~/journalot/template.md to customize new entries:
# {{date}}
## What happened today?
## Grateful for
## Tomorrow's focus- Editor: Set
$EDITORenvironment variable (e.g.,export EDITOR=vim) - Journal Directory: Edit
JOURNAL_DIRin config orbin/journal(default:~/journalot) - Template: Create
~/journalot/template.mdfor custom entry structure - Auto-sync: Set
AUTOSYNC=truein~/.journalotrcto skip prompts
- Quick capture great for fleeting thoughts:
journal "Remember to check that bug" - Use tags for organization: add
#work,#personal,#ideasto entries - Search is case-insensitive and shows line numbers
- Week view opens all entries in your editor at once
- Stats are informational only - no guilt for skipping days
- Templates support
{{date}}placeholder - Daily prompts rotate based on day of year (disable with
DISABLE_PROMPTS=true) - Archive old entries to keep your main folder clean
- Use
--randomfor serendipitous rediscovery
This project is licensed under the MIT License - see the LICENSE file for details.