Business logic first
The plumbing is a plugin list. The diff on a branch is the feature.
Trade-offYou inherit opinions, and they are enforced.
v0.1.0a12 · alpha
One command: FastAPI, PostgreSQL, Redis, jobs, a Vue frontend and a reverse proxy. Wired together, containerised, migrating on boot. What you write is the part only you know.
$ pip install jfastframework
$ jfast start shop
✓ shop/ FastAPI · Postgres · Redis
✓ shop-web/ Vue 3 · Vite
✓ compose one container per resource
✓ Caddyfile TLS · one hostname
Alpha. The maturity table says which parts are tested against real infrastructure and which are not.
It generates
FastAPI PostgreSQL pgvector Redis SQLAlchemy Alembic Vue 3 React Tailwind Docker CaddyBefore and after
By hand
Wire the session. Decide where the query goes. Add a model, a router, a migration, a compose service. Find out in review that someone queried the database from a handler.
Here
jfast new module invoice — router, service, repository, schemas and a test, registered, under a contract that fails the build if the handler ever touches the database.
The design
The plumbing is a plugin list. The diff on a branch is the feature.
Trade-offYou inherit opinions, and they are enforced.
Every rule is machine-checked, and every violation names the fix.
Trade-offWriting the contract is work.
A modular monolith today; one command promotes a module to a service.
Trade-offA monolith on day one.
Guardrails
Generating code fast is solved. Keeping it coherent after the fourth feature is not.
$ jfast contracts check
modules/payment/service.py:41: cross-module: module 'payment' imports module 'invoice'
(two modules that need the same thing should share it: move it to shared/enums.py)
modules/billing/service.py:88: blocking-call: time.sleep stalls the event loop
(every request on this worker waits; use await asyncio.sleep)
Two that import each other can never be split again.
One time.sleep stalls every request on the worker.
The session commits before the response, and a race is a 409, not a lost write.
Who it is for
The generated module is a worked example you can read in five minutes.
Skip the plumbing; the checker catches the shortcut you took at 6pm.
The review is about the feature, because the structure is CI's job.
Rules an agent reads first and cannot quietly break.
Documentation
Generate the stack in one command, and let CI keep it the shape you chose while a team — or an agent — works on it.