84 lines
5.0 KiB
Markdown
84 lines
5.0 KiB
Markdown
# 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/<name>/` 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
|