Skip to main content
Django-Bolt

The fastest Python web framework — built on Django

Rust-powered HTTP, msgspec serialization, full type validation —
with the Django ORM, Django Admin, and every Django package you already use.

PyPI Python versions Django versions License
Downloads Discord Sponsor

Documentation · Quick Start · Features · Benchmarks · Video Tutorial · Discord


Django-Bolt is the fastest Python web framework: 300k+ requests/second on a single 12-core desktop (8 processes, C=100, loopback), ahead of FastAPI and Robyn, and even of Bun-based JavaScript frameworks (Elysia, Hono) on JSON payloads. It is a fully typed API framework for Django. It serves your endpoints from a Rust HTTP server (Actix Web + Tokio), bridges to your Python handlers with PyO3, and serializes with msgspec — while everything you love about Django (ORM, Admin, auth, middleware, signals, third-party apps) keeps working out of the box.

Think Django REST Framework or Django Ninja, with a Rust engine underneath and no gunicorn or uvicorn required.

from django_bolt import BoltAPI

api = BoltAPI()

@api.get("/hello/{name}")
async def hello(name: str):
    return {"message": f"Hello, {name}!"}
python manage.py runbolt --dev

✨ Why Django-Bolt?

⚡ Rust speed, Python ergonomics HTTP parsing, routing, auth, guards, CORS, rate limiting, and compression run in Rust without touching the GIL. Your handlers stay plain Python.
🐍 100% Django Use your existing models, settings.py, INSTALLED_APPS, Django Admin, middleware, and signals. Migrate one endpoint at a time from DRF.
🧷 Fully typed Type hints drive path/query/header/cookie/form/body extraction and validation. msgspec.Struct and Bolt Serializer return types are validated on the way out.
🚀 Deploy directly runbolt is the production server: multi-process with SO_REUSEPORT, worker recycling, graceful shutdown, static & media serving.
📚 Batteries included OpenAPI docs (Swagger, ReDoc, Scalar, RapiDoc, Stoplight), JWT/API-key auth, guards, pagination, ViewSets, WebSockets, SSE, streaming, testing client, MCP servers.

🚀 Quick Start

1. Install

pip install django-bolt      # or: uv add django-bolt

2. Add to INSTALLED_APPS

# myproject/settings.py
INSTALLED_APPS = [
    ...,
    "django_bolt",
]

3. Write your first endpoint

Create an api.py next to your settings.py (or inside any Django app — Bolt autodiscovers them all):

# myproject/api.py
import msgspec
from django.contrib.auth import get_user_model
from django_bolt import BoltAPI

User = get_user_model()
api = BoltAPI()


class UserSchema(msgspec.Struct):
    id: int
    username: str


@api.get("/users/{user_id}")
async def get_user(user_id: int) -> UserSchema:   # response is type-validated
    user = await User.objects.aget(id=user_id)    # Django ORM, no extra setup
    return {"id": user.id, "username": user.username}

4. Run

python manage.py runbolt --dev              # auto-reload for development
python manage.py runbolt --processes 4      # production: multi-process, no gunicorn/uvicorn

Your API is live at http://localhost:8000/users/1 and interactive docs at http://localhost:8000/docs.

📖 Next: the Quick Start guide → Deployment → Topic guides.

🧭 A tour of the API

Request validation with type hints
import msgspec
from typing import Annotated
from django_bolt import BoltAPI
from django_bolt.param_functions import Header

api = BoltAPI()

class CreateUser(msgspec.Struct):
    username: str
    email: str

@api.post("/users", status_code=201)
async def create_user(
    user: CreateUser,                                     # JSON body → validated struct
    api_key: Annotated[str, Header("x-api-key")],         # header
    page: int = 1,                                        # query param with default
):
    return {"username": user.username, "page": page}
Authentication & guards (evaluated in Rust)
from django_bolt.auth import JWTAuthentication, IsAuthenticated, Requires

IsStaff = Requires("is_staff", True)

@api.get("/admin/stats", auth=[JWTAuthentication()], guards=[IsAuthenticated(), IsStaff])
async def admin_stats(request):
    return {"user_id": request.user.id}

