Skip to main content

Blazing fast reactive server-side rendering for Django, powered by Rust

Project description

๐Ÿš€ djust

Blazing fast reactive server-side rendering for Django, powered by Rust

djust brings Phoenix LiveView-style reactive components to Django, with performance that feels native. Write server-side Python code with automatic, instant client updatesโ€”no JavaScript bundling, no build step, no complexity.

๐ŸŒ djust.org | ๐Ÿš€ Quick Start | ๐Ÿ“ Examples

MIT License Python 3.8+ Django 3.2+

โœจ Features

  • โšก 10-100x Faster - Rust-powered template engine and Virtual DOM diffing
  • ๐Ÿ”„ Reactive Components - Phoenix LiveView-style server-side reactivity
  • ๐Ÿ”Œ Django Compatible - Works with existing Django templates and components
  • ๐Ÿ“ฆ Zero Build Step - Just ~5KB of client JavaScript, no bundling needed
  • ๐ŸŒ WebSocket Updates - Real-time DOM patches over WebSocket (with HTTP fallback)
  • ๐ŸŽฏ Minimal Client Code - Smart diffing sends only what changed
  • ๐Ÿ”’ Type Safe - Rust guarantees for core performance-critical code
  • ๐Ÿž Developer Debug Panel - Interactive debugging with event history and VDOM inspection
  • ๐Ÿ’ค Lazy Hydration - Defer WebSocket connections for below-fold content (20-40% memory savings)
  • ๐Ÿš€ TurboNav Compatible - Works seamlessly with Turbo-style client-side navigation

๐ŸŽฏ Quick Example

from djust import LiveView

class CounterView(LiveView):
    template_string = """
    <div>
        <h1>Count: {{ count }}</h1>
        <button dj-click="increment">+</button>
        <button dj-click="decrement">-</button>
    </div>
    """

    def mount(self, request, **kwargs):
        self.count = 0

    def increment(self):
        self.count += 1  # Automatically updates client!

    def decrement(self):
        self.count -= 1

That's it! No JavaScript needed. State changes automatically trigger minimal DOM updates.

๐Ÿ“Š Performance

Benchmarked on M1 MacBook Pro (2021):

Operation Django djust Speedup
Template Rendering (100 items) 2.5 ms 0.15 ms 16.7x
Large List (10k items) 450 ms 12 ms 37.5x
Virtual DOM Diff N/A 0.08 ms Sub-ms
Round-trip Update 50 ms 5 ms 10x

Run benchmarks yourself:

cd benchmarks
python benchmark.py

๐Ÿš€ Installation

Prerequisites

  • Python 3.8+
  • Rust 1.70+ (for building from source)
  • Django 3.2+

Install from PyPI (when published)

pip install djust

Build from Source

Using Make (Easiest - Recommended for Development)

# Clone the repository
git clone https://github.com/djust-org/djust.git
cd djust

# Install Rust (if needed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Install everything and build
make install

# Start the development server
make start

# See all available commands
make help

Common Make Commands:

  • make start - Start development server with hot reload
  • make stop - Stop the development server
  • make status - Check if server is running
  • make test - Run all tests
  • make clean - Clean build artifacts
  • make help - Show all available commands

Using uv (Fast)

# Clone the repository
git clone https://github.com/djust-org/djust.git
cd djust

# Install Rust (if needed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Install uv (if needed)
curl -LsSf https://astral.sh/uv/install.sh | sh

# Create virtual environment and install dependencies
uv venv
source .venv/bin/activate  # On Windows: .venv\Scripts\activate

# Install maturin and build
uv pip install maturin
maturin develop --release

Using pip

# Clone the repository
git clone https://github.com/djust-org/djust.git
cd djust

# Install Rust (if needed)
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh

# Create virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install maturin
pip install maturin

# Build and install
maturin develop --release

# Or build wheel
maturin build --release
pip install target/wheels/djust-*.whl

๐Ÿ“– Documentation

Setup

  1. Add to INSTALLED_APPS:
INSTALLED_APPS = [
    # ...
    'channels',  # Required for WebSocket support
    'djust',
    # ...
]
  1. Configure ASGI application (asgi.py):
import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from djust.websocket import LiveViewConsumer
from django.urls import path

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    "websocket": AuthMiddlewareStack(
        URLRouter([
            path('ws/live/', LiveViewConsumer.as_asgi()),
        ])
    ),
})
  1. Add to settings.py:
