FAQ¶
Can handlers be sync?¶
Yes. Handlers, authenticate, and middleware hooks may all be def or async def —
jero detects which at wiring. Use sync for pure CPU-light work; anything that does I/O
should be async.
Does jero support WebSockets?¶
Yes—jero provides typed bidirectional WebSockets and an
in-process typed Channel for fan-out. For one-way server push, prefer
NDJSON or Server-Sent Events, which cover most live-update cases
and give SSE clients automatic reconnection.
Can I serve static files?¶
No. jero serves JSON APIs; put assets on your reverse proxy or CDN (see Deployment). The one exception is the docs-page favicon, precomputed at wiring.
Where is request.state?¶
There isn't one. Middleware can't pass state to handlers — the idiom is jero's typed
sources: bind the header in the handler, or carry the value on the
auth user.
Can I return a dict?¶
No — a JSON body is a Struct (or list[Struct]), and a dict return is a
WiringError at startup. The Struct is what buys validation, the OpenAPI schema, and
msgspec's encode speed. See Philosophy.
Can I use Pydantic models?¶
Not on the wire — request and response contracts are msgspec Structs. Off the wire,
anything goes: the demo app uses pydantic-settings to
parse environment configuration, then maps it into a Struct.
Does it run on Python 3.12?¶
No. jero's generics use PEP 696 type-parameter defaults, which shipped in 3.13. See Getting started.
Why is there no dependency-injection container?¶
Because constructors already are one: build objects in wire, pass them in. The
framework adds only what plain Python lacks — resource lifecycle. See
Wiring & lifecycle and Philosophy.
How do I share state between workers?¶
You don't — each worker process runs wire and holds its own services and
background queue. Shared state (a cache, a durable queue)
belongs in an external service. See Deployment.
Why is the TestClient sync?¶
So plain pytest functions work with no async plumbing: it runs the app's full
lifespan on a background event loop and gives you a requests-style API. See
Testing.