# kaya A lightweight ASGI web framework with method-aware routing, path matching, and recursive wildcard support. ## Packages This repository is a monorepo for the Kaya framework. The code is split into independent packages under `packages/`: - **kaya-core** — core routing, HTTP/WS abstractions, and ASGI adapter (`packages/kaya-core/`) - **kaya-rsgi** — RSGI/Granian integration (`packages/kaya-rsgi/`) - **kaya-session** — server-side HTTP session management (`packages/kaya-session/`) - **kaya-session-redis** — Redis-backed session storage (`packages/kaya-session-redis/`) - **kaya-session-memcache** — memcached-backed session storage (`packages/kaya-session-memcache/`) - **kaya-oidc** — OpenID Connect authentication (`packages/kaya-oidc/`) - **kaya-openapi** — automatic OpenAPI specification generation (`packages/kaya-openapi/`) - **kaya-cors** — CORS (Cross-Origin Resource Sharing) support (`packages/kaya-cors/`) - **kaya-forwarded** — trusted-proxy `Forwarded`/`X-Forwarded-*` client address resolution (`packages/kaya-forwarded/`) - **kaya-otel** — OpenTelemetry tracing and metrics (`packages/kaya-otel/`) Additional `kaya-*` packages can be added as new directories under `packages/`. When adding a new package, also add it to the root `pyproject.toml` dependencies and `[tool.uv.sources]` so `uv sync` installs it. ## Build & run locally This project uses [uv](https://docs.astral.sh/uv/) for dependency management. From the repository root: ```bash uv sync ``` This creates `.venv`, installs all workspace packages in editable mode, and installs the dev dependency group from `uv.lock`. Use `uv lock` after changing dependencies, and commit the updated `uv.lock`. Run the example: ```bash uv run python example/hello.py ``` ## Tests ```bash uv run python -m unittest discover -s packages/kaya-core/tests uv run python -m unittest discover -s packages/kaya-rsgi/tests uv run python -m unittest discover -s packages/kaya-session/tests uv run python -m unittest discover -s packages/kaya-session-redis/tests uv run python -m unittest discover -s packages/kaya-session-memcache/tests uv run python -m unittest discover -s packages/kaya-oidc/tests uv run python -m unittest discover -s packages/kaya-openapi/tests uv run python -m unittest discover -s packages/kaya-cors/tests uv run python -m unittest discover -s packages/kaya-forwarded/tests uv run python -m unittest discover -s packages/kaya-otel/tests ``` ## Static analysis ```bash uv run mypy -p kaya.core uv run mypy -p kaya.rsgi uv run mypy -p kaya.session uv run mypy -p kaya.session.redis uv run mypy -p kaya.session.memcache uv run mypy -p kaya.oidc uv run mypy -p kaya.openapi uv run mypy -p kaya.cors uv run mypy -p kaya.forwarded uv run mypy -p kaya.otel ``` ## Building packages ```bash uv build --package kaya-core --out-dir packages/kaya-core/dist uv build --package kaya-rsgi --out-dir packages/kaya-rsgi/dist uv build --package kaya-session --out-dir packages/kaya-session/dist uv build --package kaya-session-redis --out-dir packages/kaya-session-redis/dist uv build --package kaya-session-memcache --out-dir packages/kaya-session-memcache/dist uv build --package kaya-oidc --out-dir packages/kaya-oidc/dist uv build --package kaya-openapi --out-dir packages/kaya-openapi/dist uv build --package kaya-cors --out-dir packages/kaya-cors/dist uv build --package kaya-forwarded --out-dir packages/kaya-forwarded/dist uv build --package kaya-otel --out-dir packages/kaya-otel/dist ```