# Mizan Roadmap ## v1 — Django + Multi-Framework (React, Vue, Svelte) ### Done - [x] **`@client` decorator** — `context=`, `affects=`, `auth=`, `websocket=`, `private=`, `route=`, `methods=`, `rev=`, `cache=` - [x] **`ReactContext` class** — type-safe context/affects references with linting - [x] **Named contexts** — functions sharing a context name grouped into one provider and one fetch - [x] **Context bundling endpoint** — `GET /api/mizan/ctx//` returns all functions in one response - [x] **Server-driven invalidation (JSON body)** — mutation responses carry `{"result": ..., "invalidate": [...]}` - [x] **`X-Mizan-Invalidate` header** — second invalidation transport for view-path responses (redirects, HTML) - [x] **Return-type branching** — data return → RPC path; `HttpResponse` return → view path - [x] **Scoped invalidation** — `affects_params` lambda; runtime supports `{context, params}` form - [x] **Auth guards** — `auth=True`, `auth='staff'`, `auth='superuser'`, `auth=callable` - [x] **JWT + session auth** — auto-detected, CSRF handled - [x] **MWT** — Mizan Web Token for Edge cache keying (separate secret from JWT/cache) - [x] **Shapes** — Pydantic + django-readers for typed query projections - [x] **WebSocket channels** — real-time bidirectional communication - [x] **HMAC cache keying** — origin-side cache with cross-language HMAC conformance (Python + TypeScript pin) - [x] **Edge manifest** — `python manage.py export_edge_manifest`; both RPC and view-path functions; deterministic (sorted) output - [x] **SSR bridge** — Django template backend → persistent Bun subprocess via JSON-RPC; the worker resolves components by file path (`import(file)` + `renderToString`) - [x] **`mizan-base` kernel** — framework-agnostic imperative client primitives (data/status/error owned by kernel) - [x] **Rust codegen** — `protocol/mizan-codegen`, a Rust binary reading KDL IR and emitting per-target clients (react, vue, svelte, channels, stage1, python, rust), each byte-parity-tested. `mizan-generate` is the thin npm launcher. - [x] **React wrapper layer** — codegen emits the `MizanContext` root provider, `useMizan` escape hatch, and `useMutation`-backed hooks exposing `{ mutate, isPending, error }` - [x] **Additional backend adapters** — `mizan-ts` (TypeScript), `mizan-rust-axum` (Rust/Axum with three-way parity), `mizan-tauri` - [x] **Frontend transports** — `mizan-tauri-transport`, `mizan-webview-transport`, `mizan-webview-channels` --- ### Next - [ ] **Vue / Svelte runtime packages** — `frontends/mizan-vue` and `frontends/mizan-svelte` are unimplemented stubs. The codegen emits their clients (byte-parity-tested), but a kernel-adapter runtime package and a live-backend example are owed for each. - [ ] **Svelte 5 runes** — the Svelte target emits Svelte 4 `readable` stores; migrate to `$state`/`$derived`. - [ ] **Forms codegen target** — emit form clients wired to `mizanCall` from the kernel; retire the hand-written `mizan-react/src/forms.ts` and its dependence on the pre-kernel provider. - [ ] **Desktop example onto the generated provider** — migrate `examples/django-react-desktop-app` off the pre-kernel `MizanProvider` (`mizan-react/src/context.tsx`) so it can be retired. - [ ] **Cache hardening** — thundering-herd / single-flight protection, and pinning cross-language stringification of un-normalized value types (see `backends/mizan-django/src/mizan/cache/KNOWN_ISSUES.md`). - [ ] **Package READMEs** — `mizan-base`, `mizan-codegen`, and the other packages missing one (see `ISSUES.md`). --- ## Mizan Cloud (closed-source) ### Mizan Edge Cloudflare Workers for automatic edge caching. - Reads the edge manifest to configure cache rules - Context GETs cached at edge, keyed by context name + params - Reads `X-Mizan-Invalidate` header from mutation responses to purge caches - Reads JSON `invalidate` key from RPC responses for the same purpose - Resolves URL patterns from manifest to purge view pages - Zero configuration — the manifest IS the cache policy ### Mizan Render SSR at the edge via Cloudflare Workers. - The Bun SSR bridge, running on Cloudflare instead of colocated with Django - Context data fetched from Django (or edge cache), rendered at the edge - HTML response streamed to the user from the nearest PoP ### Mizan Deploy One-command deployment for Django + React apps. - Container orchestration (AWS/Azure) - Edge + Render auto-configured - `mizan deploy` from the CLI - The Vercel experience for Django --- ## Reference Wire protocol shapes (context fetch, mutation call, invalidation transports) are documented in `CLAUDE.md`. Architectural details for specific subsystems live in `docs/`: - `docs/AFI_ARCHITECTURE.md` — package architecture, kernel model, adapter strategy - `docs/CACHE_KEYING.md` — HMAC cache key derivation - `docs/MWT_SPEC.md` — Mizan Web Token format - `docs/SSR_ARCHITECTURE.md` — Django template backend, Bun bridge - `docs/PSR_VS_EDGE.md` — protocol-level rendering vs. paid Edge layer - `docs/PRODUCT_ARCHITECTURE.md` — product surface and pricing tiers