QuadKit is alpha. That word is doing real work: public APIs may change before 1.0, and you should pin 0.0.x in production. It is not a synonym for “the design is a mood board.”
This is the split we actually mean.
The architecture is the product
Section titled “The architecture is the product”Four rules are not going to be a surprise in 0.2:
quadkit-contractsimports nothing. Protocols, types, exceptions. If two packages need the same type, it lives there.- Extensions never import each other. They talk through contracts, the container, and providers.
register()does not resolve. Bindings in, instances out inboot(). The type system is the gate.- Domain failures are
Result. The database dying is still an exception.
If a generated app violates any of those, it is not a QuadKit app yet. The import linter will say so in CI.
The project tree is the same kind of promise. There is one layout. quadkit new project lays it down. quadkit new module grows a bounded context in place. Templates add packages, not a second shape.
What will still move
Section titled “What will still move”- Names and extra kwargs on tooling and web surfaces: the CLI, generators, and
quadkit-webextras. - The generated API HTML. Do not treat a 1 MB
api.mdas a stable contract — the Guide and the protocols are. - Generated HTTP surfaces. Treat method signatures and response shapes as movable.
Read the changelog for the human cut of 0.0.4 and the release history on PyPI for the file-level log. Pin 0.0.x (uv add "quadkit>=0.0.4,<0.1").
How to start anyway
Section titled “How to start anyway”uv add quadkit-cliquadkit new project my-app --template web-apicd my-appquadkit runThen Your First App. Follow the quickstart if you are an agent. Do not scrape this blog for the rules — /agents.md is the short list CI actually enforces.