Skip to main content

quadkit

Async-first application framework for Python: dependency-injection container, application lifecycle, typed configuration, and the Result error model. This is the core package; everything else published from this repository builds on it.

For application developers — write providers and modules, bind contracts, and let one container boot them in order.

Installation

uv add quadkit
# batteries-included web stack:
uv add "quadkit[web]"

Requires Python >= 3.11.

Minimal working example

import asyncio

from quadkit import Application
from quadkit.contracts.core.di import ContainerRegistrarProtocol
from quadkit.di.provider import Provider


class Settings:
    greeting = "hello, quadkit"


class SettingsProvider(Provider):
    async def register(self, container: ContainerRegistrarProtocol) -> None:
        container.singleton(Settings, instance=Settings())


async def main() -> None:
    app = Application()
    app.add_provider(SettingsProvider())
    await app.start()
    try:
        settings = await app.container.resolve(Settings)
        print(settings.greeting)
    finally:
        await app.stop()


asyncio.run(main())

For the web quickstart (a real endpoint in minutes), see the docs.

Optional extras

Extra Contents
quadkit[web] quadkit-web[granian] — the full web stack
quadkit[test] pytest, pytest-asyncio, pytest-cov, pytest-mock
quadkit[security] cryptography (signing/token helpers)
quadkit[codegen] code generation toolchain
quadkit[docs] / [dev] documentation / development tooling

Public API entry points

from quadkit import Application, Result, Ok, Err
from quadkit.di.provider import Provider
from quadkit.di.container import Container
from quadkit.logging import get_logger
from quadkit.contracts.core.di import (
    ContainerRegistrarProtocol,
    ContainerResolverProtocol,
)

Concepts: contracts · dependency injection · modules · lifecycle · async model.

Configuration

application.yaml at the working directory, validated against typed config models at boot (unknown keys fail fast); application metadata lives at the root (name, version, description); every typed key overrides from the environment with QK_<SECTION>__<KEY>. Use QK_PROFILE to select a profile. See configuration.

Error handling

Result[T, E] for expected domain failures; the quadkit-contracts exception hierarchy (QuadkitError → DomainError → NotFoundError, ValidationError, ConflictError, ...) for everything else. The web layer renders both as problem responses — see error handling.

Testing

Pair with quadkit-testing: AppTestBed.from_factory(create_app) boots your application in-process (with overrides={Contract: fake} for test doubles), no server required. See testing.

Security

Never put secrets in application.yaml — pass them through QK_* environment variables or a secret store. Unexpected exceptions never leak internals to clients. See secure configuration and report vulnerabilities privately per SECURITY.md.

Stability

Version 0.0.3 in the 0.x series, released in lockstep with the other four distributions; APIs may change between minor versions until 1.0 — pin an exact version (quadkit==0.0.3) or a tight range (>=0.0.3,<0.1.0). Full policy: stability and compatibility.

Changelog: CHANGELOG.md · Issues: https://github.com/dbtinoy-/quadkit/issues

Release files for quadkit 0.0.3

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for quadkit 0.0.3
File Size Uploaded
quadkit-0.0.3.tar.gz 576.6 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for quadkit 0.0.3
File Interpreter ABI Platform
quadkit-0.0.3-py3-none-any.whl Python 3 none any Details

Total release size: 1.0 MB

Release files / quadkit-0.0.3.tar.gz

Download URL quadkit-0.0.3.tar.gz
Size 576.6 kB
Tags Source
SHA-256 checksum
How to use checksums
2cc805e65bbdecbcead60953fdf8742ae3542df62b33ce59b3d450c55e4528c6
BLAKE2b-256 checksum
How to use checksums
cc834940f8c46197665b36a547e3f8bd26d0bd5c137b0a70545c95da1de00080
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.14

Release files / quadkit-0.0.3-py3-none-any.whl

Download URL quadkit-0.0.3-py3-none-any.whl
Size 436.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
dface77fe2043eed639c9ebff524ec5e7d815341b0e5e4e70343f96b2a897b66
BLAKE2b-256 checksum
How to use checksums
1c4776a7c00c971ff8bf1c1c8c1bb92e723a5ccd3de35278d32632149b734a86
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via uv/0.8.14

Release history Release notifications | RSS feed

0.0.42

2 release files

0.0.41

2 release files

0.0.4

2 release files

This release

0.0.3 This release

2 release files

0.0.2

2 release files

0.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page