JWT signature checks, expiry, API-key lookup, and guard evaluation all happen before the GIL is ever taken.

Serializers & ModelViewSet
from django_bolt import ModelViewSet, PageNumberPagination
from django_bolt.serializers import Serializer
from myapp.models import Article

class ArticleSchema(Serializer):
    id: int
    title: str
    content: str

    class Config:
        field_sets = {"list": ["id", "title"]}

@api.viewset("/articles")
class ArticleViewSet(ModelViewSet):
    queryset = Article.objects.all()
    serializer_class = ArticleSchema
    pagination_class = PageNumberPagination

One Serializer class, many projections — no more UserListSerializer / UserDetailSerializer / UserAdminSerializer sprawl.

WebSockets & Server-Sent Events
from django_bolt import WebSocket, StreamingResponse

@api.websocket("/ws/echo")
async def echo(websocket: WebSocket):
    await websocket.accept()
    async for message in websocket.iter_text():
        await websocket.send_text(f"Echo: {message}")

@api.get("/events")
async def events():
    async def stream():
        for i in range(10):
            yield f"data: tick {i}\n\n"
    return StreamingResponse(stream(), media_type="text/event-stream")
MCP servers for LLM clients
from bolt_mcp import MCP          # pip install "django-bolt[mcp]"

mcp = MCP("my-server")

@mcp.tool
async def add(a: int, b: int) -> dict:
    return {"sum": a + b}

api.mount_mcp(mcp)

Expose tools, resources, and prompts over MCP Streamable HTTP, backed by the official Rust SDK.

Middleware: CORS, rate limiting, compression
from django_bolt.middleware import cors, rate_limit

@api.get("/public")
@cors(origins=["https://example.com"])
@rate_limit(rps=100, burst=200)
async def public():
    return {"ok": True}

Django middleware (sessions, messages, CSRF, your own) is supported too.

📦 Features

Feature Description
⚡ High Performance Actix Web + Tokio + PyO3, zero-copy routing, sync-dispatch bypass for simple handlers
🔐 Authentication JWT, API key, and Django session auth — validated in Rust
🛡️ Permissions & Guards IsAuthenticated, AllowAny, and claim-based Requires(...) guards
🎛️ Middleware CORS, rate limiting, compression, Django middleware integration
📦 Serializers msgspec-based validation with field sets, computed fields, and model integration
🗄️ Async ORM Return QuerySets from async handlers; bounded, vendor-aware ORM executor
📡 Responses JSON, HTML, redirects, files, streaming, SSE
🔌 WebSockets FastAPI-style WebSocket handlers on Rust infrastructure
📚 OpenAPI Auto-generated schema with Swagger, ReDoc, Scalar, RapiDoc, and Stoplight UIs
🧱 Class-Based Views APIView, ViewSet, ModelViewSet, @action
📄 Pagination PageNumber, LimitOffset, and Cursor pagination
💉 Dependency Injection Depends(...) with registration-time graph resolution
🤖 MCP Servers Tools, resources, prompts, and streaming over MCP Streamable HTTP
🗂️ Static & Media Files Native Rust static/media serving — no WhiteNoise needed
🔗 ASGI Mounts Mount existing ASGI apps under a prefix
🩺 Health, Logging, Lifespan Health endpoints, structured logging, lifespan hooks, signals
🧪 Testing In-process TestClient that runs the full Rust pipeline
🧬 Nanodjango Single-file Django apps

All runtime settings and environment variables are listed in the Settings reference.

Measured performance, conditions, and reproduction steps are on the Benchmarks page.

🏗️ How it works

HTTP request
   │
   ▼
Actix Web (Rust) ── routing (matchit) ── CORS · rate limit · compression
   │
   ▼
Auth & guards (Rust, no GIL) ── JWT / API key / session · IsAuthenticated · Requires(...)
   │
   ▼
Dispatch ── sync fast path (single GIL block)  or  async path (persistent worker loop)
   │
   ▼
Your handler ── typed params · Depends(...) · Django ORM
   │
   ▼
msgspec serialization ── zero-copy body ── HTTP response

🚢 Deployment

python manage.py runbolt --host 0.0.0.0 --port 8000 --processes 4
python manage.py runbolt --processes 4 --max-rss 512   # recycle workers above 512 MB

