Dependency boundaries
Section titled “Dependency boundaries”QuadKit’s dependency rules vary by package family; not every extension depends only on quadkit and quadkit-contracts, and not every cross-package import is forbidden. The intended direction is to share reusable interfaces through quadkit-contracts, while keeping regular extension peers independent where practical. The exact executable checks—including composites, exceptions, and tracked edges—are listed in the repository’s root .importlinter configuration. Run them there with make lint-boundaries; they are not a blanket CI rule for every possible cross-package import.
The catalog’s eighteen packages are all published at 0.0.50. The core (quadkit) provides the DI container, Application, typed configuration, Result, and structured logging. quadkit-contracts defines shared protocols, types, and exceptions, with a typing-extensions runtime dependency.
Package metadata
Section titled “Package metadata”Use each published distribution’s pyproject.toml as the source of truth for hard dependencies and extras; these package-metadata claims are distinct from source-level import-boundary contracts.
quadkit-webdeclaresquadkit,quadkit-contracts, Starlette,orjson,typing-extensions,aiofiles, MarkupSafe, and Jinja2 as hard dependencies.quadkit-clideclaresquadkitandquadkit-contractsas hard QuadKit dependencies.quadkit-testingdeclaresquadkitandquadkit-contractsas hard QuadKit dependencies;web,db, andintegrationsupport is optional.
Every package is published at 0.0.50, so each distribution’s released pyproject.toml is the published dependency contract. For release history, see the changelog.
Python & runtime
Section titled “Python & runtime”- Python version: 3.11+ required
- Run the app:
quadkit run/quadkit dev(auto-picks granian → uvicorn → hypercorn) - ASGI servers: uvicorn, granian, and hypercorn are all valid when you already operate one — see Deployment
- Package manager: uv (recommended), pip, poetry
The latest published line is 0.0.50 (alpha 0.0.x) across 18 distributions, all released together. Pin the current line:
uv add "quadkit>=0.0.50,<0.1"uv add "quadkit-cli>=0.0.50,<0.1"Optional extras
Section titled “Optional extras”Install provider-, driver-, and server-specific dependencies via extras. This table describes extras in the package catalog; quadkit-contracts and quadkit-http need no runtime extras.
| Package | Catalog extras |
|---|---|
quadkit | [codegen], [security], [email], [web] |
quadkit-web | [granian], [uvicorn], [hypercorn], [websocket], [templates], [uploads], [client], [security], [all] |
quadkit-ai-llm | [openai], [anthropic], [ollama], [groq], [mistral], [cohere], [huggingface], [prompts], [cache], [structured], [all] |
quadkit-sql | [postgres], [mysql], [sqlite], [all] |
quadkit-cache | [redis], [memcached], [semantic], [all] |
quadkit-storage | [aws], [gcp], [azure], [all] |
quadkit-events | [postgres], [sqlite], [mongo], [rabbitmq], [kafka], [azure], [messaging], [all] |
quadkit-notification | [sendgrid], [twilio], [apns], [web-push], [slack], [whatsapp] |
quadkit-tasks | [redis], [rabbitmq], [all] |
quadkit-monitor | [system], [prometheus], [otel], [all] |
quadkit-auth | [oauth2], [saml], [ldap], [all] |
quadkit-testing | [web], [db], [integration] |
quadkit-cli | [all] |
uv add "quadkit-web[granian,websocket]"uv add "quadkit-ai-llm[anthropic,openai]"uv add "quadkit-sql[postgres]"uv add --dev "quadkit-testing[web,db]"Maturity
Section titled “Maturity”The eighteen packages in the published line are alpha (0.0.x), documented at 0.0.50. Breaking changes may occur before 1.0. Below 1.0, SemVer treats a minor bump as the breaking signal — which is why the pin ranges stop at <0.1. Product notes: Changelog.
See Adoption Paths for a staged guide, Choosing Backends for provider/driver matrices, and Architecture for the boundary rules behind these tables.