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.
Metadata
Release files for django-bolt 0.12.0
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.0.tar.gz | 2.0 MB | Details |
Built distributions (wheels)
Total release size: 56.4 MB
Release files / django_bolt-0.12.0.tar.gz
| Download URL | django_bolt-0.12.0.tar.gz |
|---|---|
| Size | 2.0 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
8364693b41a51edc2d31f7d79be07dc31e22f68c9c9d2b15ea4525242fb7a0f7
|
|
BLAKE2b-256 checksum How to use checksums |
9d6a6b186ce90c2a84ad49ee53749a34e2b75d70a614d7fa20afcf4f4d91d56f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","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.0-cp314-cp314t-win_amd64.whl
| Download URL | django_bolt-0.12.0-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 |
cb8893542144861ee81313d751c5af7a68416ad6ee3c0a3cb0e501c652592154
|
|
BLAKE2b-256 checksum How to use checksums |
22fe4e50e55ad245b723776f63f5e4d7d2c724c0a8a4a3173250908dfb709013
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","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.0-cp314-cp314t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | django_bolt-0.12.0-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 |
dbe255fa7fd4fdb00295ff53fb8be3f670c74ad1e647d9244f35f64d0bda5658
|
|
BLAKE2b-256 checksum How to use checksums |
ee2c273219993352338912b2faf4613516d2e44306805becd7b5a9ca43a23f40
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","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.0-cp314-cp314t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | django_bolt-0.12.0-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 |
aa8901242ddba004e648780c56ad7f2492288025f5f68dc1c733680e4c261a34
|
|
BLAKE2b-256 checksum How to use checksums |
db2b99b6a816e1d634d8dd189b65a303622c432346981897795889f52a40bd4a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","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.0-cp314-cp314t-macosx_11_0_arm64.whl
| Download URL | django_bolt-0.12.0-cp314-cp314t-macosx_11_0_arm64.whl |
|---|---|
| Size | 5.2 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
8add78684836f612b8ee18ba6b68d54ab6b51badcecd94b165bdff25274f9721
|
|
BLAKE2b-256 checksum How to use checksums |
cfd5517e4f3751f82ca1a4d28c95d47a3573a0b24f7dacf9f4a549949b0ede0e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","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.0-cp314-cp314t-macosx_10_12_x86_64.whl
| Download URL | django_bolt-0.12.0-cp314-cp314t-macosx_10_12_x86_64.whl |
|---|---|
| Size | 5.6 MB |
| Tags | CPython 3.14 CPython 3.14 free-threading macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
190a4149488a4b8cd5cbb6b5f213658292c4847790bb24ed4451a433b183ea24
|
|
BLAKE2b-256 checksum How to use checksums |
ba155d6cd94bf2b16f546f5b0e838f579aa9cffab84d524ab7e44c052f425e38
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","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.0-cp312-abi3-win_amd64.whl
| Download URL | django_bolt-0.12.0-cp312-abi3-win_amd64.whl |
|---|---|
| Size | 5.1 MB |
| Tags | CPython 3.12 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
4b690ef42226b81ceee840133f1f946dcc17e2a1232121dc5af85ace2c867873
|
|
BLAKE2b-256 checksum How to use checksums |
f3f49b54c969bed883a5c801915719af5647d628ba6a677cc7ccfafd193ede9b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","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.0-cp312-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
| Download URL | django_bolt-0.12.0-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 |
18747c7f5e31c5951e919b30f2b7f2da43f84d07a80d1249aa99a9ccb6de7c69
|
|
BLAKE2b-256 checksum How to use checksums |
21b4116fe0d58fabca3d6091d1ffd4451f97f31df9755bb55fd1f0de4a6e148d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","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.0-cp312-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
| Download URL | django_bolt-0.12.0-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 |
dc77c91c8a036e5e7729be84085eaade4da66d7517c9d66da69b6dc2211044a0
|
|
BLAKE2b-256 checksum How to use checksums |
be12b6cd45828e76807db2bbd4334bcb0320c2236a7ee5619cf52d0d335a37ce
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","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.0-cp312-abi3-macosx_11_0_arm64.whl
| Download URL | django_bolt-0.12.0-cp312-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 5.2 MB |
| Tags | CPython 3.12 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
c02c31250e963edb9afd44c14d2401ddc7cd69aee265b6a26a692e18e372925b
|
|
BLAKE2b-256 checksum How to use checksums |
0f475f3f2444ac1a2d3894b445b95b47ac3d31dd74f6b296223bb304834ba263
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","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.0-cp312-abi3-macosx_10_12_x86_64.whl
| Download URL | django_bolt-0.12.0-cp312-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 5.6 MB |
| Tags | CPython 3.12 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
561b3f7e5f1b26f51a3819c61bcdcb868299b173fdbbdb7c54fdf24725ac97ea
|
|
BLAKE2b-256 checksum How to use checksums |
45cc6ca744622431a42173731c6c35a60638ebb34892a0c19206f452f32ed7b9
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","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}
|