Multi-process scaling uses SO_REUSEPORT for kernel-level load balancing. Worker recycling, crash respawn, graceful shutdown, and WebSocket drain are built in. See the Deployment guide for systemd, supervisor, and reverse-proxy setups.

🤝 Contributing

Contributions are welcome! See CONTRIBUTING.md for the development setup (Rust toolchain, uv, just), the test workflow, and pull request guidelines.

git clone https://github.com/dj-bolt/django-bolt.git && cd django-bolt
uv sync && just build && just test-py

💬 Community

💖 Sponsors

Support Django-Bolt's development by becoming a sponsor. Your logo will appear here with a link to your website.

Backers

🙏 Acknowledgments

Django-Bolt stands on the shoulders of giants:

  • Django REST Framework — ViewSet patterns, permission system, and overall API philosophy
  • FastAPI — dependency injection, parameter extraction, and type-hint-driven design
  • Litestar — OpenAPI plugin architecture, middleware and guard design
  • Robyn — proved the potential of Rust-powered Python web frameworks with PyO3
  • Actix Web, PyO3, msgspec, matchit — the foundations that make the speed possible

📄 License

Django-Bolt is released under the MIT License.

Metadata

Release files for django-bolt 0.13.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for django-bolt 0.13.0
File Size Uploaded Provenance
django_bolt-0.13.0.tar.gz 2.1 MB Without provenance Details

Built distributions (wheels)

Table of built distributions (wheels) for django-bolt 0.13.0
File
django_bolt-0.13.0-cp314-cp314t-win_amd64.whl CPython 3.14 CPython 3.14 free-threading Windows x86-64 Details
django_bolt-0.13.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 Details
django_bolt-0.13.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 Details
django_bolt-0.13.0-cp314-cp314t-macosx_11_0_arm64.whl CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 Details
django_bolt-0.13.0-cp314-cp314t-macosx_10_12_x86_64.whl CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 Details
django_bolt-0.13.0-cp312-abi3-win_amd64.whl CPython 3.12 abi3 Windows x86-64 Details
django_bolt-0.13.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl CPython 3.12 abi3 Linux glibc 2.17+ x86-64 Details
django_bolt-0.13.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl CPython 3.12 abi3 Linux glibc 2.17+ ARM64 Details
django_bolt-0.13.0-cp312-abi3-macosx_11_0_arm64.whl CPython 3.12 abi3 macOS 11.0+ ARM64 Details
django_bolt-0.13.0-cp312-abi3-macosx_10_12_x86_64.whl CPython 3.12 abi3 macOS 10.12+ x86-64 Details

Total release size: 58.0 MB

Release files / django_bolt-0.13.0.tar.gz

Download URL django_bolt-0.13.0.tar.gz
Size 2.1 MB
Tags Source
SHA-256 checksum
How to use checksums
feaeb992daab0662769e74d548bb3e5c6094b51fbb9d928d34ff681aee6203ef
BLAKE2b-256 checksum
How to use checksums
c0341e7cefc7b417e6e11156a2acb05eaa95919b0998ae40299108ad39622098
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_bolt-0.13.0-cp314-cp314t-win_amd64.whl

Download URL django_bolt-0.13.0-cp314-cp314t-win_amd64.whl
Size 5.3 MB
Tags CPython 3.14 CPython 3.14 free-threading Windows x86-64
SHA-256 checksum
How to use checksums
25577b28d7fb9734221fda9e448581eb725a24d4a90c404cbeeaf3f21f89d5c5
BLAKE2b-256 checksum
How to use checksums
861b4e566e808f203cfb8a83ef807aa04af62815304c3bf24333887f7f0e6ca4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_bolt-0.13.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL django_bolt-0.13.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 6.0 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64
SHA-256 checksum
How to use checksums
1e00e5d5fdadcfefbbe87e45d8890060673b913cefdbe9d5004e22abcbc86be5
BLAKE2b-256 checksum
How to use checksums
cc98ad343c0e79a9736e7f0d07b3230061e7ac8e7c27f8337cfb67bbe3af8fb8
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_bolt-0.13.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL django_bolt-0.13.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 5.7 MB
Tags CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64
SHA-256 checksum
How to use checksums
198731efcc4ca35aed62c1bd9b182107516adb496d614d2318baed7f5408c051
BLAKE2b-256 checksum
How to use checksums
098b4e031f692d5a516c11040878449bc7360073701d30eb80b8767489a89f36
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_bolt-0.13.0-cp314-cp314t-macosx_11_0_arm64.whl

