Skip to content

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:

  1. a Playwright e2e passes in a real browser — the fixture fails on any console error, because a server-side TestClient happily passes pages whose client is broken;
  2. make lint is clean across ruff (check + format), ty, pyrefly, mypy, and situ check over the component trees;
  3. 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, no asyncio.run bridge) and moving litestar from 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.