ASGI_APPLICATION = 'myproject.asgi.application'

CHANNEL_LAYERS = {
    'default': {
        'BACKEND': 'channels.layers.InMemoryChannelLayer'
    }
}

Creating LiveViews

Class-Based LiveView

from djust import LiveView

class TodoListView(LiveView):
    template_name = 'todos.html'  # Or use template_string

    def mount(self, request, **kwargs):
        """Called when view is first loaded"""
        self.todos = []

    def add_todo(self, text):
        """Event handler - called from client"""
        self.todos.append({'text': text, 'done': False})

    def toggle_todo(self, index):
        self.todos[index]['done'] = not self.todos[index]['done']

Function-Based LiveView

from djust import live_view

@live_view(template_name='counter.html')
def counter_view(request):
    count = 0

    def increment():
        nonlocal count
        count += 1

    return locals()  # Returns all local variables as context

Template Syntax

djust supports Django template syntax with event binding:

<!-- Variables -->
<h1>{{ title }}</h1>

<!-- Filters -->
<p>{{ text|upper }}</p>
<a href="?q={{ query|urlencode }}">Search</a>

<!-- Control flow -->
{% if show %}
    <div>Visible</div>
{% endif %}

{% if count > 10 %}
    <div>Many items!</div>
{% endif %}

{% for item in items %}
    <li>{{ item }}</li>
{% endfor %}

<!-- URL resolution -->
<a href="{% url 'myapp:detail' pk=item.id %}">View</a>

<!-- Template includes -->
{% include "partials/header.html" %}

<!-- Event binding -->
<button dj-click="increment">Click me</button>
<input dj-input="on_search" type="text" />
<form dj-submit="submit_form">
    <input name="email" />
    <button type="submit">Submit</button>
</form>

Supported Events

  • dj-click - Click events
  • dj-input - Input events (passes value)
  • dj-change - Change events (passes value)
  • dj-submit - Form submission (passes form data as dict)

Reusable Components

djust provides a powerful component system with automatic state management and stable component IDs.

Basic Component Example

from djust.components import AlertComponent

class MyView(LiveView):
    def mount(self, request):
        # Components get automatic IDs based on attribute names
        self.alert_success = AlertComponent(
            message="Operation successful!",
            type="success",
            dismissible=True
        )
        # component_id automatically becomes "alert_success"

Component ID Management

Components automatically receive a stable component_id based on their attribute name in your view. This eliminates manual ID management:

# When you write:
self.alert_success = AlertComponent(message="Success!")

# The framework automatically:
# 1. Sets component.component_id = "alert_success"
# 2. Persists this ID across renders and events
# 3. Uses it in HTML: data-component-id="alert_success"
# 4. Routes events back to the correct component

Why it works:

  • The attribute name (alert_success) is already unique within your view
  • It's stable across re-renders and WebSocket reconnections
  • Event handlers can reference components by their attribute names
  • No manual ID strings to keep in sync

Event Routing Example:

class MyView(LiveView):
    def mount(self, request):
        self.alert_warning = AlertComponent(
            message="Warning message",
            dismissible=True
        )

    def dismiss(self, component_id: str = None):
        """Handle dismissal - automatically routes to correct component"""
        if component_id and hasattr(self, component_id):
            component = getattr(self, component_id)
            if hasattr(component, 'dismiss'):
                component.dismiss()  # component_id="alert_warning"

When the dismiss button is clicked, the client sends component_id="alert_warning", and the handler uses getattr(self, "alert_warning") to find the component.

Creating Custom Components

from djust import Component, register_component

@register_component('my-button')
class Button(Component):
    template = '<button dj-click="on_click">{{ label }}</button>'

    def __init__(self, label="Click"):
        super().__init__()
        self.label = label
        self.clicks = 0

    def on_click(self):
        self.clicks += 1
        print(f"Clicked {self.clicks} times!")

Decorators

from djust import LiveView, event_handler, reactive

class MyView(LiveView):
    @event_handler
    def handle_click(self):
        """Marks method as event handler"""
        pass

    @reactive
    def count(self):
        """Reactive property - auto-triggers updates"""
        return self._count

    @count.setter
    def count(self, value):
        self._count = value

Configuration

Configure djust in your Django settings.py:

LIVEVIEW_CONFIG = {
    # Transport mode
    'use_websocket': True,  # Set to False for HTTP-only mode (no WebSocket dependency)

    # Debug settings
    'debug_vdom': False,  # Enable detailed VDOM patch logging (for troubleshooting)

    # CSS Framework
    'css_framework': 'bootstrap5',  # Options: 'bootstrap5', 'tailwind', None
}

Common Configuration Options:

Option Default Description
use_websocket True Use WebSocket transport (requires Django Channels)
debug_vdom False Enable detailed VDOM debugging logs
css_framework 'bootstrap5' CSS framework for components

Debug Mode:

When troubleshooting VDOM issues, enable debug logging:

# In settings.py
LIVEVIEW_CONFIG = {
    'debug_vdom': True,
}

# Or programmatically
from djust.config import config
config.set('debug_vdom', True)

This will log:

  • Server-side: Patch generation details (stderr)
  • Client-side: Patch application and DOM traversal (browser console)

State Management

djust provides Python-only state management decorators that eliminate the need for manual JavaScript.

๐Ÿš€ Quick Start (5 minutes)

Build a debounced search in 8 lines of Python (no JavaScript):

from djust import LiveView
from djust.decorators import debounce

class ProductSearchView(LiveView):
    template_string = """
    <input dj-input="search" placeholder="Search products..." />
    <div>{% for p in results %}<div>{{ p.name }}</div>{% endfor %}</div>
    """

    def mount(self, request):
        self.results = []

    @debounce(wait=0.5)  # Wait 500ms after typing stops
    def search(self, query: str = "", **kwargs):
        self.results = Product.objects.filter(name__icontains=query)[:10]

That's it! Server only queries after you stop typing. Add @optimistic for instant UI updates, @cache(ttl=300) to cache responses for 5 minutes.

๐Ÿ‘‰ Full Quick Start Guide (5 min)


Key Features

  • โœ… Zero JavaScript Required - Common patterns work without writing any JS
  • โœ… 87% Code Reduction - Decorators replace hundreds of lines of manual JavaScript
  • โœ… Smallest Bundle - 7.1 KB client.js (vs Phoenix ~30KB, Livewire ~50KB)
  • โœ… Competitive DX - Matches Phoenix LiveView and Laravel Livewire developer experience

Available Decorators

Decorator Use When Example
@debounce(wait) User is typing Search, autosave
@throttle(interval) Rapid events Scroll, resize
@optimistic Instant feedback Counter, toggle
@cache(ttl, key_params) Repeated queries Autocomplete
@client_state(keys) Multi-component Dashboard filters
DraftModeMixin Auto-save forms Contact form

Quick Decision Matrix:

  • Typing in input? โ†’ @debounce(0.5)
  • Scrolling/resizing? โ†’ @throttle(0.1)
  • Need instant UI update? โ†’ @optimistic
  • Same query multiple times? โ†’ @cache(ttl)
  • Multiple components? โ†’ @client_state([keys])
  • Auto-save forms? โ†’ DraftModeMixin

Learn More

Developer Tooling

Debug Panel

Interactive debugging tool for LiveView development (DEBUG mode only):

# In settings.py
DEBUG = True  # Debug panel automatically enabled

Open: Press Ctrl+Shift+D (Windows/Linux) or Cmd+Shift+D (Mac), or click the ๐Ÿž floating button

Features:

  • ๐Ÿ” Event Handlers - Discover all handlers with parameters, types, and descriptions
  • ๐Ÿ“Š Event History - Real-time log with timing metrics (e.g., search โ€ข 45.2ms)
  • โšก VDOM Patches - Monitor DOM updates with sub-millisecond precision
  • ๐Ÿ”ฌ Variables - Inspect current view state

Learn More:

Event Handlers

Always use @event_handler decorator for auto-discovery and validation:

from djust.decorators import event_handler

@event_handler()
def search(self, value: str = "", **kwargs):
    """Search handler - description shown in debug panel"""
    self.search_query = value

Parameter Convention: Use value for form inputs (dj-input, dj-change events):

# โœ… Correct - matches what form events send
@event_handler()
def search(self, value: str = "", **kwargs):
    self.search_query = value

# โŒ Wrong - won't receive input value
@event_handler()
def search(self, query: str = "", **kwargs):
    self.search_query = query  # Always "" (default)

๐Ÿ—๏ธ Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Browser                                    โ”‚
โ”‚  โ”œโ”€โ”€ Client.js (5KB) - Event & DOM patches โ”‚
โ”‚  โ””โ”€โ”€ WebSocket Connection                   โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ†•๏ธ WebSocket (Binary/JSON)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Django + Channels (Python)                 โ”‚
โ”‚  โ”œโ”€โ”€ LiveView Classes                       โ”‚
โ”‚  โ”œโ”€โ”€ Event Handlers                         โ”‚
โ”‚  โ””โ”€โ”€ State Management                       โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
           โ†•๏ธ Python/Rust FFI (PyO3)
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚  Rust Core (Native Speed)                   โ”‚
โ”‚  โ”œโ”€โ”€ Template Engine (<1ms)                โ”‚
โ”‚  โ”œโ”€โ”€ Virtual DOM Diffing (<100ฮผs)          โ”‚
โ”‚  โ”œโ”€โ”€ HTML Parser                            โ”‚
โ”‚  โ””โ”€โ”€ Binary Serialization (MessagePack)    โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

๐ŸŽจ Examples

See the examples/demo_project directory for complete working examples:

  • Counter - Simple reactive counter
  • Todo List - CRUD operations with lists
  • Chat - Real-time messaging

Run the demo:

cd examples/demo_project
pip install -r requirements.txt
python manage.py migrate
python manage.py runserver

Visit http://localhost:8000

๐Ÿ”ง Development

Project Structure

djust/
โ”œโ”€โ”€ crates/
โ”‚   โ”œโ”€โ”€ djust_core/      # Core types & utilities
โ”‚   โ”œโ”€โ”€ djust_templates/ # Template engine
โ”‚   โ”œโ”€โ”€ djust_vdom/      # Virtual DOM & diffing
โ”‚   โ””โ”€โ”€ djust_live/      # Main PyO3 bindings
โ”œโ”€โ”€ python/
โ”‚   โ””โ”€โ”€ djust/      # Python package
โ”‚       โ”œโ”€โ”€ live_view.py       # LiveView base class
โ”‚       โ”œโ”€โ”€ component.py       # Component system
โ”‚       โ”œโ”€โ”€ websocket.py       # WebSocket consumer
โ”‚       โ””โ”€โ”€ static/
โ”‚           โ””โ”€โ”€ client.js      # Client runtime
โ”œโ”€โ”€ examples/                  # Example projects
โ”œโ”€โ”€ benchmarks/               # Performance benchmarks
โ””โ”€โ”€ tests/                    # Tests

Running Tests

# Rust tests
cargo test

# Python tests
pytest

# Integration tests
cd examples/demo_project
python manage.py test

Building Documentation

cargo doc --open

๐Ÿ’ฐ Supporting djust

djust is open source (MIT licensed) and free forever. If you're using djust in production or want to support development:

  • โญ Star this repo - Help others discover djust
  • ๐Ÿ’œ GitHub Sponsors - Monthly support from $5/month

Your support helps us maintain and improve djust for everyone!

๐Ÿค Contributing

Contributions welcome! Please read CONTRIBUTING.md first.

Areas we'd love help with:

  • Additional Django template filters/tags
  • More example applications
  • Performance optimizations
  • Documentation improvements
  • Browser compatibility testing

๐Ÿ“ Roadmap

  • Template inheritance ({% extends %})
  • {% url %} and {% include %} tags
  • Comparison operators in {% if %} tags
  • More Django template filters (urlencode)
  • File upload handling
  • Server-sent events (SSE) fallback
  • React/Vue component compatibility
  • TypeScript definitions
  • Redis-backed session storage
  • Horizontal scaling support

๐Ÿ”’ Security

  • CSRF protection via Django middleware
  • XSS protection via automatic template escaping
  • WebSocket authentication via Django sessions
  • Rate limiting support

Report security issues to: security@djust.org

๐Ÿ“„ License

MIT License - see LICENSE file for details.

๐Ÿ™ Acknowledgments

  • Inspired by Phoenix LiveView
  • Built with PyO3 for Python/Rust interop
  • Uses html5ever for HTML parsing
  • Powered by the amazing Rust and Django communities

๐Ÿ’ฌ Community & Support


djust.org โ€” Made with โค๏ธ by the djust community

Project details


Release history Release notifications | RSS feed

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

