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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.12+ x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.12+ x86-64

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

Uploaded CPython 3.10Windows x86-64

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

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.9macOS 11.0+ ARM64

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

File metadata

  • Download URL: djust-0.2.1.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.1.tar.gz
Algorithm Hash digest
SHA256 91a77f4a537ef4c5becab1e61626f126dc8bd57026dc5db7874374dc8bf75c8f
MD5 1caea6f161d590f857e0f444c5935315
BLAKE2b-256 00f8a0175e745930c2911db999810fcde697e6369eac588ec2a68e438ffa8db8

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: djust-0.2.1-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.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 90a1867741557fe09775b95db63fb61998c231de6a571c3e52bbeb94f81ec0ed
MD5 7bbcb22104f7daf2ca511879ee6baef2
BLAKE2b-256 f93b8260c4e954b702608d09a1d3a0ffa9b2934e51c95b13db49bd993f5f26bf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for djust-0.2.1-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 eb6549a3a3b248fad07e1a643bc4c7564751a75ec7282f5bb405a8408a31f61e
MD5 3918556f19ca40dd9227a2de8b11e50f
BLAKE2b-256 027ed2be629035eb4e4186de5eb94a62105cbe546283b0d51fed89a4ce611920

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for djust-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1f53087113cd59abd537d8cf26286b90a3a0f623fce1958ea648424a1faef9da
MD5 006e96608852138e83c3818febed9883
BLAKE2b-256 56f7e790a25cf18caa851a609c584a505847456e8da7af2f3510e3fe3ebddeb5

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for djust-0.2.1-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1bca96101469ff3f63198370dcaef979cdac4c3efbe3e6fbfdf90c2ed4c7eb4e
MD5 c9fe9a05fd3382605ab620dc4db37adb
BLAKE2b-256 f6479d02a0e4007d6ca34d3e35743d0a998e621ff56e6fbcc44bb61bec3966e2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for djust-0.2.1-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 91feca4e6edb92f5ce2cd392a4d650fe807ec2578e60789acec65a8b2dc58715
MD5 4c3528d2403e302b420be195fb51943c
BLAKE2b-256 0edc7a62f3d6ce115cca16727c251d927df5f63d2ac181629e3e024eb3e1bad6

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: djust-0.2.1-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.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 00f70c19a810ac5d0abf94a24ace13f5f029e61374a0430e36dfa809ca409ef4
MD5 3218548110448c50bf697fc8c770da72
BLAKE2b-256 4aa346718f1c8e3011876c489f7c345205eac8bba0758359f82e59af7b0dbcdf

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for djust-0.2.1-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 16464185c8f759ea08ec788a71881b7a5d7c4fec68a5267c1c34e7fdea4e0df1
MD5 87e7d8d6cf1cafa9adbae14a5206c150
BLAKE2b-256 3ed84686d62fd7d9aedde80d7ac9f48092c18558f5459b26f091f36e0f040e40

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for djust-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 1e00276ecab595384c3c96999cdab2ee8f547f13b679327cc6b8bface36203b9
MD5 5bc04242213c3ed5daab8e47562b2891
BLAKE2b-256 1c19226072061e26c6a03b46c990717acde0b268b762e3e97f95e7ca319c45f2

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for djust-0.2.1-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 3b8ead2c84737a903b99f5ff7a0f2c79ff38a20292c3ef03a5ea0dabc081bcc4
MD5 ceec403a2eb8c8a2fa87a6b2c950b306
BLAKE2b-256 366be62b8d21f52a5c28273374a8f6daf295b2656fe6894fb30422ccc6c04479

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for djust-0.2.1-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 b67ee63479f6de301fa52a3ef8726a006400d0bd162ce8d4990b4aa3edbe5a56
MD5 f4e39c8fc677810adde8c584b538fc9a
BLAKE2b-256 ffe06f1c0cd8d2e7eb16639749c384e9bcd57a502091b6fdd46fc73e9edaa021

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: djust-0.2.1-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.1-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 777287fadccae589123c7a49bd3164f1f2160f333ef96d142d9cef4b22408372
MD5 171c8b5c6a687d4f49b36fe5756abbbb
BLAKE2b-256 0f0e620ee4006d7280dc843f73734d8716b8189b78768918c5b738f85ac011cb

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for djust-0.2.1-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 3cdc8a524bd61d64ef0a4c6107ccc1d981be97097c5ede8a80f0867f2cc470ca
MD5 2c0fa8b831f61bcb54c140b00ff89cec
BLAKE2b-256 23ce7a1ec721453b989d9379bf093df039d35854fd997ccd1aeab4a23a0d5da9

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for djust-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 9e2a097630bc423e2797e573938d7febc8f9e0c2509dfb2e54762295b5cbb49f
MD5 80b8cfc4fb4e38c74b64735c1d5a437a
BLAKE2b-256 b6c782b91da811948cfe47abc2c39c8517345094ae8d91e87b6f175ba71ce95a

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for djust-0.2.1-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ff4e81e62a5af54c0021d835f0af963dc3138dbd483544a8802eb993d4450506
MD5 e3778b259f74a958accdd52dc6da084f
BLAKE2b-256 829554a5fb2a0e90a9195fe7bba1f88246405fe93c2ec17dc000b275c9b760a6

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for djust-0.2.1-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 2c1e5bf2a744b2845e06c737e4a414d92e826a798375783bd57978e34cb4ac61
MD5 19c66ec96ea4e56628c003933a473dfd
BLAKE2b-256 7f91b1ac07cf6fd4305a37ea8ae99d32e6c27c091a6bc1d0a64c3e638eb11135

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for djust-0.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 5bfda302a8bdac84719e3bba7c7bdddfa67d041b147155def3c5d8c7247bca9e
MD5 d193a4164b07d4a6dba72655e12fb1c4
BLAKE2b-256 cb00910383a14bd842a56fc19dcb9bb98bae3a189ed4dc1c1d551253625f8cdd

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: djust-0.2.1-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.1-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 00368c498f14574cd357568168d0200efcbf65bd5ce9bcc53c3ca7cc1d86540f
MD5 ca2cebad934d7939e7d6c01eabc0f105
BLAKE2b-256 87cfa61736514bb2b3bb4cf874634225cd75db3a2861c0215956017fbc5e5982

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for djust-0.2.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 059a8ebc488d73e6a2312bdb3985d10f26c7f2f2af51b312bf9875093791e1a7
MD5 f29197684778cbeb8795ff04d5769bb9
BLAKE2b-256 cc372bd4e386af563e484d2493919f29a19a553c736397fa305c3bd25947cbea

See more details on using hashes here.

Provenance

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

File metadata

  • Download URL: djust-0.2.1-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.1-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 ba4e9eb53a85d20b3fbb76e8f787be341ac034dba254c48314b074cc7db45f77
MD5 ee348897a318fe0fefa1d61d87f673d1
BLAKE2b-256 5e73debcd8b98e2734e1b87affdce0786304cce5dcdcf48d6b8098125b401a21

See more details on using hashes here.

Provenance

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