This release is a pre-release and may not be stable for production use.
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.
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
- 📖 Documentation
- 💬 Discord
- 🐛 Issues
- 🎥 Video walkthrough by BugBytes
- 🤖 Ask DeepWiki · for AI assistants: llms.txt
- ❓ FAQ · Comparison vs Ninja / DRF / FastAPI / Litestar · How it works
💖 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.
Release files for django-bolt 0.12.0rc3
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| django_bolt-0.12.0rc3.tar.gz | 1.7 MB | Details |
Built distributions (wheels)
Total release size: 54.9 MB
Release files / django_bolt-0.12.0rc3.tar.gz
| Download URL | django_bolt-0.12.0rc3.tar.gz |
|---|---|
| Size | 1.7 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
e7ff8a75678aadd9aed2333483b48ad2402ac930a82aa48b56af08341eb3e5d5
|
|
BLAKE2b-256 checksum How to use checksums |
eea7e5af181cfda327c4a8e441c5e799a5e36c493afc21da1fb36f83a774078d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","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.12.0rc3-cp314-cp314t-win_amd64.whl
| Download URL | django_bolt-0.12.0rc3-cp314-cp314t-win_amd64.whl |
|---|---|
| Size | 5.1 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Windows x86-64 |
|
SHA-256 checksum How to use checksums |
17b2ca014c7b5aa3d651f1177d40aa76367ddcf0c71b81e6bd1129f68ddd9efc
|
|
BLAKE2b-256 checksum How to use checksums |
e790eff165f9306ac0064086eaa0ca284f36699da9b271ed92105f215745780b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","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.12.0rc3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | django_bolt-0.12.0rc3-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.8 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ x86-64 |
|
SHA-256 checksum How to use checksums |
48db65d0e29d5a8e6d032564a6e5fbb558cf754a8ab47d85c8896e1799b5dd2f
|
|
BLAKE2b-256 checksum How to use checksums |
66dee71e01b7b363133954170bc0068df81aef7d12c9ac34c73704758eb36ff3
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","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.12.0rc3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | django_bolt-0.12.0rc3-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 5.5 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading Linux glibc 2.17+ ARM64 |
|
SHA-256 checksum How to use checksums |
233aab54597d3ac85b6248975725de5c48518a379b2c1eb8ee0b1e94cfd48659
|
|
BLAKE2b-256 checksum How to use checksums |
656f86da7d869234cfe2ca51687e96516101c4d51188539a216889480a87f6ff
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","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.12.0rc3-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | django_bolt-0.12.0rc3-cp314-cp314t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 10.2 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8a52940253d318ca00cf2a78b431d508348b8994ecee3034902f8a7b49cbcd38
|
|
BLAKE2b-256 checksum How to use checksums |
f73b0b6f2fac5f81b07d658d85b307e5136611fb7a09c3be6d95440895b5f25c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","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.12.0rc3-cp312-abi3-win_amd64.whl
| Download URL | django_bolt-0.12.0rc3-cp312-abi3-win_amd64.whl |
|---|---|
| Size | 5.1 MB |
| Tags | CPython 3.12 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
e3f423d5a4a22216cba1bbcf35269774a42acc191bdc850c717080ca6fdfce48
|
|
BLAKE2b-256 checksum How to use checksums |
b6e4d9d504b7ef4522202d9df280957dbb19311a4acae5181c5c7b3e8a98965c
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","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.12.0rc3-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | django_bolt-0.12.0rc3-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl |
|---|---|
| Size | 5.8 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
9ef7a8e395422d052bdf49df31dc69a73ae4d1c714b48dcc75926a4b71c94412
|
|
BLAKE2b-256 checksum How to use checksums |
52c535f34ba373ac75c45d0f13d2c087f1059a6c07d9bcab432fb55b0d9df247
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","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.12.0rc3-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | django_bolt-0.12.0rc3-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl |
|---|---|
| Size | 5.5 MB |
| Tags | CPython 3.12 Linux glibc 2.17+ ARM64 abi3 |
|
SHA-256 checksum How to use checksums |
e2fb33a12f7828b0bb64e78d21891619e7e847b857a3b3e91613969e30224ebe
|
|
BLAKE2b-256 checksum How to use checksums |
146bcceb564673c378fd79080685a69456eaa13539eabc1015c032845bf4359b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","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.12.0rc3-cp312-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
| Download URL | django_bolt-0.12.0rc3-cp312-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl |
|---|---|
| Size | 10.2 MB |
| Tags | CPython 3.12 abi3 macOS 10.12+ universal2 (ARM64, x86-64) macOS 10.12+ x86-64 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
ba76d0a8ba4eb5de6e6aefbd3b46690f485eb6e9b0ef445e8d524ef5396b063e
|
|
BLAKE2b-256 checksum How to use checksums |
d15b6bee8b3fdf2df743eb197f3faad5de0abab78e79f3636c47f8c9c1e33513
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.12.17 {"installer":{"name":"uv","version":"0.12.17","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}
|