Skip to content

amryounis/kirokyu

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

40 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Kirokyu

A personal task management system built in Python with a clean, pluggable architecture.

Status: Phases 0–5 complete. Fully functional.


What this is

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.


Interfaces

Web UI

streamlit run src/kirokyu/adapters/ui/app.py

Browser-based interface at http://localhost:8501. Includes task management and an analytics dashboard.

CLI

kirokyu --help
kirokyu --workspace personal task create "Buy groceries"
kirokyu --workspace personal task list

Environment variable shortcut:

export KIROKYU_WORKSPACE=personal
kirokyu task list
kirokyu task create "Call the bank" --priority high

REST API

uvicorn kirokyu.adapters.api.app:app --reload

Interactive documentation at http://localhost:8000/docs.


Workspaces

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

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚              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.


Getting started

Requires Python 3.12 or newer.

Getting started

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


Development

# 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-files

All checks run automatically on every git commit.


Project structure

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

Adapter selection

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)

License

MIT. See pyproject.toml.

About

πŸš€ Modular task management system built with Hexagonal Architecture. Features a FastAPI backend and Streamlit frontend.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors