djust 1.2: More Django-Compatible, Much Faster

Many Django projects reach the same point. The backend is done, and then a ticket asks for the page to update live. Suddenly the project needs a JavaScript framework, an API for it to call, and a second codebase to keep in sync.
djust takes that step away. You keep writing Django views and templates, and djust makes them interactive. Events run on the server, the page re-renders, and only the changes travel to the browser over a WebSocket. You don't need a JavaScript framework, an API layer or a build step.

Sorting and search in this table are Python methods on the view. There's no JavaScript to write. You can try a live djust app yourself at start.djust.org.
djust 1.2 is out today, and 1.2.2 is on PyPI. It's our biggest release since 1.0, with three main improvements: templates that behave like Django's, components you declare on the view, and much faster rendering.
Your Django templates work as written
A template engine is only useful if it gives you the same output Django would. So we now run Django's own template test suite against djust's Rust engine in CI, and 1.2 passes 98.6% of it.
In practice, that means:
- All of Django's built-in tags and filters work, including
{% url %},{% regroup %}and{% cycle %}. - Your own template tag libraries load with
{% load %}, and{% translate %}and{% blocktranslate %}work in live templates. - Method calls like
{{ user.get_full_name }}resolve the way they do in Django, with Django's safeguards included. - Errors show up when the template loads, with the right line number.
The handful of remaining tests cover Django internals that don't apply to a different engine. They're documented here.
Components you declare on the view
Until now, you created a component in mount() and passed its data through get_context_data(). 1.2 introduces class-level components: you declare a component on the view the way you'd declare a form field, and it keeps its own typed state and handles its own events.
from djust import LiveView
from djust.components.descriptors.base import LiveComponent, TypedState
from djust.decorators import event_handler
class Tabs(LiveComponent):
class State(TypedState):
active: str = "overview"
template = """
<button dj-click="select" dj-value-value="overview">Overview</button>
<button dj-click="select" dj-value-value="billing">Billing</button>
<p>Showing {{ active }}</p>
"""
@event_handler()
def select(self, value: str = "", **kwargs):
self.state.active = value
class SettingsView(LiveView):
template = "<div dj-root>{{ nav }}</div>"
nav = Tabs(active="overview")
Each visitor gets their own component state, and clicks inside the component reach its handler automatically. When an event changes only the component, djust re-renders and patches just that component instead of the whole page. The components guide covers the rest.
Faster rendering
In earlier releases, render time grew with everything a view held in its state. In 1.2 it depends only on what the template actually reads.
The heaviest template in our benchmark went from 215 ms to 4.7 ms, which is now faster than Django renders the same template (about 9 ms). After each render, djust sends the browser only the parts of the page that changed, so every interaction stays small on the wire.
Also in 1.2
djust initadds djust to an existing Django project and checks the result.LiveComponentTestClienttests a component on its own, without a parent view.- New system checks catch missing template variables and configuration problems at startup.
@debounceand@throttlerate-limit rapid input right in the browser.TableComponentadds filtering, captions and accessible sortable columns.- A browsable component catalogue, a public theming API, and
dj-mouseenter/dj-mouseleavedirectives. - Since 1.1, links between djust pages navigate live by default, with no attributes to add.
Upgrading
djust 1.2 includes important security fixes. We recommend upgrading from any 1.0.x release, or any 1.1 release earlier than 1.1.5.
pip install --upgrade djust==1.2.2
python manage.py collectstatic
Because 1.2 follows Django more closely, a template that was quietly broken before may now raise an error when it loads. The 1.2 release notes list every change, known limitations, and a step-by-step upgrade checklist. djust 1.2 supports Python 3.10 to 3.14 and Django 4.2 to 5.2.
Coming in 1.3
- djust accounts: sign-up, login, email verification and password reset pages with a pluggable backend, including django-allauth. Available now in
1.3.0rc1. - Explicit state exposure: an opt-in policy under which only the state you declare reaches the template and the browser. Also in
1.3.0rc1. - Multi-core rendering: a worker pool and a Rust renderer that releases the GIL let one djust process use several CPU cores. In our load tests, one process went from 1.7 to 6.3 frames per second at 128 clients. Coming in the next release candidate.
We're designing the next features in the open, and we'd welcome your feedback on the current proposals.
Get started
- Try it live at start.djust.org. Open it in two tabs to watch them stay in sync.
- Read the docs at docs.djust.org.
- Star the project on GitHub. It's MIT licensed, and contributions are welcome.
- Join the community on Discord.
pip install djust
Thank you to everyone who has tried djust, filed issues and tested the release candidates.
— The djust team
Related Posts

You don't need React to be reactive — djust 1.0 is here
djust 1.0 is here — reactive UI for Django in pure Python. No client state, no JavaScript framework, no build step, no API layer. It brings the proven Phoenix LiveView model to Django with a Rust VDOM on the hot path. Try it live (multi-user, no install) at start.djust.org.

djust 0.4.0 — The Developer Experience Release
djust 0.4.0 ships 30+ features focused on developer experience: flash messages, keyboard shortcuts, form recovery, scaffolding generators, debug tooling, and security hardening. Build real-time Django apps with less code than ever.

djust 0.3.0 — "Phoenix Rising" 🔥
The biggest djust release yet with 20+ major features. Authentication, server-push, multi-tenancy, PWA support, AI tooling, automatic change tracking, CSS framework support, and security hardening make 0.3 production-ready.