All notable changes to journalot will be documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
- Richer template variables —
template.mdnow supports{{day_of_week}}(e.g. Saturday),{{week_number}}(ISO week, e.g. 25), and{{time}}(HH:MM), in addition to the existing{{date}}.
- fzf-powered
--list— whenfzfis installed,--listbecomes an interactive fuzzy-finder with full entry preview on the right. Select an entry and press Enter to open it. Falls back to the existing plain list when fzf is not available.
--lastflag — open the most recent journal entry without knowing its date. Falls through to the standard flow (git sync, editor, commit prompt) just like--yesterday.
- Streak tracking in
--stats— current and longest consecutive-day streaks, computed from dated entries only (timestamped entries excluded). Cross-platform viadate_to_epochhelper (macOS + Linux).
- Calendar rendering on macOS — replaced fragile
date -dchain with pure bash leap-year math fordays_in_month. Zero external dependencies, works on all platforms.
- Calendar view —
journal --calendarshows the current month as an ASCII calendar:- Days with journal entries highlighted in blue
- Today highlighted in yellow
- Today with an entry highlighted in green
- Navigate to any month with
journal --calendar YYYY-MM(e.g.,journal --calendar 2026-01) - Cross-platform: works on macOS and Linux
- Shared journal support — first-class collaborative journaling via
--sharedflag:journal --switch kids --shared— mark a journal as shared- Shared journals pull loudly on open, showing sync status clearly
- Conflict detection before opening editor — warns if a collaborator wrote to today's entry
- Auto-commit and auto-push after every save — no prompts
- Built-in conflict resolution helper when push fails: merge, edit manually, or skip
.sharedmarker file in journal directory signals shared status
- Multiple journal support - Keep work, personal, and any other journals completely separate:
journal --switch NAME— switch to a named journal (creates it if it doesn't exist)journal --switch default— return to your default journaljournal --list-journals— list all journals with active one highlightedjournal --new-journal NAME— explicitly create a new named journal- Each journal lives at
~/journalot/journals/NAME/with its ownentries/and git repo - Active journal persists across sessions via
ACTIVE_JOURNALin config - Set
MULTI_JOURNAL=falsein config to disable the feature entirely - Fully backwards compatible — default journal at
~/journalot/is unchanged
- Improved error messages — all error messages now include actionable instructions:
- Installation errors show exact commands to fix missing directories
- "Not found" errors explain how to create what's missing
- Permission errors suggest alternative solutions
- List sort order control - New
--oldest-firstflag for--listcommand- Default:
journal --listshows newest entries first - Optional:
journal --list --oldest-firstshows oldest entries first - Useful when piping to pagers like
moreorless
- Default:
- Natural language date parsing - Use intuitive date expressions like:
--date "last friday",--date "last monday"--date "3 days ago",--date "2 weeks ago"--date "yesterday",--date "tomorrow"- Cross-platform support for macOS and Linux date commands
- Enhanced search with context - Search now shows:
- 2 lines of context before and after each match
- Color highlighting of search terms
- Total count of entries containing matches
- Backup and restore commands:
--backupcreates timestamped compressed archives in~/journalot/backups/--restoreprovides interactive selection from available backups- Automatic safety backup before restore operation
- Custom prompts system with three priority levels:
- Day-specific prompts:
~/journalot/prompts-monday.mdthrough~/journalot/prompts-sunday.md - General custom prompts:
~/journalot/prompts.md - Built-in default prompts as fallback
- Day-specific prompts choose randomly, general prompts rotate daily
- Day-specific prompts:
- Search functionality now uses
find+grepfor better cross-platform compatibility - Help text updated with new feature examples
- README updated with comprehensive documentation for all v4.5 features
- Fixed
localkeyword usage outside function scope that caused script errors - Fixed
JOURNAL_DIRto properly respect environment variable overrides - Improved error handling for backup/restore operations
- Initial public release
- Core journaling functionality with git integration
- Template support
- Daily writing prompts
- Search, stats, and export features
- Archive and organization commands
- XDG-compliant configuration
- Configurable git branch name via
GIT_BRANCHconfig option - Terminal color support using
tputwith ANSI fallback - Portable shebang
#!/usr/bin/env bashfor BSD compatibility - Enhanced installation script with error checking
- Clarified documentation distinguishing journal directory from cloned repo
- Added privacy & security documentation