Skip to main content

odot

CI PyPI Python License: MIT

A minimalist, interactive command-line task manager built with Python.

odot demo


Features

  • Interactive prompts — arrow-key navigable menus when you omit an argument
  • Rich output — clean, formatted tables via the rich library
  • 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 --json flag
  • 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 the ODOT_DB_PATH environment 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}

--json applies to list, show, add, update, done, undo, search, count, rm, clean, purge, and import. It is ignored by export and report, 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

Prerequisites: uv, just, gh

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.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

odot-0.5.0.tar.gz (20.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

odot-0.5.0-py3-none-any.whl (22.3 kB view details)

Uploaded Python 3

File details

Details for the file odot-0.5.0.tar.gz.

File metadata

  • Download URL: odot-0.5.0.tar.gz
  • Upload date:
  • Size: 20.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for odot-0.5.0.tar.gz
Algorithm Hash digest
SHA256 d9e799a91b8eb8636fda57fcc71eb98d1b2d33b06ec5bd5ea2831bbac695db7a
MD5 3808aa9bfd2b26297b4d2b4ec9b8033f
BLAKE2b-256 a6519481c47ebc3ac74c82d32c44886161b254cf884bb91a2099b7f4786c62b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for odot-0.5.0.tar.gz:

Publisher: cd.yml on jkomalley/odot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file odot-0.5.0-py3-none-any.whl.

File metadata

  • Download URL: odot-0.5.0-py3-none-any.whl
  • Upload date:
  • Size: 22.3 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for odot-0.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 419b5d4846586baa62f39bbef768faabd3d5fc592716a7662514b4e0e7d89b9f
MD5 e6f73abe4f20a04ee80ab039852664e8
BLAKE2b-256 f870ec8a62b75099187c6a321b33c41cc9e174c044940d33cee34448f1618db5

See more details on using hashes here.

Provenance

The following attestation bundles were made for odot-0.5.0-py3-none-any.whl:

Publisher: cd.yml on jkomalley/odot

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page