Complish
A local-first task management library with project organization and efficient binary storage.
Features
- Three-List Workflow: Organize tasks into
today,next, andsomedaylists - Project Organization: Group related tasks with unique project keys (e.g.,
AUTH-01,WEB-15) - Rich Task Model: Status tracking, priorities, work logs, notes, and tags
- Fast Local Storage: Binary serialization with efficient indexing for quick lookups
- Friendly IDs: Human-readable task identifiers that work great in CLIs
Quick Start
use ;
use Result;
Core Concepts
Tasks
Individual work items with comprehensive metadata:
let mut task = vault.add_task.create?;
// Status management
task.start_work?;
task.complete;
task.reopen;
// Metadata
task.add_description;
task.add_note;
task.add_tag;
task.set_priority;
// Work tracking
task.start_work_with_note?;
task.stop_work;
let total_time = task.total_time_worked;
Projects
Collections of related tasks with unique keys:
// Projects are automatically created when referenced
let task = vault
.add_task
.for_project? // Creates "DEVOPS" project if it doesn't exist
.create?;
// Task gets friendly ID: "DEVOPS-01"
Vault
The storage and indexing layer that manages everything:
let mut vault = load?;
// Fast lookups by friendly ID
if let Some = vault.find_task_by_friendly_id
// List operations
let today_tasks = vault.get_tasks_in_list;
let auth_project_tasks = vault.get_tasks_for_project;
// Persistence
vault.save?; // Saves to ~/.local/share/complish/vault
Architecture
Storage
- Binary format: Uses
bincodefor fast serialization - Local-first: No cloud dependencies, complete data ownership
- Atomic operations: Safe concurrent access with file locking
- Efficient indexing: O(1) lookups for common operations
ID System
- Canonical IDs: Internal unique identifiers (e.g.,
500) - Friendly IDs: User-facing identifiers (e.g.,
"AUTH-15","42") - Project scoping: Tasks in projects get prefixed IDs
- Sequence preservation: No gaps in ID sequences, even with failed operations
Task Model
Examples
Daily Planning Workflow
// Morning: Move tasks to today's list
vault.move_task_to_list?;
vault.move_task_to_list?;
// During work: Track progress
let task = vault.find_task_by_friendly_id_mut.unwrap;
task.start_work_with_note?;
// ... later
task.complete_with_note;
// Evening: Review completed tasks
let completed_today = vault.get_completed_tasks_today;
Project Management
// Create related tasks
for feature in
// Get project overview
let auth_tasks = vault.get_tasks_for_project;
let completed = auth_tasks.iter.filter.count;
let total = auth_tasks.len;
println!;
Time Tracking
let mut task = vault.find_task_by_friendly_id_mut.unwrap;
// Start work with context
task.start_work_with_source?;
// Add notes during work
task.add_note;
// Stop work
task.stop_work;
// Get insights
let total_time = task.total_time_worked;
let is_currently_active = task.is_being_worked;
Error Handling
The library uses eyre for ergonomic error handling:
use Result;
// Validation errors provide helpful context
match vault.add_task.for_project
// List validation
match vault.add_task.in_list
Platform Support
- Linux:
~/.local/share/complish/ - macOS:
~/Library/Application Support/complish/ - Windows:
%APPDATA%/complish/
Contributing
This library is part of the larger Complish productivity tool ecosystem. See the main repository for contribution guidelines.
License
Licensed under the MIT License. See LICENSE for details.