Build your first LiveView
Wires a Python view to a reactive template. Counter + form, working, end-to-end.
Feature / The framework documentation
No build step. No node_modules. No API layer. No client framework. djust pushes minimal DOM patches over a Rust transport — you write Python views, you get React 19 ergonomics anyway.
Drop it into your existing Django project and convert one view at a time. ORM, auth, admin, migrations, signals all keep working. These docs are organized around what you’re trying to do — quickstart for an opinion, concepts for a model, or skip both and read the API reference as a flat index.
Wires a Python view to a reactive template. Counter + form, working, end-to-end.
Events, server actions, and how the diffing happens before bytes leave the server.
Hooks, components, deployment — the API reference is a flat index from here.
Debounced live search with a spinner and empty/error states — the smallest interactive feature that ties five primitives together.
Multi-user broadcast over PostgreSQL LISTEN/NOTIFY. The same view that submits the comment also pushes it to every other reader.
Three-step signup with per-step server validation, back/next navigation, and a final review — using only one integer cursor.
Autocomplete on one form field that doesn’t re-render the rest of the page. Same use case as the search tutorial; different primitive, different reason.
Drag-and-drop, real-time progress bar, server-side magic-byte validation. Files chunk over the WebSocket — no separate upload endpoint.
An AI chat page that streams the model’s reply into the DOM as it’s generated. Stop button actually cancels the upstream HTTP request.
Toggle a todo and see the UI flip instantly — before the server has acknowledged. Includes the rate-limit-rejected reconciliation case.
An avatar bar with live join/leave for any shared page. Survives reconnects via the framework’s heartbeat. Pairs with a flash-message toast.
An activity feed where the next 20 rows lazy-load as you scroll past the sentinel. Cursor-based pagination — safe under concurrent inserts.
Page-level login + action-level role checks. Includes the “permissions revoked mid-session” recovery and the defense-in-depth template guard.
Open a modal, fade a toast, dismiss a dropdown — all client-side via declarative DOM-op chains. Mix in a server push only when you actually save.
Live revenue dashboard backed by Chart.js. The mounted/updated/destroyed lifecycle generalises to any third-party JS library — maps, editors, date pickers.
A star-rating widget you build once and drop onto multiple pages. Each instance owns its own state; child events bubble up to the parent view via send_parent.
Mount a view, fire events, assert state — the same code path as the WebSocket consumer minus the transport. Fast, deterministic, no Selenium.
Per-customer subdomains, auto-scoped querysets, and the three subtle leak vectors most homegrown SaaS impls hit. TenantScopedMixin makes the safe path the only path.
ASGI workers, Redis state, Nginx WebSocket proxy, and the four production checks every team eventually wishes they’d added on day one.
Sign-up form with per-keystroke username availability, password strength, and email format checks — one Django Form class is the source of truth, no JS library, no server-client validation drift.
In-app tour that branches on server state — highlights buttons, scrolls sections, pops tooltips. Whole script lives in Python via self.push_commands(); zero JS authored.
Stripe payment_intent.succeeded fires → user’s open dashboard updates within ~50ms. Same pattern for GitHub PR webhooks, Slack events, anything external. push_to_view() is the bridge.
Decorators, lifecycle hooks, template tags, state primitives. The grown-up answer to “where is X documented”.
Accessible primitives that render server-side: buttons, dialogs, comboboxes, tables.
Server actions, computed state, streaming partials, loading states, and the rest of the reactive surface.
Run djust in production: deployment, testing, type checking, error overlay, dev tools.
Every release with a “what broke”, a “what was fast”, and the migration link.
Codemods, breaking-change tables, and the bits the codemod can’t handle.