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.1a1.tar.gz (1.7 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.1a1-cp312-cp312-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.12Windows x86-64

djust-0.2.1a1-cp312-cp312-manylinux_2_34_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

djust-0.2.1a1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.0 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.12+ x86-64

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

Uploaded CPython 3.11Windows x86-64

djust-0.2.1a1-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.1a1-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.1a1-cp311-cp311-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.12+ x86-64

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

Uploaded CPython 3.10Windows x86-64

djust-0.2.1a1-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.1a1-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.1a1-cp310-cp310-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

djust-0.2.1a1-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.1a1-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.1a1-cp39-cp39-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

djust-0.2.1a1-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.1a1-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.1a1.tar.gz.

File metadata

  • Download URL: djust-0.2.1a1.tar.gz
  • Upload date:
  • Size: 1.7 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.1a1.tar.gz
Algorithm Hash digest
SHA256 a808dae419d507504e8cd895135305da5c380b68806a31eb04bda75a249132af
MD5 0b2ccdb3049309330bc0573bec82334c
BLAKE2b-256 07736c17f6aa2d46749619b8723ec5ab09e5d3613a9c0501b01a394cecd5a438

See more details on using hashes here.

Provenance

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

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.1a1-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: djust-0.2.1a1-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.1a1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 ca23d16b0c75b451c83157069883b959c4f828f31126a46ba4a16a92f89b77a6
MD5 0144f70971e69f90ffb60aa8504cf385
BLAKE2b-256 0c400b153b9bdf82cee651bd934faf835166e6b5df5a1f29b9fdfd0f3383cca9

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-cp312-cp312-win_amd64.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.1a1-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 5dd5df29782e1d45301aca915022d3f3126f7f736f630377183f4fcfaf7ca373
MD5 1c81578dd1168dcef845dfe8bc78be9f
BLAKE2b-256 c985e5b6da14ddb10fa3736124ae822760a1d30e0881aa04052a226c5b047c82

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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.1a1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 b32b50206311fa20b1298db62862d530764cd9b647ab3401b7fbb2a3b6d027e1
MD5 94c5ba1b4db986a06e9f87de53042010
BLAKE2b-256 d12e3c6090f03f466b3ee12c74e8a9cba91982ec231c06f2db30c4db0b6635b1

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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.1a1-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e6094fe8401e4bae24683e1c188fabd0f1152d12e750a00faa5a87cd3c0744d0
MD5 de91a7c3fb8cc0c0ccd6dcd173db67d2
BLAKE2b-256 a77c5b9cbe76256d92f7194fa50b6251a1bc03b499ecf9a90a69a450a64cab28

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-cp312-cp312-macosx_11_0_arm64.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.1a1-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 f4f2c8ffd807897e15d62c7f32f58fdc6721ab61a879587f763d2e36ea80500f
MD5 bb2c467fbc0a4cb36be697fc467642e4
BLAKE2b-256 73c664f2967343cc4f3b6df0081036fe62eeeb88c06baeb112501ab6d02ade66

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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.1a1-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: djust-0.2.1a1-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.1a1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d213b0f245f780c669f9a5b9525fb568d70e931acd1506a38b9a331c30af050e
MD5 890cf5790513e8194c02ad82b1bd8c76
BLAKE2b-256 348bcd52897781fe2ee552cec8c1f0e52c93527e42355447f899ae3eea33355a

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-cp311-cp311-win_amd64.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.1a1-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 c2a55b36a4fa0801b966f67cf71b368eac8832ac515648c55564a3e5b43a0b82
MD5 920a3bc27dadbfe9b1cdb3819a15db7a
BLAKE2b-256 7708f8da6a1cad37a9fbd0b36b30b7b2bd06c7f1620b00321696c6feeb5a18be

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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.1a1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2fa27c15642b516210a09c31b0a8a24382c95a1aaf0945b794b7ec6d2217557e
MD5 f1387f8a79c2c60c2041221233224188
BLAKE2b-256 24b265ea39c37634d63f52fabca5ac6b2fef4d0f5aae299611a7a89544efdb5c

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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.1a1-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8cfde0d0c13cecbc08e8477488908ee5552c8ec1eee06d2ae2daf444625d8037
MD5 a9cc5e6013f89f00fea4f39e4d8988d3
BLAKE2b-256 085e4d246e478694bcfc81e4e1758bd679567e208659162fe797a64592b49153

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-cp311-cp311-macosx_11_0_arm64.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.1a1-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 8d3338144a62e7d56bf76e546f8c13dbbfe04f86b7182ef805a2f2538cd8ec52
MD5 20f063289f59dea043c925a867a6caa7
BLAKE2b-256 29b31b418048f69524e9ad6bd6db690653c54a2337482bc42a71cb46e0b49982

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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.1a1-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: djust-0.2.1a1-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.1a1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 9710e297cae98c11c485a0be6b0395c48a6fb2922d0c0e48d36eb39c6473cb47
MD5 4c5c2a50f16dbda99c5840cfc46655c9
BLAKE2b-256 61d580b7a76ae0f6f269e76edd8a3555562980578d3b627f22928c7d5c64ed62

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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.1a1-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 43f3a4fbff1e92f4713cd15f647881fb3103556e178541e9dbd31b5e978ed072
MD5 3e869e5da105a2728c815781e6a91ccc
BLAKE2b-256 266fc30d995b5ce3c141caab4977cd2913cc2432ca80921e22a7ee881b0915ce

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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.1a1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 a5e34572515ac24906474b7bbff17f9ff73caee425e3fee8320fb1846cf4e9e0
MD5 f64420eacaa1aaf34169fbf88e2e0c55
BLAKE2b-256 7f7614f80538e5f681ea2d65bce77caeb4b85bdebed2f31f43ce5c28e1a64ee5

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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.1a1-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f5492622e4f810ab3d1f4ed16f2f61130b055212ad9b48b9eb9a2e01a6c81f3e
MD5 8d5a94cbdc0214459590db5f561e12c5
BLAKE2b-256 9b9a085ab65ee1ed5d48e764d0b7b3d0b22d77baa37139e3bb158508da138f88

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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.1a1-cp39-cp39-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 0d3f850a12ae548106eedb93f1867b6a0d099b8454a982e62219bb21fb1faf49
MD5 0d587676f2dc789fef1775d8e079461c
BLAKE2b-256 11ddd64fcb86bd39aa02f5218ff5da8281a39f1039f6a7c46dc5de0233fd9095

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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.1a1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 7c4ae7af599037584af7bf831bdd374af0906ed112be800862f770fe1ee9f3c1
MD5 409cbc55d65c9db0417c6a41985db306
BLAKE2b-256 b1bf7a6b07028dc3a5b4df934dde52f3c8f0d2c7f54fe839f30874267965d090

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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.1a1-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3447c7fde3e1054cc28899b8c176c483b8219e6cb9473d67a3aac7bf899b0722
MD5 fd939033cf79e328b6e42177393ead2c
BLAKE2b-256 e865fab843162acea3c9a3c1613a98835301049546c95f143572d623beaf9e7e

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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.1a1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 ba9dc21e3081d82467551666b8c1c73488da5883d54c6d2197656498ec6ebe2f
MD5 c6d20114f61eb8aa0c2dd2440c16515e
BLAKE2b-256 9e6bec4800719f2b3116d884d5537dbde5628d246219ccec7c1d389a12d6a5f2

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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.1a1-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for djust-0.2.1a1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4fc146582c67351515fc3d1320916b7ae43bb9fe938ea7522c7d1857910eb609
MD5 dc5ab3fdf68b439bacd8134a57bc1855
BLAKE2b-256 0519f2ac6cd6424f4efc812800b6e372a15345e8e1d8a1077c60341667b47a3e

See more details on using hashes here.

Provenance

The following attestation bundles were made for djust-0.2.1a1-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