A personal task management system built in Python with a clean, pluggable architecture.
Status: Phases 0β5 complete. Fully functional.
Kirokyu is a local-first task manager. It helps one person organize, track, and complete their work across isolated workspaces. Each workspace is an independent data silo with its own SQLite database.
The project is deliberately built around Hexagonal Architecture (Ports and Adapters). The domain core is independent of all infrastructure β persistence, delivery mechanisms, and interfaces are swappable adapters. This means the same business logic is reachable through three completely different interfaces today, with more planned.
streamlit run src/kirokyu/adapters/ui/app.pyBrowser-based interface at http://localhost:8501. Includes task management and an analytics dashboard.
kirokyu --help
kirokyu --workspace personal task create "Buy groceries"
kirokyu --workspace personal task listEnvironment variable shortcut:
export KIROKYU_WORKSPACE=personal
kirokyu task list
kirokyu task create "Call the bank" --priority highuvicorn kirokyu.adapters.api.app:app --reloadInteractive documentation at http://localhost:8000/docs.
Kirokyu organizes tasks into isolated workspaces. Each workspace has its own SQLite database file under ~/.kirokyu/workspaces/.
kirokyu workspace create personal
kirokyu workspace create work
kirokyu workspace listβββββββββββββββββββββββββββββββββββββββββββββββ
β Driving Adapters β
β Streamlit UI β Typer CLI β FastAPI REST β
ββββββββββββββββββββββ¬βββββββββββββββββββββββββ
β
ββββββββββββββββββββββΌβββββββββββββββββββββββββ
β Application Layer β
β Use Cases β DTOs β Ports (interfaces) β
ββββββββββββββββββββββ¬βββββββββββββββββββββββββ
β
ββββββββββββββββββββββΌβββββββββββββββββββββββββ
β Domain Layer β
β Task entity β Value objects β Exceptions β
ββββββββββββββββββββββ¬βββββββββββββββββββββββββ
β
ββββββββββββββββββββββΌβββββββββββββββββββββββββ
β Driven Adapters β
β SQLite β JSON file β In-memory β
βββββββββββββββββββββββββββββββββββββββββββββββ
The domain and application layers have zero infrastructure imports. The adapter selection is made once, at the bootstrap layer, and injected into the use cases.
For the full architectural rationale see docs/ARCHITECTURE.md and docs/DECISIONS.md.
Requires Python 3.12 or newer.
Requires Python 3.12 or newer.
git clone https://github.com/amryounis/kirokyu.git
cd kirokyu
python3 -m venv .venv source .venv/bin/activate
pip install -e ".[dev]" pre-commit install
# Run the full test suite (197 tests)
pytest
# Linter and formatter
ruff check --fix
ruff format
# Type checker
mypy
# All pre-commit hooks
pre-commit run --all-filesAll checks run automatically on every git commit.
kirokyu/
βββ src/kirokyu/
β βββ domain/ # Entities, value objects, exceptions
β βββ application/ # Use cases, DTOs, ports
β βββ adapters/
β β βββ cli/ # Typer CLI
β β βββ api/ # FastAPI REST API
β β βββ ui/ # Streamlit web UI
β β βββ sqlite/ # SQLite repository adapter
β β βββ json_file/ # JSON file repository adapter
β β βββ in_memory/ # In-memory adapter (tests)
β βββ analytics/ # Read-side query layer
β βββ workspaces/ # Workspace registry
β βββ bootstrap.py # Composition root
βββ tests/ # 197 tests
βββ docs/ # Product definition, architecture, decisions
βββ DECISIONS.md # Decision log β the why behind every choice
βββ ARCHITECTURE.md # Architecture overview
The storage adapter is selected via environment variable:
KIROKYU_ADAPTER=sqlite # default β SQLite database file
KIROKYU_ADAPTER=json # JSON file
KIROKYU_ADAPTER=memory # in-memory (no persistence)MIT. See pyproject.toml.