High-performance Python web framework with Rust backend
Project description
BustAPI — High-Performance Python Web Framework
The fastest Python web framework for building REST APIs
Flask-like syntax • Rust-powered performance • Up to 20,000+ requests/sec
⚡ What is BustAPI?
BustAPI is a production-ready Python web framework that combines the best of both worlds: Python's simplicity and Rust's raw performance.
Under the hood, BustAPI runs on Actix-Web — consistently ranked among the fastest web frameworks across all programming languages. But you never touch Rust. You write clean, familiar Python code with Flask-style decorators.
Why BustAPI?
| Problem | BustAPI Solution |
|---|---|
| Python web frameworks are slow | Rust core handles HTTP, JSON, routing |
| ASGI/WSGI adds overhead | Built-in server, no middleware layers |
| Scaling requires complex setup | Native multiprocessing with SO_REUSEPORT |
| Auth is always a pain | JWT, sessions, Argon2 hashing built-in |
Key Highlights
- 🚀 20,000+ RPS out of the box — 5x faster than Flask
- 🦀 Rust-powered — Zero-copy JSON, mimalloc allocator, Actix-Web
- 🐍 Pure Python API — No Rust knowledge required
- 🔒 Security built-in — JWT, sessions, CSRF, rate limiting
- 📦 Zero config —
pip install bustapiand you're ready - 🔥 Hot reload — Rust-native file watcher for instant restarts
from bustapi import BustAPI
app = BustAPI()
@app.route("/")
def hello():
return {"message": "Hello, world!"}
if __name__ == "__main__":
app.run()
No ASGI servers needed. No complex configuration. Just run your file.
🏗️ Architecture
┌─────────────────────────────────────────────────────────────┐
│ Your Python Code │
│ (Flask-like decorators & handlers) │
├─────────────────────────────────────────────────────────────┤
│ PyO3 Bindings (v0.27) │
│ (Zero-cost Python ↔ Rust bridge) │
├─────────────────────────────────────────────────────────────┤
│ Rust Core (bustapi_core) │
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────────┐│
│ │ Actix-Web │ │ serde_json │ │ mimalloc allocator ││
│ │ HTTP Server │ │ Zero-copy │ │ Optimized memory ││
│ └─────────────┘ └─────────────┘ └─────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
| Component | Technology | Purpose |
|---|---|---|
| HTTP Server | Actix-Web 4.x | Ultra-fast async HTTP handling |
| Serialization | serde_json | Zero-copy JSON encoding |
| Memory | mimalloc | High-performance allocator |
| Bindings | PyO3 0.27 | Python 3.10–3.14 support |
| Async Runtime | Tokio | Non-blocking I/O |
📦 Installation
pip install bustapi
Supports: Python 3.10 – 3.14 | Linux, macOS, Windows | x86_64 & ARM64
Pre-built wheels available — no Rust toolchain required!
✨ Features
🛣️ Routing
- Dynamic Routes —
/users/<int:id>with automatic type validation - Blueprints — Modular app organization (Flask-style)
- Turbo Routes — Zero-overhead handlers for maximum speed
- Wildcard Paths —
<path:filepath>for catch-all routes
🔐 Authentication & Security
- JWT — Create/validate tokens (HS256, HS384, HS512)
- Sessions — Flask-Login compatible user management
- Password Hashing — Argon2id (OWASP recommended)
- CSRF Protection — Built-in token validation
- Rate Limiting — Rust-powered request throttling
🌐 HTTP Features
- WebSocket — Full duplex communication + Turbo mode
- Streaming — HTTP Range requests, video seeking
- File Uploads — Multipart form handling
- Static Files — Efficient serving with caching
🛠️ Developer Experience
- Hot Reload — Rust-native file watcher (instant restarts)
- Templates — Built-in Jinja2 via MiniJinja
- CLI Tool —
bustapi new,bustapi run,bustapi routes - Auto-docs — OpenAPI/Swagger generation
- Testing — Built-in
TestClientfor unit tests
🔌 Compatibility
- ASGI/WSGI — Works with Uvicorn, Gunicorn, Hypercorn
- FastAPI-style —
Query(),Path(),Body(),Depends() - Flask-style —
request,session,g,current_app
🚀 Quick Start
1. Create app.py:
from bustapi import BustAPI, jsonify
app = BustAPI()
@app.route("/")
def home():
return {"status": "running", "framework": "BustAPI"}
@app.route("/users/<int:user_id>")
def get_user(user_id):
return jsonify({"id": user_id, "name": "Alice"})
@app.route("/greet", methods=["POST"])
def greet():
from bustapi import request
data = request.json
return {"message": f"Hello, {data.get('name', 'World')}!"}
if __name__ == "__main__":
app.run(debug=True) # Hot reload enabled
2. Run it:
python app.py
3. Visit http://127.0.0.1:5000
⚡ Turbo Routes
For maximum performance, use @app.turbo_route(). Path parameters are parsed entirely in Rust:
# Zero-overhead static route
@app.turbo_route("/health")
def health():
return {"status": "ok"}
# Dynamic route with typed params (parsed in Rust)
@app.turbo_route("/users/<int:id>")
def get_user(id: int):
return {"id": id, "name": f"User {id}"}
# Cached response (140k+ RPS!)
@app.turbo_route("/config", cache_ttl=60)
def get_config():
return {"version": "1.0", "env": "production"}
Supported types: int, float, str, path
⚠️ Note: Turbo routes skip middleware, sessions, and request context for speed. Use
@app.route()when you need those features.
📊 Benchmarks
Standard Routes (@app.route())
| Platform | RPS | Mode |
|---|---|---|
| Linux | ~25,000 | Single-process |
| macOS | ~20,000 | Single-process |
| Windows | ~17,000 | Single-process |
Turbo Routes (@app.turbo_route()) — Linux
| Configuration | RPS |
|---|---|
| Static route | ~30,000 (single) |
| Multiprocessing (4 workers) | ~105,000 |
| Cached (60s TTL) | ~140,000 |
Framework Comparison (Turbo + Multiprocessing)
🌍 Platform Support
🐧 Linux (Recommended for Production)
Linux delivers the best performance with native multiprocessing:
- ~25k RPS standard routes, 100k+ RPS with Turbo + multiprocessing
- Kernel-level load balancing via
SO_REUSEPORT - Automatic worker scaling to CPU cores
python app.py # Automatically uses multiprocessing
🍎 macOS (Development)
Fully supported for development. Single-process mode (~35k RPS):
pip install bustapi && python app.py
🪟 Windows (Development)
Fully supported for development. Single-process mode (~17k RPS):
pip install bustapi && python app.py
💡 Tip: For production, deploy on Linux servers to unlock multiprocessing performance.
🔐 Authentication
JWT Tokens
from bustapi import BustAPI
from bustapi.jwt import JWT
app = BustAPI()
jwt = JWT(app, secret_key="your-secret-key")
@app.route("/login", methods=["POST"])
def login():
# Validate credentials...
token = jwt.create_access_token(identity=user_id)
return {"access_token": token}
@app.route("/protected")
@jwt.jwt_required()
def protected():
return {"user": jwt.get_jwt_identity()}
Session Login
from bustapi.auth import LoginManager, login_user, current_user, login_required
login_manager = LoginManager(app)
@login_manager.user_loader
def load_user(user_id):
return User.get(user_id)
@app.route("/login", methods=["POST"])
def login():
user = authenticate(request.form)
login_user(user)
return redirect("/dashboard")
@app.route("/dashboard")
@login_required
def dashboard():
return f"Welcome, {current_user.name}!"
Password Hashing
from bustapi.auth import hash_password, verify_password
# Hash (Argon2id)
hashed = hash_password("mysecretpassword")
# Verify
if verify_password("mysecretpassword", hashed):
print("Password correct!")
🌐 WebSocket
@app.websocket("/ws")
async def websocket_handler(ws):
await ws.accept()
while True:
message = await ws.receive_text()
await ws.send_text(f"Echo: {message}")
Turbo WebSocket (Pure Rust, ~74% faster):
@app.turbo_websocket("/ws/turbo")
def turbo_handler(message: str) -> str:
return f"Echo: {message}" # Processed entirely in Rust
🧪 Testing
from bustapi.testing import TestClient
def test_homepage():
client = TestClient(app)
response = client.get("/")
assert response.status_code == 200
assert response.json() == {"status": "running"}
def test_create_user():
response = client.post("/users", json={"name": "Alice"})
assert response.status_code == 201
📁 Project Structure
bustapi/
├── src/ # Rust core
│ ├── lib.rs # PyO3 module entry
│ ├── bindings/ # Python ↔ Rust bridge
│ ├── router/ # URL matching engine
│ ├── server/ # Actix-Web handlers
│ ├── websocket/ # WS session management
│ ├── jwt.rs # Token encoding/decoding
│ └── crypto.rs # Argon2, CSRF, tokens
│
├── python/bustapi/ # Python package
│ ├── app.py # BustAPI main class
│ ├── auth/ # JWT, sessions, CSRF
│ ├── routing/ # Blueprints, decorators
│ ├── params.py # Query/Path/Body validators
│ └── websocket.py # WebSocket API
│
├── examples/ # 30+ usage examples
├── tests/ # Comprehensive test suite
├── docs/ # MkDocs documentation
└── benchmarks/ # Performance tools
🛠️ CLI Tool
# Create new project
bustapi new myproject
# Run with hot reload
bustapi run
# List all routes
bustapi routes
# Show system info
bustapi info
🚢 Deployment
Built-in Server (Recommended)
python app.py
Uses the internal Rust HTTP server. Best performance, zero dependencies.
With ASGI (Uvicorn)
pip install uvicorn
uvicorn app:app.asgi_app --host 0.0.0.0 --port 8000
With Docker
FROM python:3.12-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
EXPOSE 5000
CMD ["python", "app.py"]
📖 Documentation
🤝 Contributing
We welcome contributions! Here's how:
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing) - Commit your changes (
git commit -m 'Add amazing feature') - Push to the branch (
git push origin feature/amazing) - Open a Pull Request
Found a bug? Have a feature request?
💰 Support
If BustAPI helps your project, consider supporting its development:
Binance ID: 1010167458
🌠 Star History
📄 License
Built with 🦀 Rust + 🐍 Python
Fast. Simple. Production-ready.
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
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file bustapi-0.10.3.tar.gz.
File metadata
- Download URL: bustapi-0.10.3.tar.gz
- Upload date:
- Size: 1.2 MB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7ea6962e06cd51375f36b8113b841f0f947e526b5c56f449d2542a7bc8940e4b
|
|
| MD5 |
b58cb267f207d1d69ea242f668a89953
|
|
| BLAKE2b-256 |
872c460f4eeae8a5ad91e1136d8c33e327e7c9e7aea0b6998052df36fed2df80
|
File details
Details for the file bustapi-0.10.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: bustapi-0.10.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.7 MB
- Tags: PyPy, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f7f0749b3f9471029b6e632410898952aae69ec29b0ba629e167981178dbefdb
|
|
| MD5 |
db3dd366c873a5cc6efad5c203c94510
|
|
| BLAKE2b-256 |
22b0e3e3c581e9d01b52420becc2431901557d04ea612a62646accbc9355cacd
|
File details
Details for the file bustapi-0.10.3-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: bustapi-0.10.3-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
a1128cdb28f0c8ec149088088e6a16d954c6943c2f4a6ffa267221c2baf01933
|
|
| MD5 |
69d18917c1e7e0b798cea4f78fb8e282
|
|
| BLAKE2b-256 |
3ed949a2e8615e7f380a5e905c3d6ef6d0a3ec5ccd3014942367352f41d77c76
|
File details
Details for the file bustapi-0.10.3-cp310-abi3-musllinux_1_2_x86_64.whl.
File metadata
- Download URL: bustapi-0.10.3-cp310-abi3-musllinux_1_2_x86_64.whl
- Upload date:
- Size: 3.0 MB
- Tags: CPython 3.10+, musllinux: musl 1.2+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
72be45221267bb664927d3c478b58383111be3970a49d5ee29c493a5cde0c0ba
|
|
| MD5 |
59cd7cf5adfd33fd8ccf92eff63ffcc7
|
|
| BLAKE2b-256 |
61c0002bddf8ecb075286e6b5509155bd72f6508a676ddebbcddac77ff6e8976
|
File details
Details for the file bustapi-0.10.3-cp310-abi3-musllinux_1_2_aarch64.whl.
File metadata
- Download URL: bustapi-0.10.3-cp310-abi3-musllinux_1_2_aarch64.whl
- Upload date:
- Size: 2.7 MB
- Tags: CPython 3.10+, musllinux: musl 1.2+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8051b5183c1e478184f50856ea77993040af80d4d983c4d7b97107d1f92b006b
|
|
| MD5 |
3ee11836d99583db33aa0b83410afb15
|
|
| BLAKE2b-256 |
fddb85a837e1b0d105d9d06f9029341ca8ac0af14c1741cbef7a7f5ca2617410
|
File details
Details for the file bustapi-0.10.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: bustapi-0.10.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 2.7 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
47eb09661633f54d4f5aca617b6b38a74504375afce85710d8fb945bd160e5c5
|
|
| MD5 |
63645965c998195fef213d5b03d35741
|
|
| BLAKE2b-256 |
c55afd63fef769c2d7215eda317ba5b70e6bd676f707aacc90d46257466c575e
|
File details
Details for the file bustapi-0.10.3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: bustapi-0.10.3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 2.5 MB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
b3564e6de2ce8fcbb8954bcbde3abfb8c4ef441ee1570716bfb6b00f0ec8d10f
|
|
| MD5 |
42d139d06e26ce3cebe1e8197598315a
|
|
| BLAKE2b-256 |
4460d74433c033db7130e786b036b33ae9942bd72e3df85523b215fde8d3e4e6
|
File details
Details for the file bustapi-0.10.3-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: bustapi-0.10.3-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 2.3 MB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
7f76725b4a31ed454f1214bbc170ca9bcbf954e950526b94a8ec8ff89f69ab64
|
|
| MD5 |
940557f1ed2efaaa10b35e73eff5f347
|
|
| BLAKE2b-256 |
42baea94f0cc3e8bf525f6c8b4116ee1ee3ad4349a740f965c8b28d3dc321127
|
File details
Details for the file bustapi-0.10.3-cp310-abi3-macosx_10_12_x86_64.whl.
File metadata
- Download URL: bustapi-0.10.3-cp310-abi3-macosx_10_12_x86_64.whl
- Upload date:
- Size: 2.6 MB
- Tags: CPython 3.10+, macOS 10.12+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
76b426453fea8ef4a0bc76297e1b3da918fdd4157b2600017da100fbb49ec9e7
|
|
| MD5 |
c1416aa0151173448172ea1f6f47d7e1
|
|
| BLAKE2b-256 |
aded695ed228098ecc6eeb9837b741a431ee62c740028b11e201c25b28be1a8f
|