Why djust
Phoenix LiveView's transport. React 19's ergonomics. Django's ecosystem. Rust's performance. No alternative offers the other three.
djust is reactive server-side rendering for Django, with Phoenix LiveView's transport model, React 19's ergonomics, and a Rust VDOM under the hood. Drop it into your existing Django project and convert one view at a time — your ORM, auth, admin, migrations, and signals all keep working.
Other frameworks have one or two of these. None has all of them in this exact combination.
Four ideas, one framework.
Phoenix LiveView's reactive model. React 19's @action / form-pending ergonomics. Django's mature ORM, auth, admin, migrations. A Rust VDOM and template engine under the hood. No alternative offers the other three.
You never see PyO3.
The VDOM diff and template engine are Rust. JIT context serialization is 10-100× over Python. You write Python; the speed is invisible. No Cargo.toml, no FFI signatures, no maturin in your project.
Read the guide →React Fast Refresh parity for server views.
Save a Python file. Connected sessions re-render. Form input stays. Scroll position stays. Tabs stay open. No other Python web framework ships this — not Flask, not FastAPI, not Django itself.
Read the guide →Redux DevTools "swap action" parity.
Scrub backwards through every state your view has been in. Branch off a recorded handler, replay forward, watch per-component state diverge. Reproducing a weird-state bug stops requiring the user to do it again.
Read the guide →Mobile, CLI, S2S — call the same handlers your UI does.
@event_handler(expose_api=True) auto-generates a POST /djust/api/<view>/<handler>/ endpoint with an OpenAPI 3.1 schema served at /djust/api/openapi.json. No DRF, no FastAPI dual-implementation, no JSON contract you maintain twice.
AI's first-class user surface, not an afterthought.
A Chrome extension + Node MCP server gives agents end-to-end control of a running djust app — not just introspection. 53 tools: dom_snapshot, record_start/replay_actions, regression_suite, visual_diff, multi_session_simulate, find_dead_bindings, ws_inject/ws_throttle, accessibility_scan, benchmark_event. 20-30× faster than Playwright. Authoring regression tests becomes "AI, do it once and save it."
~37 KB gzipped. No npm.
Phoenix's client is npm-distributed and minified. React's runtime is opaque. djust's is one file you can read in an afternoon. No registry to trust, no CDN to depend on.
Read the guide →Same djust, three different reasons to switch — pick the one that matches the framework you're tired of.
You're tired of the build pipeline.
No node_modules. No bundler. No API layer. No JSON contract you maintain twice. Server actions without React. useFormStatus as a DOM attribute. Drop the entire client-side frontend stack and keep the ergonomics.
You want the Python ecosystem.
LiveView's reactive model, in Python, on Django. All the LiveView primitives are there — events, components, sticky views, dj-transition, JS commands — plus Django's mature ORM, admin, and migrations.
Read the guide →You want first-class reactive primitives.
HTMX is a great fragment-swap layer. djust adds a first-class reactive layer on top of Django — @action, @optimistic, time-travel debugging, form pending state, server-pushed updates from any model save. Same Django underneath.
What separates a framework you adopt for a side project from one you bet a team and a year on.
Catch misconfigs before users do.
manage.py check runs 60+ djust-specific validators. Stale CSS output. Missing theme tokens. Unhandled template variables. Mis-wired @notify_on_save. Caught at startup, not in production.
Static analysis catches the typos.
manage.py djust_typecheck walks every template, extracts every variable + tag reference, and reports names not declared on the view. Django alone doesn't do this. Jinja doesn't either.
No inline onclick anywhere in the framework.
Every framework-emitted handler is an external static module. data_table row nav, lazy-fill activators, theme switcher — all delegated, all CSP-strict. Enterprise security review-ready out of the box.
Color, type, motion — swap any of them.
Dracula, Catppuccin, Nord, Tokyo Night, Vercel — 60+ packs ship in the box, light + dark, runtime switching with session persistence. Tailwind and Bootstrap both pick up the active pack's tokens automatically.
Read the guide →