Overview
Discover what makes Taskwarrior powerful
Taskwarrior is a lightweight, command‑line driven task manager written in C++ that persists data to plain text files or SQLite. It exposes a rich, declarative query language and a set of command‑line utilities that can be scripted or wrapped by other programs. The core philosophy is “do what you need, then get out of the way,” which translates into a minimal runtime footprint and an API that can be composed with other tools (e.g., `jq`, `awk`, or custom shell scripts). Developers who need a high‑performance, deterministic task engine without the overhead of a web stack often choose Taskwarrior for its predictable behavior and extensible data model.
Declarative filtering & reporting
Project & tag hierarchy
Time tracking
Recurring tasks & alarms
Overview
Taskwarrior is a lightweight, command‑line driven task manager written in C++ that persists data to plain text files or SQLite. It exposes a rich, declarative query language and a set of command‑line utilities that can be scripted or wrapped by other programs. The core philosophy is “do what you need, then get out of the way,” which translates into a minimal runtime footprint and an API that can be composed with other tools (e.g., jq, awk, or custom shell scripts). Developers who need a high‑performance, deterministic task engine without the overhead of a web stack often choose Taskwarrior for its predictable behavior and extensible data model.
Key Features
- Declarative filtering & reporting – Tasks are queried with a syntax similar to SQL, allowing complex predicates (
+project:dev & !completed) that can be reused in custom reports. - Project & tag hierarchy – Projects are organized as a tree; tags can be attached to any task, enabling multi‑dimensional categorization.
- Time tracking – Integrated with Timewarrior, it can record start/stop times and compute effort per task or project.
- Recurring tasks & alarms – Supports cron‑style recurrence and file‑based alarm notifications that can trigger scripts or system notifications.
- Extensible command set – The
taskbinary accepts custom plugins written in C, Python, or any language that can read/write the task database.
Technical Stack
| Layer | Technology |
|---|---|
| Runtime | C++ (GNU C++17), POSIX compliant |
| Data storage | Plain text JSON‑like format (*.data) or optional SQLite 3 |
| Configuration | YAML/INI‑style .taskrc files, environment variables |
| Build system | Autotools (configure, make) with optional CMake support |
| Packaging | Debian/Ubuntu packages, Homebrew formulae, RPMs, and source tarballs |
| Testing | Unit tests with Google Test; integration tests via task CLI scripts |
Taskwarrior ships as a single binary (task) that reads its configuration from ~/.taskrc. The binary parses the task database, applies filters, and writes back changes atomically. When SQLite is enabled, all reads/writes go through the native driver; otherwise, the text format is line‑oriented and lock‑free for concurrent reads.
Core Capabilities & APIs
- Command‑line API – Every
tasksubcommand (add,modify,delete,report) is a first‑class API that can be invoked from shell scripts or HTTP wrappers. - JSON output –
task _jsonreturns the full task list as JSON, enabling integration with web services or other programming languages. - Filter language – The filter syntax (
+project:dev & !completed) is parsed into an abstract syntax tree, which can be reused by third‑party parsers. - Hooks – Pre/post hooks (
pre:,post:) allow developers to inject scripts before or after any command, facilitating CI pipelines or custom workflows. - RESTful wrappers – While Taskwarrior itself is CLI‑centric, community projects expose REST endpoints (e.g.,
taskdserver) that translate HTTP calls into CLI commands.
Deployment & Infrastructure
Taskwarrior is intentionally minimal: it requires only a POSIX‑compatible shell and the task binary. For self‑hosting, developers can:
- Containerize – A Docker image (
ghcr.io/taskwarrior/task:latest) contains the binary and a minimal base OS, making it trivial to deploy in Kubernetes or Docker‑Compose setups. - Scale horizontally – Since each instance writes to its own database, scaling is achieved by sharding tasks per user or project and synchronizing via
taskdor a custom sync layer. - High availability – The optional SQLite backend can be replicated using
sqlite-syncor a shared filesystem; the text format is file‑based and can be versioned in Git for lightweight collaboration.
Integration & Extensibility
- Plugin architecture – Developers can write plugins in C++ or any language that writes to the task database. The
taskbinary discovers plugins at runtime via a$PATHlookup. - Webhooks & notifications – Hooks can trigger HTTP callbacks, send emails, or push to messaging platforms (Slack, Discord) when a task status changes.
- Custom reports – The
reportcommand accepts user‑defined templates written in a lightweight templating language, allowing dynamic PDF or HTML exports. - Timewarrior & Taskshell – Native integration with the time‑tracking tool
Timewarriorand shell extensionTaskshell, enabling command chaining and context switching.
Developer Experience
- Configuration – The
.taskrcfile is highly expressive, supporting variable substitution, conditional blocks, and command aliases. Documentation provides exhaustive examples for advanced use. - Community & Support – An active mailing list, IRC channel (
#taskwarrioron Libera.Chat), and bi‑weekly community meetings foster rapid issue resolution. The codebase is open source under GPLv3, encouraging contributions. - Testing & CI – The upstream repository includes a comprehensive test matrix across Linux, macOS, and Windows (via WSL), ensuring reliability for developers targeting diverse platforms.
Use Cases
- Developer Task Tracking – Integrate
taskinto CI pipelines to flag overdue tests or code reviews. - Project Management for Small Teams – Use
Open SourceReady to get started?
Join the community and start self-hosting Taskwarrior today
Related Apps in development-tools
Hoppscotch
Fast, lightweight API development tool
code-server
Self-hosted development-tools
AppFlowy
AI-powered workspace for notes, projects, and wikis
Appwrite
All-in-one backend platform for modern apps
PocketBase
Lightweight Go backend in a single file
Gitea
Fast, lightweight self-hosted Git platform
Weekly Views
Repository Health
Information
Explore More Apps
RconCli
Command‑line RCON client for Source servers
Mergeable
Better inbox for GitHub pull requests
Lidarr
Automated music collection manager for torrent and Usenet users
Zusam
Private forums for friends, self-hosted and lightweight
Ryot
All‑in‑one self‑hosted tracker for media and fitness
ActivityWatch
Track your time privately, automatically and cross‑platform