Journey - A CLI-based Journal Application
Journey is a command-line journal application written in Rust that allows you to manage daily notes with automatic timestamping and flexible date/time handling.
Features
- Vault Management: Create and manage multiple journal vaults
- Obsidian Integration: Import configuration from existing Obsidian vaults and plugins
- Automatic Timestamping: Notes are automatically timestamped
- Flexible Date/Time: Support for absolute dates, relative dates, and custom times
- Category-Based Sections: Organize notes into specific sections (work, personal, health, meetings)
- Template Files: Custom templates with variable substitution
- Phrase Expansion: Define shortcuts that expand to full phrases
- Table & Bullet Formats: Choose between bullet points or table format for notes
- Cross-platform: Works on Linux, macOS, and Windows
- Dual Binary Architecture: Separate
journeyandjourneyctlcommands
Installation
Using Cargo
Build from Source
Download Binaries
Download directly from the GitHub releases page.
Quick Start
1. Initialize a Vault
# Unix/Linux/macOS
# Windows
# From existing Obsidian vault
2. Add Notes
# Add a note for today
# Add a note for yesterday
# Add a note with specific time
3. List Notes
# List today's notes (default behavior)
# List notes for specific date
# List with table headers (if using table format)
4. Organize with Categories
# Add notes to specific sections
Binary Architecture
Journey uses two separate binaries:
journey - Note Operations
Main journal application for daily note operations:
- Add notes
- List notes
- Edit notes
journeyctl - Vault Management
Administrative tool for vault configuration:
- Initialize vaults
- Manage default vault
- List/unlist vaults
- Show today's file path
Core Concepts
Vaults
A vault is a directory containing your journal notes. You can have multiple vaults for different purposes (work, personal, projects, etc.).
Notes & Timestamps
Each note is automatically timestamped when created. Notes are stored in daily markdown files with frontmatter.
Categories
Organize notes within daily files using categories. Each category can have its own section header (e.g., "Work Notes", "Personal Notes").
Basic Commands
Adding Notes
# Basic note
# With date
# Relative dates (positive = past, negative = future)
# With time
# With category
# From stdin (each line becomes a note)
|
Listing Notes
# List today's notes
# List for specific date
# List by category
# With table headers (table format only)
Editing Notes
# Edit today's notes
# Edit specific date
Vault Management
Initialize Vaults
# Regular vault
# From Obsidian vault (auto-detects plugins)
Default Vault
# Set default vault
# Show current default
# Unset default
List and Manage Vaults
# List all vaults
# Unlist a vault (removes from config, doesn't delete files)
# Show today's file path
Configuration
Configuration file location:
- Linux:
~/.config/journey/journey.yaml - macOS:
~/Library/Application Support/journey/journey.yaml - Windows:
%APPDATA%\journey\journey.yaml
Basic Configuration
vaults:
personal:
name: personal
path: ~/Documents/journal
locale: en_US.UTF-8
list_type: bullet # or "table"
section_header: "Daily Log"
phrases:
Advanced Configuration
vaults:
work:
name: work
path: ~/Documents/work-journal
locale: en_US.UTF-8
# File organization
file_path_format: "{year}/{month:02}/{date:02}.md"
template_file: ~/templates/work-daily.md
# Note format
list_type: table
table_headers:
time: "Time"
content: "Content"
# Category sections
section_header: "General Notes"
section_header_work: "Work Tasks"
section_header_personal: "Personal Notes"
section_header_health: "Health & Fitness"
section_header_meetings: "Meeting Notes"
# Phrase expansion
phrases:
"@meeting": "Team meeting about project status"
"@standup": "Daily standup meeting"
"@review": "Code review completed"
Advanced Features
Categories and Sections
Organize notes into different sections within your daily files. See docs/CATEGORIES.md for details.
Template Files
Use custom templates for new daily files with variable substitution. See docs/TEMPLATE_VARIABLES.md for details.
template_file: ~/templates/daily.md
Phrase Expansion
Define shortcuts that expand to full phrases. See docs/PHRASE_EXPANSION.md for details.
phrases:
"@meeting": "Team meeting about project status"
Custom File Paths
Organize notes in any directory structure. See docs/FILE_PATH_FORMATS.md for details.
file_path_format: "{year}/{month:02}/{date:02}.md"
Table Mode
Display notes in table format with customizable headers. See docs/TABLE_MODE.md for details.
list_type: table
Obsidian Integration
Import configuration from Obsidian vaults and plugins. See docs/OBSIDIAN_INTEGRATION.md for details.
Localization
Support for multiple locales with locale-aware date parsing and table headers. See docs/LOCALIZATION.md for details.
locale: no_NO.UTF-8 # Norwegian
Command Reference
journey (Note Operations)
| Option | Description |
|---|---|
<NOTE> |
Add a note (default action) |
-l, --list |
List notes for the specified date |
-e, --edit |
Edit notes for the specified date |
-d, --date <DATE> |
Specify date (multiple formats supported) |
-r, --relative-date <DAYS> |
Days offset (positive=past, negative=future) |
-t, --time <TIME> |
Specify time (HH:MM or HH:MM:SS) |
--time-format <FORMAT> |
Force time format (12h or 24h) |
-c, --category <CATEGORY> |
Specify category (work, personal, health, meetings) |
--header |
Include table headers when listing (table format only) |
--stdin |
Read input from stdin (each line = one note) |
-V, --vault <NAME> |
Specify vault name |
-v, --version |
Show version information |
journeyctl (Vault Management)
| Command | Description |
|---|---|
init --path <PATH> |
Initialize a new vault |
init --path <PATH> --obsidian |
Initialize from Obsidian vault |
list |
List all configured vaults |
set-default <NAME> |
Set default vault |
show-default |
Show current default vault |
unset-default |
Remove default vault |
unlist-vault <NAME> |
Remove vault from configuration |
today |
Show today's file path |
today --vault <NAME> |
Show path for specific vault |
today --verbose |
Show detailed information |
Date Format Support
Journey supports multiple date formats based on your locale:
English/US (en_US.UTF-8):
2025-10-24(ISO)10/24/2025(US)October 24, 2025(Long)
Norwegian (no_NO.UTF-8):
2025-10-24(ISO)24.10.2025(Norwegian)24. oktober 2025(Long)
Custom override:
date_format: "DD.MM.YYYY"
Path Expansion
Journey supports automatic path expansion:
Unix/Linux/macOS:
path: ~/Documents/journal # Expands to /home/user/Documents/journal
Windows:
path: "%USERPROFILE%\Documents\journal" # Expands to C:\Users\user\Documents\journal
File Structure
Default structure (can be customized):
vault-directory/
├── 2025-10-24.md
├── 2025-10-23.md
└── 2025-10-22.md
Each markdown file contains:
date: 2025-10-24
- -
Or in table format:
date: 2025-10-24
Examples
Daily Workflow
# Morning: Add standup notes
# Afternoon: Log activities
# Evening: Review the day
Working with Multiple Vaults
# Set default vault
# Add to default vault
# Add to specific vault
Batch Operations
# Import notes from file
|
# Add multiple categorized notes
|
Integration with Other Tools
# Export today's notes
# Copy to clipboard (Linux)
|
# Email notes
|
# Find today's file for external editing
Documentation
Detailed documentation is available in the docs/ directory:
- OBSIDIAN_INTEGRATION.md - Obsidian vault integration
- CATEGORIES.md - Category-based section organization
- TEMPLATE_VARIABLES.md - Template file variables
- PHRASE_EXPANSION.md - Phrase shortcuts
- FILE_PATH_FORMATS.md - Custom file path formats
- TABLE_MODE.md - Table format and headers
- LOCALIZATION.md - Locale support and internationalization
- SECTION_BASED_NOTES.md - Section-based note organization
- DATE_FORMAT_OVERRIDE.md - Custom date formats
- TIME_FORMAT_OVERRIDE.md - Time format overrides
- DEFAULT_BEHAVIOR_UPDATE.md - Default behavior changes
- SINGLE_VAULT_AUTO_SELECTION.md - Single vault auto-selection
Development
# Build
# Run tests
# Run with debug output
RUST_LOG=debug
License
This software is licensed under a combined MIT and SPPL license. It is basically a MIT license, but in order to be compliant you need to send me a postcard. Details in LICENSE.