djust-0.2.0.tar.gz (1.6 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

djust-0.2.0-cp312-cp312-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.12Windows x86-64

djust-0.2.0-cp312-cp312-manylinux_2_34_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

djust-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

djust-0.2.0-cp312-cp312-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

djust-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

djust-0.2.0-cp311-cp311-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.11Windows x86-64

djust-0.2.0-cp311-cp311-manylinux_2_34_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

djust-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

djust-0.2.0-cp311-cp311-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

djust-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

djust-0.2.0-cp310-cp310-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.10Windows x86-64

djust-0.2.0-cp310-cp310-manylinux_2_34_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

djust-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

djust-0.2.0-cp310-cp310-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

djust-0.2.0-cp39-cp39-manylinux_2_34_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

djust-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

djust-0.2.0-cp39-cp39-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

djust-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.9 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

djust-0.2.0-cp38-cp38-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

File details

Details for the file djust-0.2.0.tar.gz.

File metadata

  • Download URL: djust-0.2.0.tar.gz
  • Upload date:
  • Size: 1.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for djust-0.2.0.tar.gz
Algorithm Hash digest
SHA256 c6a4097894ce4039857bbfd5d1842666ed395cef37bedb85ca7c19dba7c76ccd
MD5 a74a9289313306d652f82fe731b2fa25
BLAKE2b-256 bc897c946c876170d4838b0105c8d03eabd14d2847949b0d308185fa25389f9f

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0.tar.gz:

Publisher: publish.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: djust-0.2.0-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 3.0 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for djust-0.2.0-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 7579712b3386f279c55d0bd7ba85ab67cf4429113c087fe2657de03d2631a1d1
MD5 f184962f68cdb6c666387d4b6932b4c8
BLAKE2b-256 a88a2b2b22f8c78b68ccefa29af172f56c80717dc75404dad65f4ce67a77d494

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp312-cp312-win_amd64.whl:

Publisher: publish.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.0-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 05dcc903e9f389853680d20ad7a2563fd3444d92c8810c1759e5f4c5258a6227
MD5 909ab98542f062e1289dc074cb6dc64b
BLAKE2b-256 58ce8b25dcced8c45777e4a846ddcc7fbd4cb6240e5fc2353e4b2a0c22f90f32

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp312-cp312-manylinux_2_34_x86_64.whl:

Publisher: release.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4b863115f9a9c7e6676c886bcc15ef426db94bfff3c2c891df9ab5a0bc7a4442
MD5 bcf890ffc1a820fe0545b3d4b451af8f
BLAKE2b-256 807115c1d3d2cffc87a2ccf3a3f7b36076b6da4b9c4d305808a1e8f966678111

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for djust-0.2.0-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 468016aa309a26c1aaa1c2b20737ac87be2456224e78aa3de5d7a941ce7463eb
MD5 994d6096b0453b7b36d6d2c8033645bb
BLAKE2b-256 f0b9903c765bbb178aff983503e7fb794cd85244830a3e93827f963ebaae6eec

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp312-cp312-macosx_11_0_arm64.whl:

Publisher: publish.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 17f6e119d77d2155cbe8c1b265a51e3460b87b350cb03de38a3ddf6b3ab4a22a
MD5 06d38da1f38832873bc86428bdebceed
BLAKE2b-256 99a9c9eecce7e28ac7aa1a5d19d8c2c7e65e9ba8c8ab5d1dca22dc05a1e631ae

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp312-cp312-macosx_10_12_x86_64.whl:

Publisher: release.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: djust-0.2.0-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 3.0 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for djust-0.2.0-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d1195fd9ae1e0bf3729d413c704e82e662fb6d047aaa79097d44aa8ca124cb47
MD5 86d8a38ef0920aebf7e81b1fcaf62a5c
BLAKE2b-256 e0367d47428361ecddf0ae2ee0138dad781737511ea4fde890b9987e29878b8e

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp311-cp311-win_amd64.whl:

Publisher: publish.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.0-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 558cd3ec0c4eba34f6ee04a821f55b23dd6752c4bd42aa64165a464cccf76ec6
MD5 a669084b1a571f003b6fbd0931b43d94
BLAKE2b-256 4dde4089afea9c5398400d73180c0d364b18e9072421a11cac66529571531989

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp311-cp311-manylinux_2_34_x86_64.whl:

Publisher: release.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a9438806be0c463c3301b2092caee3957ceddb094acac81231ade72743584612
MD5 991c5aee4d9e52a64f4d35cc24fcef52
BLAKE2b-256 e9b86e99ace4e82c5419dfad52f0fb9494795483404818682dcda14fa5ba28f5

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for djust-0.2.0-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4037ef4541a2a541939deda80890211fbce9282e839c3b3107068c5f721340bb
MD5 0a42604f51fc34b2cfb71c8b603f0c5b
BLAKE2b-256 d9fc7fe0c4db0f5fa5dabb09ac78eb915f3ff04ad689b44a6273d1a98312d4c8

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp311-cp311-macosx_11_0_arm64.whl:

Publisher: publish.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3b8f4147c5b95940ccc9ceee2e6f240a112be251b4aa2375006e3a8ae7a28313
MD5 849ae91e464cc30c3b4245c2b894aebb
BLAKE2b-256 6a2432467417cb7923c09ebc09281ba203a7e9e1086fd46dc884623b6971861c

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp311-cp311-macosx_10_12_x86_64.whl:

Publisher: release.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: djust-0.2.0-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 3.0 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for djust-0.2.0-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 8ad1a6ad6185e4d42f85deac9a837b23c42438ee57c71f47a92bd3b362e4f320
MD5 82c6aceb8459fb42e6a9796bb9d75bd2
BLAKE2b-256 a6353bea81300c4ab23c083df18cc2d1d1b3c3be7cdde3c656cc37ff8d8456be

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp310-cp310-win_amd64.whl:

Publisher: publish.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.0-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 ae21d436892371106c7b921736a63b080635c2fa26ad96e86156d880827ced42
MD5 ab4f77b361e6b16b4711d9ea4ef078a8
BLAKE2b-256 bca217340788c4cce23043df78c43fcb8d81e0ef1ae6f39850702197a43c9d09

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp310-cp310-manylinux_2_34_x86_64.whl:

Publisher: release.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 39adb8db7eb890b02124b3f9752be320eb4552d3e6b4323352ed594b77f56f9f
MD5 8dca818117b7f52dd6cdd933974f69f2
BLAKE2b-256 5fdb9da41dda85a0fdefbc2f871308f1c111918fc912f8141978543644999fa9

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for djust-0.2.0-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5622e579bc59c62ba1a3ff7d923df3455db1c2e0941d5445a925c8a2275e02be
MD5 16c137ba59a12f21c374717825689a90
BLAKE2b-256 880299915ef9fc84f4b2b5a15de53c68af74bbaaa9991f2239b5119bf173abf3

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp310-cp310-macosx_11_0_arm64.whl:

Publisher: publish.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp39-cp39-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.0-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 ff8df05b57a8a3094313551db38cad1942066e80e86fbca591692b58d7686590
MD5 ca904672a3e745a65ea04e74afcd1534
BLAKE2b-256 dcca637eb4eb858d091dbeb6518076f4b79f1b18601656af05de3576a02bce12

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp39-cp39-manylinux_2_34_x86_64.whl:

Publisher: release.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 de9542df91ba5d5e14866de504e9ed3a058432b6050a121f8167c868ae5a66a1
MD5 b433c10425d87485de415e3fb6e567a1
BLAKE2b-256 2303cf0fff73da6cc62350b64227d483c284661860be0fceb27d5e8b202ec6b8

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

  • Download URL: djust-0.2.0-cp39-cp39-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 2.8 MB
  • Tags: CPython 3.9, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for djust-0.2.0-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e641ccc536a88ae4978cbd36005f40ac8faca30cd36a891481be42bbd8b2388a
MD5 c62826cf37ce05e80dd055d6d4c43f34
BLAKE2b-256 2897d5abdfa456ac4682babd4cbcb3f6143c2465f756a4802e2b8d36f760b955

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp39-cp39-macosx_11_0_arm64.whl:

Publisher: publish.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 01cc245213f674462382bdd8f1d56a6ab7acbc28e34e3602c729557f2f241e41
MD5 0e1a51e96bba4ee3fe68f9e89a959650
BLAKE2b-256 8649b2f2f3b879defe8bddf2c97acdac597d659b584884e9c77e53424b0b8fe5

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: publish.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file djust-0.2.0-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

  • Download URL: djust-0.2.0-cp38-cp38-macosx_11_0_arm64.whl
  • Upload date:
  • Size: 2.8 MB
  • Tags: CPython 3.8, macOS 11.0+ ARM64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for djust-0.2.0-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a657ff36f76d366c7cefb4962bbbf29306c59e4a9c5e1d1b3c7871f524a76ed1
MD5 dbe22a10279b01bf34ea7eea310ca9cf
BLAKE2b-256 7a9456a38994e451c2da38bd9b42f40e0169f800685853e2e585ca9e2a908d62

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.0-cp38-cp38-macosx_11_0_arm64.whl:

Publisher: publish.yml on djust-org/djust

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page