Complete implementation of Phase 1 from PLAN.md: Core Library (bevy-tasks-core): - Data models: Task, TaskList, TaskStatus, AppConfig, WorkspaceConfig - Storage layer with filesystem implementation - Markdown file I/O with YAML frontmatter parsing (Obsidian-compatible) - TaskRepository providing full API for task management - Multiple workspace support - Manual task ordering and grouping by due date - Comprehensive unit tests for all components CLI Application (bevy-tasks-cli): - Complete command-line interface with clap - Workspace management: init, add, list, switch, remove, retarget, migrate - Task management: add, complete, delete, edit - List management: create, view - Group-by-due-date toggle - Colored output for better UX - Support for --workspace flag on all commands Infrastructure: - Cargo workspace with three crates (core, cli, gui placeholder) - Clean separation between backend and frontend - Platform-specific config storage - Task data stored as .md files with YAML frontmatter Documentation: - Comprehensive README with usage examples - Detailed inline documentation - Examples for all CLI commands This completes all deliverables for Phase 1 as specified in PLAN.md. |
||
|---|---|---|
| .idea | ||
| crates | ||
| .gitignore | ||
| Cargo.lock | ||
| Cargo.toml | ||
| PLAN.md | ||
| README.md | ||
Bevy Tasks
A local-first, cross-platform tasks application inspired by Google Tasks. Built with Rust for high performance and true native support across Windows, Linux, macOS, iOS, and Android.
Core Principles
- Local-First: Your data, your folder, your control
- Fast: Sub-second startup, instant response
- Cross-Platform: Single codebase, all platforms
- Flexible: Multiple workspaces for different contexts (personal, shared, work, etc.)
Features
Phase 1 (Current) - Core Library & CLI MVP
- ✅ Full-featured task management backend
- ✅ Multiple workspace support
- ✅ Markdown-based task storage with YAML frontmatter (Obsidian-compatible)
- ✅ Manual task ordering
- ✅ Due date support
- ✅ Task grouping by due date
- ✅ Command-line interface (CLI)
- ✅ Comprehensive test coverage
Coming Soon
- Phase 2: WebDAV sync for cross-device synchronization
- Phase 3: Desktop GUI with egui
- Phase 4: iOS and Android support
- Phase 5: Advanced GUI features
- Phase 6: Mobile platform-specific features
- Phase 7: Advanced features, imports, and collaboration
Installation
From Source
# Clone the repository
git clone <repository-url>
cd bevy-tasks
# Build the CLI
cargo build --release -p bevy-tasks-cli
# The binary will be at: target/release/bevy-tasks
Quick Start
Initialize Your First Workspace
# Create a new workspace named "personal" at ~/Documents/Tasks
bevy-tasks init ~/Documents/Tasks --name personal
This will:
- Create the tasks folder at the specified location
- Initialize the workspace with proper metadata
- Create a default list called "My Tasks"
- Set it as your current workspace
Add Tasks
# Add a simple task
bevy-tasks add "Buy groceries"
# Add a task to a specific list
bevy-tasks add "Review PR #123" --list Work
# Add a task with a due date
bevy-tasks add "Team meeting" --due 2025-11-15
View Tasks
# List all tasks in all lists
bevy-tasks list
# View tasks in a specific list
bevy-tasks list --list Work
Complete and Delete Tasks
# Complete a task (use the task ID from list output)
bevy-tasks complete <task-id>
# Delete a task
bevy-tasks delete <task-id>
Edit Tasks
# Edit a task in your default editor
bevy-tasks edit <task-id>
The edit command will open the task in your $EDITOR (or nano by default).
CLI Usage
Workspace Management
# Add a new workspace
bevy-tasks workspace add shared ~/Dropbox/TeamTasks
# List all workspaces
bevy-tasks workspace list
# Switch to a different workspace
bevy-tasks workspace switch shared
# Retarget a workspace (files already at new location)
bevy-tasks workspace retarget personal ~/new/path/to/Tasks
# Migrate workspace files to a new location
bevy-tasks workspace migrate personal ~/Dropbox/Tasks
# Remove a workspace (keeps files on disk)
bevy-tasks workspace remove shared
List Management
# Create a new task list
bevy-tasks list create "Work"
# View all tasks
bevy-tasks list
# Enable grouping by due date
bevy-tasks group enable --list Work
# Disable grouping by due date
bevy-tasks group disable --list Work
Using Specific Workspaces
Most commands support a --workspace flag to operate on a specific workspace without switching:
# Add a task to a specific workspace
bevy-tasks add "Team standup" --workspace shared
# Complete a task in a specific workspace
bevy-tasks complete <task-id> --workspace shared
# View tasks from a specific workspace
bevy-tasks list --workspace shared
Data Format
Tasks are stored as individual markdown files with YAML frontmatter:
---
id: 550e8400-e29b-41d4-a716-446655440000
status: backlog
due: 2025-11-15T14:00:00Z
created: 2025-10-26T10:00:00Z
updated: 2025-10-26T12:30:00Z
---
Task description and notes go here in **markdown** format.
- Can include lists
- Rich formatting
- Links, etc.
File System Structure
~/Documents/Tasks/ # User-selected folder
├── .metadata.json # Global: list ordering, last opened list
├── My Tasks/ # Task list folder
│ ├── .listdata.json # List metadata: task order, id, timestamps
│ ├── Buy groceries.md # Task file
│ └── Call dentist.md # Task file
└── Work/ # Another task list
├── .listdata.json
├── Review PRs.md
└── Team meeting prep.md
Configuration
Application configuration is stored in platform-specific locations:
- Windows:
%APPDATA%\bevy-tasks\config.json - Linux:
~/.config/bevy-tasks/config.json - macOS:
~/Library/Application Support/bevy-tasks/config.json
The configuration file contains your workspace definitions and current workspace selection.
Architecture
Bevy Tasks uses a clean separation between backend and frontend:
- bevy-tasks-core: Core library with data models, storage, and repository pattern
- bevy-tasks-cli: Command-line interface (current)
- bevy-tasks-gui: Graphical user interface (coming in Phase 3)
Cargo Workspace Structure
bevy-tasks/
├── Cargo.toml # Workspace definition
├── PLAN.md # Development plan
├── README.md
├── crates/
│ ├── bevy-tasks-core/ # Core library (backend)
│ ├── bevy-tasks-cli/ # CLI frontend
│ └── bevy-tasks-gui/ # GUI frontend (Phase 3+)
└── docs/
Development
Running Tests
# Test the core library
cargo test -p bevy-tasks-core
# Test all crates
cargo test
Building
# Build everything
cargo build
# Build just the CLI
cargo build -p bevy-tasks-cli
# Build in release mode
cargo build --release
Running from Source
# Run the CLI directly
cargo run -p bevy-tasks-cli -- init ~/test-tasks --name test
cargo run -p bevy-tasks-cli -- add "Test task"
cargo run -p bevy-tasks-cli -- list
License
GNU General Public License v3.0 (GPL-3.0)
This project is free and open-source software licensed under GPL v3.
Contributing
Contributions are welcome! Please feel free to submit issues and pull requests.
Roadmap
See PLAN.md for the complete development roadmap and detailed feature plans.
Credits
Inspired by Google Tasks and built with modern Rust tooling for maximum performance and cross-platform support.