Skip to main content

Add your description here

Project description

odot

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

odot provides a fast and intuitive way to manage your daily tasks directly from your terminal. Built upon Typer and SQLModel, it offers a robust SQLite-backed database with an elegant Terminal User Interface (TUI) for interactive task selection.

Features

  • Interactive Prompts: Execute commands without remembering IDs. If you forget to pass an argument, odot will display a dynamic Arrow-Key navigable menu to select tasks.
  • Rich Output: Clean, formatted tables utilizing the rich library for high readability.
  • Filtering: Easily filter missing or completed tasks right from the list command.
  • Local First: Stores your data securely in a local .sqlite database configurable via environment variables.
  • Zero Configuration: Works out of the box with intelligent defaults.

Installation

You can install odot directly from PyPI using pip, pipx, or uv.

Using pip:

pip install odot

Using pipx (Recommended for isolated CLI application installations):

pipx install odot

Using uv:

uv tool install odot

Quick Start

Once installed, initialize the database to create the required tables on your local machine.

odot init-db

By default, the database is stored at ~/.odot/db.sqlite. You can override this by setting the ODOT_DB_PATH environment variable.

Usage

Adding a Task

You can add a task by passing the content directly, or you can supply priority (-p) and category (-c) flags.

odot add "Buy groceries for dinner"
odot add "Submit quarterly report" -p 3 -c work

Listing Tasks

View all of your current tasks in a formatted table.

odot list

You can optionally filter the list by status:

odot list --done      # Show only completed tasks
odot list --pending   # Show only open tasks

Showing a Task

View detailed properties and timestamps for a specific task. If you don't know the ID, simply run odot show without arguments to open the interactive selection menu.

odot show
odot show 1

Updating a Task

Update the properties of an existing task. If you run odot update without providing a task ID, it will gracefully open an interactive selection menu to pick a task. Subsequently, if you don't provide any explicit update flags, it will launch a multi-select interactive checklist allowing you to pick exactly which fields to change.

# Fully interactive mode (Prompts for task, then prompts for fields)
odot update

# Explicit mode
odot update 1 --content "Revised task name" --done --priority 2

Removing a Task

Delete a task from the database permanently. If you don't provide an ID, odot will open the interactive selection menu so you can browse for the task to delete. By default, odot prompts you for confirmation before execution unless you provide the --force flag.

# Interactive task selection mapping
odot rm
odot rm 1
odot rm 1 --force

Development

If you wish to contribute or modify odot locally, ensure you have uv (for Python dependency management), gh (the GitHub CLI, for workflow automation), and just (the recipe task runner) installed.

  1. Clone the repository.
  2. Run uv sync to install dependencies.
  3. Authenticate the GitHub CLI via gh auth login.
  4. Use the included just workflows to run checks and tests:
just test        # Run the pytest suite natively
just test-cov    # Run tests and enforce 100% coverage
just check       # Run Ruff formatting, linting, ty typechecks, and test loops

Project details


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.1.0.tar.gz (6.3 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.1.0-py3-none-any.whl (8.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: odot-0.1.0.tar.gz
  • Upload date:
  • Size: 6.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for odot-0.1.0.tar.gz
Algorithm Hash digest
SHA256 569678ae12d20b1ce9bd5640b0f3ff66351a96163d37dc88e2c828265295f627
MD5 92011b85a147ce02daee90c0ffb222ba
BLAKE2b-256 caabb60e71bc16c9d14d016c69f6360c3414029be9101d1d36f6ef213c140314

See more details on using hashes here.

File details

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

File metadata

  • Download URL: odot-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 8.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: uv/0.10.7 {"installer":{"name":"uv","version":"0.10.7","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}

File hashes

Hashes for odot-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f07d99a6909facf38396f820351abe6f79afe1a8c2e457f2f9e9f2f795c46aad
MD5 8324a48f83ce1dabe1015b905842ebca
BLAKE2b-256 6f178ef2e2612e6f8f2b8d06b8950e5f7d83c2b107cee96cee3c3d7c223342f7

See more details on using hashes here.

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