Skip to main content

BustAPI — High-Performance Python Web Framework

BustAPI - Fast Python Web Framework powered by Rust and Actix-Web

The fastest Python web framework for building REST APIs
Flask-like syntax • Rust-powered performance • Up to 20,000+ requests/sec

BustAPI on PyPI CI Status Python 3.10 3.11 3.12 3.13 3.14 MIT License


⚡ 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
  • 🛡️ Robust Header System — Case-insensitive, multi-value support, high-performance cookie parsing
  • 📦 Zero configpip install bustapi and 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 Toolbustapi new, bustapi run, bustapi routes
  • Auto-docs — OpenAPI/Swagger generation
  • Testing — Built-in TestClient for unit tests

🔌 Compatibility

  • ASGI/WSGI — Works with Uvicorn, Gunicorn, Hypercorn
  • FastAPI-styleQuery(), Path(), Body(), Depends()
  • Flask-stylerequest, 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)

BustAPI vs Other Frameworks


🌍 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

📚 Full Documentation


🤝 Contributing

We welcome contributions! Here's how:

  1. Fork the repository
  2. Create a feature branch (git checkout -b feature/amazing)
  3. Commit your changes (git commit -m 'Add amazing feature')
  4. Push to the branch (git push origin feature/amazing)
  5. 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

Star History Chart


📄 License

MIT © 2025-2026 GrandpaEJ


Built with 🦀 Rust + 🐍 Python
Fast. Simple. Production-ready.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

bustapi-0.14.4.tar.gz (1.2 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

bustapi-0.14.4-cp310-abi3-win_amd64.whl (3.0 MB view details)

Uploaded CPython 3.10+Windows x86-64

bustapi-0.14.4-cp310-abi3-musllinux_1_2_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

bustapi-0.14.4-cp310-abi3-musllinux_1_2_aarch64.whl (3.3 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

bustapi-0.14.4-cp310-abi3-manylinux_2_28_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

bustapi-0.14.4-cp310-abi3-manylinux_2_28_aarch64.whl (3.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

bustapi-0.14.4-cp310-abi3-macosx_11_0_arm64.whl (2.8 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

bustapi-0.14.4-cp310-abi3-macosx_10_12_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file bustapi-0.14.4.tar.gz.

File metadata

  • Download URL: bustapi-0.14.4.tar.gz
  • Upload date:
  • Size: 1.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for bustapi-0.14.4.tar.gz
Algorithm Hash digest
SHA256 8fc6b6a40e1483f9ee28bb4378a0dd1499ce795f9cd6e21c44adfcd7e8585d64
MD5 3dcdb8a6828b759f7c2bd1e581d4c370
BLAKE2b-256 d18e2c4a1fe840129536e7558a9e05554a45879f91fc2cbddce95a086d1a21d8

See more details on using hashes here.

File details

Details for the file bustapi-0.14.4-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: bustapi-0.14.4-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 3.0 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.14

File hashes

Hashes for bustapi-0.14.4-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 f4cf7098fd49f09fc4bb654fe5a36f5103b7c459ceb85ddd53a0b8279a4779a7
MD5 aa67ecebb499ac313d7ddb32ac0ffe3f
BLAKE2b-256 c5dceab2f50d434255b49345a0fc4793eb3a6c55f4b8efb4fcb2c13cf724a9dc

See more details on using hashes here.

File details

Details for the file bustapi-0.14.4-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bustapi-0.14.4-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ee293e78df45e1de03f54791fa91e1edbab444d938796fdce7ce90fd0ed5eb6e
MD5 d13739689d2a24227b34aa1b734f8851
BLAKE2b-256 ae518c844a036875faa06594f0b04177512402cc2a10c2d0f3765382563be299

See more details on using hashes here.

File details

Details for the file bustapi-0.14.4-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for bustapi-0.14.4-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 894ea38fbf624e858df00895513fd1cbe8f16587e7108a07eec6558db8b2c9a4
MD5 dbc4ce63c7657cbc2bacceaf386966a5
BLAKE2b-256 9cd363753b07029744f4a779e1e5bc250684ef96fd064c44acc49fbd0e53b314

See more details on using hashes here.

File details

Details for the file bustapi-0.14.4-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bustapi-0.14.4-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3622fca8a1f205c0801ac4b5afb86a58a9f88fe281cd2d0be168068ba9e53244
MD5 6d27c50ea61640fa5ca7abcdb68386ec
BLAKE2b-256 a9fc0e613778c592adc3774a45257afab29ea4f5bf5b2ce4b4cae0e9350a1b93

See more details on using hashes here.

File details

Details for the file bustapi-0.14.4-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for bustapi-0.14.4-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 e9699e03ab09aef6fea3dac94c6477875eaa3d9eb1013dbfe2d39e51d2f9d53f
MD5 39ef3dac9d3d003eb481019939db876d
BLAKE2b-256 33ecd558da6fb2f130099c2232e1425738812915e3c3e1599391cec0668a33b5

See more details on using hashes here.

File details

Details for the file bustapi-0.14.4-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bustapi-0.14.4-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0c9e3406d705c1c35225fb8775a87ba9a80ab3ad4bc0a37d1a342603332bb0a3
MD5 edd016c7867ce67523178cb619c77289
BLAKE2b-256 59c8dfd10b9a79e2adace0e0b1933d1ae6f3d815e169b825ce7384778e36791e

See more details on using hashes here.

File details

Details for the file bustapi-0.14.4-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for bustapi-0.14.4-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 7e8b678fba80165c8c09167aaa12ec054ee4aa172d38ca0aadc3d0d39462f142
MD5 7158e5eba4d2fc6a872f565d670dac7f
BLAKE2b-256 07e49ffee7e02c7bbe0ced6aa7873ecac571c5b9de91862624d9ef7d5fe78cd1

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page