Skip to main content

OpenTodo (otodo)

A minimalist, high-density task manager designed for engineers.

OpenTodo operates as a stateful terminal engine and a fully featured Python SDK. It supports both local SQLite sandboxes and cloud-native PostgreSQL databases. With native YAML ingestion, you can manage your tasks exactly how you manage your infrastructure: as code.


📑 Table of Contents

  1. Installation
  2. CLI Quick Start
  3. Python SDK Guide
  4. YAML Manifests (Tasks as Code)
  5. Advanced Configuration

📦 Installation

Install OpenTodo globally via pip:

pip install opentodo

💻 CLI Quick Start

The otodo CLI is designed for speed and stateful navigation.

1. Initialize the Engine

You must initialize your database routing before your first command.

Local SQLite:

otodo init

Cloud PostgreSQL:

otodo init --url "postgresql://user:password@localhost:5433/postgres"

2. Workspace Workflow

Create a list, add tasks, and view your dashboard.

otodo create "v1-release"
otodo add "Draft architecture docs" -p 10
otodo add "Configure CI/CD" -p 5

Type otodo to view your high-density table of pending tasks. The engine automatically sorts by priority.

otodo

3. Command Reference

  • otodo add <title> [-p priority] - Add a task.
  • otodo done <id> - Mark a task complete.
  • otodo update <id> [-t title] [-p priority] - Update a task.
  • otodo rm <id> - Delete a task.
  • otodo lists - View all workspaces.
  • otodo use <list_name> - Switch active workspace.

(Tip: Use otodo --help to see all available flags and options).


🐍 Python SDK Guide

OpenTodo's core engine can be imported directly into your own Python applications, web servers (like FastAPI), or automation scripts.

Initialization

Import the client and connect it to your preferred database.

from opentodo.core import OpenTodo

# For local SQLite:
client = OpenTodo(output_dir="/path/to/data")

# For cloud PostgreSQL:
# client = OpenTodo(db_string="postgresql://user:pass@localhost:5433/db")

Managing Lists (Workspaces)

# Create a new list
client.lists.create("backend-sprint")

# Fetch all lists
all_lists = client.lists.get_all()

# Rename a list
client.lists.rename("backend-sprint", "v1-backend")

Managing Tasks

# Add a task to a specific list
client.todos.add(list_name="v1-backend", title="Write SDK tests", priority=8)

# Fetch pending tasks (automatically sorted by priority)
tasks = client.todos.get_by_list("v1-backend", status="pending")

# Complete a task using its true Database ID
task_id = tasks[0]["id"]
client.todos.complete(task_id)

Error Handling

The SDK raises domain-specific exceptions for safe error handling.

from opentodo.exceptions import ListNotFoundError, TodoNotFoundError

try:
    client.todos.complete(999)
except TodoNotFoundError as e:
    print(f"Failed: {e}")

⚙️ YAML Manifests

Store your standard operating procedures, sprint plans, or onboarding tasks in a YAML file and apply them idempotently via the CLI or the SDK.

Example sprint.yaml:

version: "1.0"
lists:
  v1-release:
    - title: "Write API documentation"
      priority: 8
    - title: "Configure Dockerfile"
      priority: 5

Apply via CLI:

otodo apply sprint.yaml

Apply via SDK:

results = client.manifest.apply("sprint.yaml")
print(results)

Note: The apply command uses an upsert strategy. It will never overwrite existing completed tasks or duplicate existing pending tasks.


🎛️ Advanced Configuration

Priority Scaling (CLI)

By default, the CLI marks tasks with priority >= 8 as HIGH and >= 4 as MED. You can change these visual thresholds instantly:

# Set High to >= 50, and Medium to >= 20
otodo scale 50 20

Metadata

Release files for opentodo 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for opentodo 1.0.0
File Size Uploaded Provenance
opentodo-1.0.0.tar.gz 15.2 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for opentodo 1.0.0
File Interpreter ABI Platform
opentodo-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 31.3 kB

Release files / opentodo-1.0.0.tar.gz

Download URL opentodo-1.0.0.tar.gz
Size 15.2 kB
Tags Source
SHA-256 checksum
How to use checksums
a38747279df98cc19a9efee0f46328a5568f5ca55d8232aabd1de58aeab3ad3d
BLAKE2b-256 checksum
How to use checksums
75bf1f9f96a902bd448a3f21efeb1acb35d98193bd6481937ae7f2dd0dc19bae
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Jun 18, 2026.

Transparency log

Release files / opentodo-1.0.0-py3-none-any.whl

Download URL opentodo-1.0.0-py3-none-any.whl
Size 16.1 kB
Tags Python 3
SHA-256 checksum
How to use checksums
f5becad68664154bf4f082004f86ea6611c2a4a15972a901fde183628dbcb30f
BLAKE2b-256 checksum
How to use checksums
9bd5672297a980cb058c8e640358a81fee0e44c7d2a6b06edd53475497a78ad9
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

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 Jun 18, 2026.

Transparency log

Security for opentodo 1.0.0

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for opentodo-1.0.0.tar.gz

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 Jun 18, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page