Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

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.15.0rc1.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.15.0rc1-cp310-abi3-win_amd64.whl (3.7 MB view details)

Uploaded CPython 3.10+Windows x86-64

bustapi-0.15.0rc1-cp310-abi3-musllinux_1_2_x86_64.whl (4.0 MB view details)

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

bustapi-0.15.0rc1-cp310-abi3-musllinux_1_2_aarch64.whl (3.7 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

bustapi-0.15.0rc1-cp310-abi3-manylinux_2_28_x86_64.whl (3.8 MB view details)

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

bustapi-0.15.0rc1-cp310-abi3-manylinux_2_28_aarch64.whl (3.5 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ ARM64

bustapi-0.15.0rc1-cp310-abi3-macosx_11_0_arm64.whl (3.3 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

bustapi-0.15.0rc1-cp310-abi3-macosx_10_12_x86_64.whl (3.6 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

File details

Details for the file bustapi-0.15.0rc1.tar.gz.

File metadata

  • Download URL: bustapi-0.15.0rc1.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.15.0rc1.tar.gz
Algorithm Hash digest
SHA256 e03a500d8e58e7c38c384173e4c1aa34a9edafcf40f6f02e703553e318a72ae0
MD5 e4c953d7c1bbf950beeeb225b1e7ad8a
BLAKE2b-256 482532a473b8e80f8cf38c43a77c689af45e0c7e7c3f0bbe71584172abe27691

See more details on using hashes here.

File details

Details for the file bustapi-0.15.0rc1-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: bustapi-0.15.0rc1-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 3.7 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.15.0rc1-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 7851399bfdc2f064e37100fdaa8cc287f13b6fc7752a632b16e27af48404fff1
MD5 a0cff7f5018d2cbe1f30e11740c64829
BLAKE2b-256 48258b57fafb1d274da5de9332acb7c376734d3d3dedaa15cfbd402e02900ec6

See more details on using hashes here.

File details

Details for the file bustapi-0.15.0rc1-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bustapi-0.15.0rc1-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 4d90781c69dfe18f68dfe00dc716e9b1ffa65825205b08552563fac62865d1e3
MD5 9c43d24332065e920b10d67978488992
BLAKE2b-256 0cbbbca2fe6a2903561c15bc395ca7ae8ddd553d94151527db4c85d87d2ee899

See more details on using hashes here.

File details

Details for the file bustapi-0.15.0rc1-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for bustapi-0.15.0rc1-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 737ad87fe9e55af6f5f6a62b2c47015e7aefe0e8ac63cb9aad43902d30009437
MD5 7d0480bbe879b42027462c17357a0cd4
BLAKE2b-256 b682d824b02b9e6594acc59fb773092a8a9cd17cb3fe12129ae5462f02e7b987

See more details on using hashes here.

File details

Details for the file bustapi-0.15.0rc1-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for bustapi-0.15.0rc1-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3ca08634604385483c3fac8c451eed0b2e30d54f498c738af8a3cc3e2b3d5507
MD5 bfea587969936f5adf106b6de407dde2
BLAKE2b-256 09c312d463c36422e70168f42d41b462d379083638959599d2bb8f58e46e715b

See more details on using hashes here.

File details

Details for the file bustapi-0.15.0rc1-cp310-abi3-manylinux_2_28_aarch64.whl.

File metadata

File hashes

Hashes for bustapi-0.15.0rc1-cp310-abi3-manylinux_2_28_aarch64.whl
Algorithm Hash digest
SHA256 15f4b5c3cb6f4a389cbfbbcb21a9e2f29d253fecfd0ac826c986d5e0473a97ac
MD5 0e3d759d75a2c8ee87107538cfe5fc6f
BLAKE2b-256 8aa21b7acad05fc8c79904c44170f5724eeb06b9aa676afc56eea5ad009f382e

See more details on using hashes here.

File details

Details for the file bustapi-0.15.0rc1-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bustapi-0.15.0rc1-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 59e8e377f72820ef257cb9b3a496ffa736aa654c96076da7120fa69a48d71777
MD5 7519070526eb5c0c10b4faef77c1a65f
BLAKE2b-256 631bd2a3bae323a08cfa42f910370cd11be37d0ce46e1293ddb57acc7085df5d

See more details on using hashes here.

File details

Details for the file bustapi-0.15.0rc1-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for bustapi-0.15.0rc1-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 e69cdafe08495eba15b2773c144424b976eff27f35b4b59d3c03e9d030f4bd2f
MD5 ad49bb2d0160aab03988acc693180486
BLAKE2b-256 44302a738cf891d799f6d10ec151bdcda5bd6255ba4595559edb70586de895a4

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