Status & roadmap¶
Alpha, deliberately bounded¶
situ is a young library extracted from a research programme. The compiler accepts a bounded dialect and fails closed; the API may still move. It is proven at TodoMVC-to-issue-tracker scale, browser-verified throughout — and not yet hardened for auth, real concurrency, or production operations.
What "done" means here¶
A feature counts only when:
- a Playwright e2e passes in a real browser — the fixture fails on any console error, because a server-side
TestClienthappily passes pages whose client is broken; make lintis clean across ruff (check + format), ty, pyrefly, mypy, andsitu checkover the component trees;- risky compiler changes additionally pass an adversarial review whose confirmed findings are fixed and regression-tested first.
Two standing invariants guard refactors: the golden-bytes test (a component tree emits a byte-identical island to the hand-written monolith) and the seam's CompileErrors.
Known limits¶
Each is documented where it applies; collected here:
| Area | Status |
|---|---|
Synced |
Reserved, unimplemented. The marker parses; no codegen, bootstrap, or transport exists. The "live" SSE refetch (live=True) is the labelled stand-in: it delivers real cross-client updates, and a local-first replica remains future work. |
| Live hub | In-process (asyncio queues). One server process only; a broker (e.g. Redis) behind the same interface is the scaling path. |
Url siting |
A real navigation: shareable and reload-surviving, and it resets in-progress Local state. Site accordingly. |
| Prop/Emit typing | Matched by name across the parent/child file boundary; a type mismatch passes the checkers and surfaces in e2e. |
| Kit accessibility | WAI-ARIA patterns implemented and keyboard-tested; no full-conformance claim. |
declui required= / filter= / link= / in_= |
Accepted so models type-check; not consumed yet. |
| declui generation | A first-draft generator with eject as the expected workflow — it does not regenerate hand-tuned markup. |
| Edit loop | Components compile once per process; restart to pick up edits (watch/reload is on the roadmap). |
:cells |
The one sanctioned runtime interpreter — user-typed formulas can't be compiled ahead of time. |
Roadmap themes¶
From the design log (notes/24, notes/27, notes/28 in the repository):
- Framework adapters — the mount core is now framework-neutral, and a Flask (WSGI) adapter (
situ.mount.flask) ships alongside the Litestar reference. Next: a Starlette adapter (async-native, noasyncio.runbridge) and movinglitestarfrom a hard dependency to a[litestar]extra (the imports are already lazy, so the Flask path pulls in no Litestar). Synced, for real — a replica + reconciliation engine behind the reserved site.- Typed templates — derive per-component context types from the parsed template (the wire projection already supplies row schemas) and check
context()against them. - declui next slices — the create dialog, richer zone vocabularies (tabs) with the eject line kept explicit, a build-time facade-signature check for generated commands.
- Seam Certificate — emit the trust surface as diffable data (every signal's site, every provide/inject edge, every client↔server boundary).
- DX — watch/recompile on edit; editor support for the binder surface.
Versioning¶
Semantic versioning; user-visible changes land in CHANGES.md. The license is MIT.