Skip to content

Compatibility & Dependencies

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.

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-web declares quadkit, quadkit-contracts, Starlette, orjson, typing-extensions, aiofiles, MarkupSafe, and Jinja2 as hard dependencies.
  • quadkit-cli declares quadkit and quadkit-contracts as hard QuadKit dependencies.
  • quadkit-testing declares quadkit and quadkit-contracts as hard QuadKit dependencies; web, db, and integration support 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 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:

Terminal window
uv add "quadkit>=0.0.50,<0.1"
uv add "quadkit-cli>=0.0.50,<0.1"

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.

PackageCatalog 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]
Terminal window
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]"

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.