Download URL django_bolt-0.13.0-cp314-cp314t-macosx_11_0_arm64.whl
Size 5.3 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
be488462a1a545f20043bdd5726d2fbcee382963dd9d306161ced9ab93329759
BLAKE2b-256 checksum
How to use checksums
b722fc1af26f8061fa30005dbea87833a7a8e7a54eb19002de5c07a616814514
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_bolt-0.13.0-cp314-cp314t-macosx_10_12_x86_64.whl

Download URL django_bolt-0.13.0-cp314-cp314t-macosx_10_12_x86_64.whl
Size 5.7 MB
Tags CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
bdcbae2fbd6133358257f24cdd8b6dc01186cdc9af22cdb38cc7a68176d9268f
BLAKE2b-256 checksum
How to use checksums
0ea4516806cf3ee3c57b1aff057c5210e4bd4b81c2e956044c15bf950540e84b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_bolt-0.13.0-cp312-abi3-win_amd64.whl

Download URL django_bolt-0.13.0-cp312-abi3-win_amd64.whl
Size 5.3 MB
Tags CPython 3.12 Windows x86-64 abi3
SHA-256 checksum
How to use checksums
fb062e05aea7cff22626e484ebc55827c941fbae61bb5caa837d25249ecffed9
BLAKE2b-256 checksum
How to use checksums
58707dcc119f51971c54d8192c2c6ed23c1de917fb676019a6a97355fbbb91e3
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_bolt-0.13.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl

Download URL django_bolt-0.13.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Size 6.0 MB
Tags CPython 3.12 Linux glibc 2.17+ x86-64 abi3
SHA-256 checksum
How to use checksums
a93f081411505df78bc7c5696beeb853c1daf8cc2ad641068acceea3e3de0658
BLAKE2b-256 checksum
How to use checksums
e6f167254b759e88d257e76ae435a0bbd9f72ae0bd3790d072f83618a453ede0
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_bolt-0.13.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl

Download URL django_bolt-0.13.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Size 5.7 MB
Tags CPython 3.12 Linux glibc 2.17+ ARM64 abi3
SHA-256 checksum
How to use checksums
e0a371e0188adb6b188ad50787e90d81d4af9046bb6de83df42b266b377e1723
BLAKE2b-256 checksum
How to use checksums
15a518f5a724e7421d0f1a108a0aad8b8d4d3a28259ab5966ae1591acaf5b0fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_bolt-0.13.0-cp312-abi3-macosx_11_0_arm64.whl

Download URL django_bolt-0.13.0-cp312-abi3-macosx_11_0_arm64.whl
Size 5.3 MB
Tags CPython 3.12 abi3 macOS 11.0+ ARM64
SHA-256 checksum
How to use checksums
884e918dd3cb90671e35293b2c8ceceb543afb7d3937fa275f8dd6a432197e6f
BLAKE2b-256 checksum
How to use checksums
41b14928755001e20ae84a7428e4b86a101312fa0fd295715f4435bd4cb0c7c2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Release files / django_bolt-0.13.0-cp312-abi3-macosx_10_12_x86_64.whl

Download URL django_bolt-0.13.0-cp312-abi3-macosx_10_12_x86_64.whl
Size 5.7 MB
Tags CPython 3.12 abi3 macOS 10.12+ x86-64
SHA-256 checksum
How to use checksums
c745579c2e878622d5693af908e4530d7c26483d1e197fcd92ae6b6a2582431b
BLAKE2b-256 checksum
How to use checksums
a74f2d16e6c96b2f2eb027526cc149ddf28f48d12404e9a491f91e8f0add4ed4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via uv/0.13.5 {"installer":{"name":"uv","version":"0.13.5","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

Security for django-bolt 0.13.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.13.0 This release

11 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page