odot
A minimalist, interactive command-line task manager built with Python.
Features
- Interactive prompts — arrow-key navigable menus when you omit an argument
- Rich output — clean, formatted tables via the
richlibrary - Filtering & sorting — slice your task list by status, category, priority, or date
- Import / export — move tasks between machines with JSON
- Reports — generate Markdown or HTML reports with one command
- Scripting-friendly — machine-readable JSON output via a global
--jsonflag - Local first — SQLite-backed, zero-configuration, works offline
Installation
# uv (recommended)
uv tool install odot
# pipx
pipx install odot
# pip
pip install odot
Quick Start
odot add "Buy groceries" -p 2 -c home # add a task (database created automatically)
odot list # view all tasks
odot list --todo --sort priority # open tasks, sorted by priority
The database defaults to
~/.odot/db.sqlite. Override with theODOT_DB_PATHenvironment variable.
Usage
Managing Tasks
odot add "Submit quarterly report" -p 3 -c work # add
odot show # interactive detail view
odot done 1 # mark task 1 as done
odot undo 1 # re-open task 1
odot update # interactive update
odot update 1 --content "Revised name" --done # explicit update
odot rm # interactive delete
odot rm 1 --force # skip confirmation
Searching & Filtering
odot search "groceries"
odot list --done # completed tasks only
odot list -c work --todo # open work tasks
odot list --sort priority --reverse # descending priority
odot count --todo -c work # count matches without a table
Scripting
Add --json to emit machine-readable JSON instead of a table, ready to pipe
into tools like jq:
odot list --json | jq '.[] | .content' # list open task titles
odot count --json # {"total": N, "pending": N, "done": N}
--jsonapplies tolist,show,add,update,done,undo,search,count,rm,clean,purge, andimport. It is ignored byexportandreport, which already produce their own artifacts.
Import, Export & Reports
odot export backup.json --todo # export open tasks
odot import backup.json # append from file
odot import backup.json --clear # replace all tasks
odot report tasks.md --sort priority # Markdown report
odot report work.html --todo -c work # filtered HTML report
Bulk Operations
odot clean # remove completed tasks (prompts for confirmation)
odot clean --force # skip confirmation
odot purge # remove all tasks (prompts for confirmation)
odot purge --force # skip confirmation
Development
git clone https://github.com/jkomalley/odot.git && cd odot
uv sync
just test # run pytest
just test-cov # enforce 100% coverage
just check # ruff + ty + tests
Contributing
Contributions are welcome. See CONTRIBUTING.md for development setup, project layout, and the conventions this repo follows.
License
Released under the MIT License.
Metadata
Release files for odot 0.5.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| odot-0.5.1.tar.gz | 20.8 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| odot-0.5.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 43.1 kB
Release files / odot-0.5.1.tar.gz
| Download URL | odot-0.5.1.tar.gz |
|---|---|
| Size | 20.8 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9c8f6d5802f37e707c18f23b25f785d89095f7c18de164c650573dffe9a05746
|
|
BLAKE2b-256 checksum How to use checksums |
feb5a8579fa4b41ba914eda735ca555c9e6b765f671741f31015dbeda2c0f061
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency logRelease files / odot-0.5.1-py3-none-any.whl
| Download URL | odot-0.5.1-py3-none-any.whl |
|---|---|
| Size | 22.3 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e12bac83c60e2d26f719b279eaa5a47314bac1ccb17fa93d77909763116e8ef1
|
|
BLAKE2b-256 checksum How to use checksums |
ed73133f5d3956e4c239d247493a4e11fd3f59b3fcf7fc98168b1f259c190883
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
twine/7.0.0 CPython/3.13.14
|
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
PyPI Publish Attestation
PyPI verified that this artifact, at this checksum, originated from the publisher listed below.
Signed by GitHub Actions, verified by PyPI on Sep 3, 2026.
Transparency log