Skip to main content

A minimalist, stateful CLI todos manager with local and cloud database support.

Project description

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

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

opentodo-1.0.0.tar.gz (15.2 kB view details)

Uploaded Source

Built Distribution

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

opentodo-1.0.0-py3-none-any.whl (16.1 kB view details)

Uploaded Python 3

File details

Details for the file opentodo-1.0.0.tar.gz.

File metadata

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

File hashes

Hashes for opentodo-1.0.0.tar.gz
Algorithm Hash digest
SHA256 a38747279df98cc19a9efee0f46328a5568f5ca55d8232aabd1de58aeab3ad3d
MD5 9998b67555f31a10e780ae27b160416a
BLAKE2b-256 75bf1f9f96a902bd448a3f21efeb1acb35d98193bd6481937ae7f2dd0dc19bae

See more details on using hashes here.

Provenance

The following attestation bundles were made for opentodo-1.0.0.tar.gz:

Publisher: publish.yml on TahirSiddique092/OpenToDo

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

File details

Details for the file opentodo-1.0.0-py3-none-any.whl.

File metadata

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

File hashes

Hashes for opentodo-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 f5becad68664154bf4f082004f86ea6611c2a4a15972a901fde183628dbcb30f
MD5 25eeda7a711d295cc6ee5e56c042940c
BLAKE2b-256 9bd5672297a980cb058c8e640358a81fee0e44c7d2a6b06edd53475497a78ad9

See more details on using hashes here.

Provenance

The following attestation bundles were made for opentodo-1.0.0-py3-none-any.whl:

Publisher: publish.yml on TahirSiddique092/OpenToDo

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