A command-line application for organizing and managing personal notes and tasks. Notes and tasks are stored as plain text files in the filesystem, each with a unique ID, name, created timestamp, and last edited timestamp. Tasks also include status tracking (open, completed, abandoned).
The same binary serves both functions - invoked as note for notes and task for tasks (via symlink).
- Simple file-based storage: Platform-appropriate storage (Windows:
%LOCALAPPDATA%, Unix:~/.local/share/) - Unique identification: Each note/task has a unique sequential numeric ID
- Timestamp tracking: Track when notes/tasks were created and last edited
- Text search: Search across note/task names and content
- Editor integration: Uses your
$EDITORwith platform-specific defaults - Task status management: Change task status between open, completed, and abandoned
- Status filtering: List tasks by status
- Cross-platform support: Works on Windows, Linux, and macOS with appropriate defaults
- Shell completion: Auto-complete support for bash, zsh, fish, and powershell
git clone https://github.com/wltechblog/notes.git
cd notes
go build -o note
sudo cp note /usr/local/bin/ # or copy to ~/.local/bin/
sudo ln -s /usr/local/bin/note /usr/local/bin/taskmake build # Build binary
make install # Install to ~/.local/bin/ (also creates 'task' symlink)The installation creates a single binary named note with a symlink named task. Both commands access the same binary but show different available commands.
task new "Buy groceries" # Create task with name
task new # Create task with timestamp as nameTasks start with open status by default.
task list # List all tasksOutputs tasks in format: ID | Name | [status] | Created: date | Updated: date
task list --status open # List only open tasks
task list --status completed # List only completed tasks
task list --status abandoned # List only abandoned tasks
task list -s completed # Short formtask status <id> <status> # Change task status
task status 1 completed # Example: mark task 1 as completed
task status 2 abandoned # Example: mark task 2 as abandonedValid statuses: open, completed, abandoned (run task status --help for details)
task search "keyword" # Search by keyword
task search "meeting" # Example: find all meeting tasksPerforms case-insensitive search across task names and content.
task delete <id> # Delete a task by ID
task delete 1 # Example: delete task 1Deleting a task removes the task file.
task edit <id> # Edit the content of a task
task edit 1 # Example: edit task 1Opens $EDITOR with the task content. Updates the task's content and last edited timestamp.
The application is designed to work on both Windows and Unix-like systems:
- Data storage locations:
- Windows:
%LOCALAPPDATA%\notes\and%LOCALAPPDATA%\tasks\ - Linux/macOS:
~/.local/share/notes/and~/.local/share/tasks/
- Windows:
- Editor detection:
- Windows: Defaults to
notepadif$EDITORnot set - Unix: Defaults to
viif$EDITORnot set
- Windows: Defaults to
- GUI editor support:
- VS Code, Notepad++, Sublime Text are detected and launched with
--waitflag on Windows
- VS Code, Notepad++, Sublime Text are detected and launched with
- File permissions:
- Platform-appropriate permissions are set for directories and files
note new "my note" # Create note with custom name
note new # Create note with timestamp as nameOpens $EDITOR (defaults to vi if not set) with an empty buffer. If you save with content, the note is created. If you exit with an empty buffer, no note is saved.
note listOutputs notes in format: ID | Name | Created: date | Updated: date
note search "keyword" # Search by keyword
note search "meeting" # Example: find all meeting notesPerforms case-insensitive search across note names and content.
note edit <id> # Opens $EDITOR with note content
note edit a1b2c3d4 # Example: edit specific noteUpdates the note's content and last edited timestamp when saved.
note delete <id> # Delete a note by ID
note delete a1b2c3d4 # Example: delete specific noteEnable command-line completion for your shell. The task command completion works the same way as note:
Add to your ~/.bashrc or ~/.bash_profile:
# For auto-completion
source <(note completion bash)
source <(task completion bash)Or for persistent completion:
note completion bash > ~/.local/share/bash-completion/completions/note
task completion bash > ~/.local/share/bash-completion/completions/taskAdd to your ~/.zshrc:
# For auto-completion
source <(note completion zsh)
source <(task completion zsh)
# Or add to your completion functions directory
note completion zsh > ~/.zsh/completion/_note
task completion zsh > ~/.zsh/completion/_taskAdd to your ~/.config/fish/completions/ directory:
note completion fish > ~/.config/fish/completions/note.fish
task completion fish > ~/.config/fish/completions/task.fishAdd to your PowerShell profile:
note completion powershell | Out-String | Invoke-Expression
task completion powershell | Out-String | Invoke-ExpressionOr save and source from your profile:
note completion powershell > note.ps1
task completion powershell > task.ps1Notes are stored as plain text files in ~/.local/share/notes/:
~/.local/share/notes/
├── 1.txt
├── 2.txt
├── 3.txt
├── .counter # Tracks next ID
└── ...
Each note file contains:
Created: 2026-01-15T10:49:30-07:00
Updated: 2026-01-15T10:49:56-07:00
Name: my note
This is note content...
Tasks are stored as plain text files in ~/.local/share/tasks/:
~/.local/share/tasks/
├── 1.txt
├── 2.txt
├── 3.txt
├── .counter # Tracks next ID
└── ...
Each task file contains:
Created: 2026-01-15T10:49:30-07:00
Updated: 2026-01-15T10:49:56-07:00
Status: open
NoteID:
Name: Buy groceries
This is task content...
The NoteID field is reserved for future note integration and is currently empty.
This software is licensed under the GNU GPL 2.0.