| Crates.io | journey-cli |
| lib.rs | journey-cli |
| version | 0.9.11 |
| created_at | 2025-10-31 23:54:39.391508+00 |
| updated_at | 2025-10-31 23:56:19.839515+00 |
| description | A CLI-based journal application with automatic timestamping, vault management, and Obsidian integration |
| homepage | https://github.com/ljantzen/journey |
| repository | https://github.com/ljantzen/journey |
| max_upload_size | |
| id | 1910988 |
| size | 365,841 |
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.
journey and journeyctl commandscargo install journey-cli
git clone https://github.com/ljantzen/journey.git
cd journey
cargo build --release
cargo install --path .
Download directly from the GitHub releases page.
# Unix/Linux/macOS
journeyctl init --path ~/my-journal --name personal
# Windows
journeyctl init --path "%USERPROFILE%\my-journal" --name personal
# From existing Obsidian vault
journeyctl init --path ~/Documents/MyObsidianVault --obsidian
# Add a note for today
journey This is my first note
# Add a note for yesterday
journey --relative-date 1 Note for yesterday
# Add a note with specific time
journey --time 14:30 Afternoon meeting notes
# List today's notes (default behavior)
journey
# List notes for specific date
journey --date 2025-10-24 --list
# List with table headers (if using table format)
journey --list --header
# Add notes to specific sections
journey -c work "Completed quarterly report"
journey -c personal "Had dinner with friends"
journey -c health "30 minutes of cardio"
Journey uses two separate binaries:
journey - Note OperationsMain journal application for daily note operations:
journeyctl - Vault ManagementAdministrative tool for vault configuration:
A vault is a directory containing your journal notes. You can have multiple vaults for different purposes (work, personal, projects, etc.).
Each note is automatically timestamped when created. Notes are stored in daily markdown files with frontmatter.
Organize notes within daily files using categories. Each category can have its own section header (e.g., "Work Notes", "Personal Notes").
# Basic note
journey My note content
# With date
journey --date 2025-10-24 Note for specific date
# Relative dates (positive = past, negative = future)
journey --relative-date 1 Note for yesterday
journey --relative-date -1 Note for tomorrow
# With time
journey --time 14:30 Note with specific time
# With category
journey -c work "Work-related note"
# From stdin (each line becomes a note)
echo -e "First note\nSecond note" | journey --stdin
# List today's notes
journey
journey --list
# List for specific date
journey --date 2025-10-24 --list
# List by category
journey --list -c work
# With table headers (table format only)
journey --list --header
# Edit today's notes
journey --edit
# Edit specific date
journey --date 2025-10-24 --edit
# Regular vault
journeyctl init --path ~/journal --name personal
# From Obsidian vault (auto-detects plugins)
journeyctl init --path ~/Documents/ObsidianVault --obsidian
# Set default vault
journeyctl set-default personal
# Show current default
journeyctl show-default
# Unset default
journeyctl unset-default
# List all vaults
journeyctl list
# Unlist a vault (removes from config, doesn't delete files)
journeyctl unlist-vault vault-name
# Show today's file path
journeyctl today
journeyctl today --vault vault-name
journeyctl today --verbose
Configuration file location:
~/.config/journey/journey.yaml~/Library/Application Support/journey/journey.yaml%APPDATA%\journey\journey.yamlvaults:
personal:
name: personal
path: ~/Documents/journal
locale: en_US.UTF-8
list_type: bullet # or "table"
section_header: "Daily Log"
phrases: {}
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"
Organize notes into different sections within your daily files. See docs/CATEGORIES.md for details.
journey -c work "Completed deployment"
journey -c personal "Dinner with family"
Use custom templates for new daily files with variable substitution. See docs/TEMPLATE_VARIABLES.md for details.
template_file: ~/templates/daily.md
Define shortcuts that expand to full phrases. See docs/PHRASE_EXPANSION.md for details.
phrases:
"@meeting": "Team meeting about project status"
Organize notes in any directory structure. See docs/FILE_PATH_FORMATS.md for details.
file_path_format: "{year}/{month:02}/{date:02}.md"
Display notes in table format with customizable headers. See docs/TABLE_MODE.md for details.
list_type: table
Import configuration from Obsidian vaults and plugins. See docs/OBSIDIAN_INTEGRATION.md for details.
journeyctl init --path ~/ObsidianVault --obsidian
Support for multiple locales with locale-aware date parsing and table headers. See docs/LOCALIZATION.md for details.
locale: no_NO.UTF-8 # Norwegian
| 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 |
| 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 |
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"
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
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
---
- 13:35:27 This is my first note
- 13:35:35 This is my second note
Or in table format:
---
date: 2025-10-24
---
| 13:35:27 | This is my first note |
| 13:35:35 | This is my second note |
# Morning: Add standup notes
journey -c work "@standup discussed project status"
# Afternoon: Log activities
journey -c work "Completed code review"
journey -c personal "Lunch with colleague"
# Evening: Review the day
journey --list
# Set default vault
journeyctl set-default work
# Add to default vault
journey "Note in work vault"
# Add to specific vault
journey --vault personal "Note in personal vault"
# Import notes from file
cat notes.txt | journey --stdin
# Add multiple categorized notes
echo -e "Task 1\nTask 2\nTask 3" | journey --stdin -c work
# Export today's notes
journey --list --header > daily-report.md
# Copy to clipboard (Linux)
journey --list --header | xclip -selection clipboard
# Email notes
journey --list --header | mail -s "Daily Notes" team@example.com
# Find today's file for external editing
vim $(journeyctl today)
Detailed documentation is available in the docs/ directory:
# Build
cargo build
# Run tests
cargo test
# Run with debug output
RUST_LOG=debug cargo run -- --help
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.