A lean backend framework for type-safe Python APIs — file-based routing, typed config/DI, scoped providers, plugin registry, and background tasks.
Project description
causeway (Python)
A lean backend framework for type-safe Python APIs.
uv add 'causeway==0.1.0a0' # alpha — drop the pin once v0.1.0 ships
This is the core Python package of Causeway. It ships:
- A file-based router that walks
src/app/routes/**/*.py, picks up[id].py,(group)/,_middleware.py, and_scope.py, and registers handlers into the app's route table. - A typed config layer that wraps
pydantic-settingsand exposes non-secret fields to the generated TypeScript client. - A scoped DI container driven by
_scope.pyproviders. - A
@taskcontract for background jobs with a Dramatiq reference adapter. - A plugin registry with Python-entry-point discovery and per-environment activation.
- A CLI (
causeway new,causeway dev,causeway build,causeway deploy <target>) that runs the whole loop.
For the full story, the design rationale, and a side-by-side vs. FastAPI / Django + Ninja / Encore.ts / NestJS, see the repo README.
30-second example
my-app/
├── pyproject.toml
├── causeway.toml
└── src/app/
├── config.py
├── plugins.py
└── routes/
├── _middleware.py
├── index.py
└── users/
├── _scope.py
├── index.py
└── [id].py
# src/app/routes/users/[id].py
from typing import Annotated
from uuid import UUID
from msgspec import Struct
from causeway import get, raises
from causeway.errors import NotFound
class User(Struct):
id: UUID
name: str
@get
@raises(NotFound)
async def show(id: UUID) -> User:
...
Run it:
causeway dev
causeway dev discovers the routes, boots uvicorn, regenerates a typed client.ts for your frontend on every save, and exposes /__causeway with the route tree, registered tasks, current config, and plugin list.
Primitives in this package
| Primitive | Purpose |
|---|---|
File router ([id].py, (group)/) |
Discovery + URL pattern generation. |
_middleware.py / _scope.py |
Per-subtree middleware + scoped DI providers. |
Settings (wraps pydantic-settings) |
Typed config with allowlisted exposure to the generated client. |
@get / @post / @put / @patch / @delete |
HTTP method decorators. |
@task(...) |
Background-job contract; adapter-agnostic. |
@cron(...) |
Scheduled tasks via the same adapter. |
register(...) |
Plugin registration (TaskAdapter, Storage, KV, AuthProvider, …). |
TestApp |
Test client with DI overrides and tasks_eager() mode. |
causeway CLI |
new, dev, build, plugins, deploy <target>. |
Full reference: https://github.com/tamimbinhakim/causeway/blob/main/docs/reference.md
Optional extras
uv add 'causeway[dramatiq]' # reference task adapter
uv add 'causeway[otel]' # OpenTelemetry middleware hooks
uv add 'causeway[all]' # everything
Scope
Causeway ships project shape and a small set of contracts. It does not ship vertical integrations — no ORM, no admin panel, no template engine, no infrastructure provisioning. Those layers compose on top of the fundamentals and live in their own plugin packages or in user code.
License
MIT
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file causeway-0.1.0.tar.gz.
File metadata
- Download URL: causeway-0.1.0.tar.gz
- Upload date:
- Size: 43.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
4c53c5f6b0fb461f217d43d32c0b725983095fdebb27f24b92218b39ceebe3dc
|
|
| MD5 |
6113c85794d149ce0efb08b823cbb328
|
|
| BLAKE2b-256 |
f909bce48ed36e59fcc897a532188da7959f081b157c87f90eb6f58a10f90cb3
|
File details
Details for the file causeway-0.1.0-py3-none-any.whl.
File metadata
- Download URL: causeway-0.1.0-py3-none-any.whl
- Upload date:
- Size: 41.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.13
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7328e12e2437e1a03dbb8ea88e10cdc1cbea699f406cdda2cfca021cd610d053
|
|
| MD5 |
72e44eb07a0174d54b73d7babaa349a5
|
|
| BLAKE2b-256 |
a81c47af285ae865333b16776ae46f246f5263b3b6b2f429d54dde7436641476
|