Skip to main content

High-performance Python web framework with Rust backend

Project description

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
  • 📦 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.

Project details


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.10.3.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.10.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB view details)

Uploaded PyPymanylinux: glibc 2.17+ x86-64

bustapi-0.10.3-cp310-abi3-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.10+Windows x86-64

bustapi-0.10.3-cp310-abi3-musllinux_1_2_x86_64.whl (3.0 MB view details)

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

bustapi-0.10.3-cp310-abi3-musllinux_1_2_aarch64.whl (2.7 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

bustapi-0.10.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (2.7 MB view details)

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

bustapi-0.10.3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.5 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.17+ ARM64

bustapi-0.10.3-cp310-abi3-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

bustapi-0.10.3-cp310-abi3-macosx_10_12_x86_64.whl (2.6 MB view details)

Uploaded CPython 3.10+macOS 10.12+ x86-64

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

Hashes for bustapi-0.10.3.tar.gz
Algorithm Hash digest
SHA256 7ea6962e06cd51375f36b8113b841f0f947e526b5c56f449d2542a7bc8940e4b
MD5 b58cb267f207d1d69ea242f668a89953
BLAKE2b-256 872c460f4eeae8a5ad91e1136d8c33e327e7c9e7aea0b6998052df36fed2df80

See more details on using hashes here.

File details

Details for the file bustapi-0.10.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for bustapi-0.10.3-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f7f0749b3f9471029b6e632410898952aae69ec29b0ba629e167981178dbefdb
MD5 db3dd366c873a5cc6efad5c203c94510
BLAKE2b-256 22b0e3e3c581e9d01b52420becc2431901557d04ea612a62646accbc9355cacd

See more details on using hashes here.

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

Hashes for bustapi-0.10.3-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 a1128cdb28f0c8ec149088088e6a16d954c6943c2f4a6ffa267221c2baf01933
MD5 69d18917c1e7e0b798cea4f78fb8e282
BLAKE2b-256 3ed949a2e8615e7f380a5e905c3d6ef6d0a3ec5ccd3014942367352f41d77c76

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bustapi-0.10.3-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 72be45221267bb664927d3c478b58383111be3970a49d5ee29c493a5cde0c0ba
MD5 59cd7cf5adfd33fd8ccf92eff63ffcc7
BLAKE2b-256 61c0002bddf8ecb075286e6b5509155bd72f6508a676ddebbcddac77ff6e8976

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bustapi-0.10.3-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 8051b5183c1e478184f50856ea77993040af80d4d983c4d7b97107d1f92b006b
MD5 3ee11836d99583db33aa0b83410afb15
BLAKE2b-256 fddb85a837e1b0d105d9d06f9029341ca8ac0af14c1741cbef7a7f5ca2617410

See more details on using hashes here.

File details

Details for the file bustapi-0.10.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for bustapi-0.10.3-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 47eb09661633f54d4f5aca617b6b38a74504375afce85710d8fb945bd160e5c5
MD5 63645965c998195fef213d5b03d35741
BLAKE2b-256 c55afd63fef769c2d7215eda317ba5b70e6bd676f707aacc90d46257466c575e

See more details on using hashes here.

File details

Details for the file bustapi-0.10.3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for bustapi-0.10.3-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 b3564e6de2ce8fcbb8954bcbde3abfb8c4ef441ee1570716bfb6b00f0ec8d10f
MD5 42d139d06e26ce3cebe1e8197598315a
BLAKE2b-256 4460d74433c033db7130e786b036b33ae9942bd72e3df85523b215fde8d3e4e6

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bustapi-0.10.3-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7f76725b4a31ed454f1214bbc170ca9bcbf954e950526b94a8ec8ff89f69ab64
MD5 940557f1ed2efaaa10b35e73eff5f347
BLAKE2b-256 42baea94f0cc3e8bf525f6c8b4116ee1ee3ad4349a740f965c8b28d3dc321127

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bustapi-0.10.3-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 76b426453fea8ef4a0bc76297e1b3da918fdd4157b2600017da100fbb49ec9e7
MD5 c1416aa0151173448172ea1f6f47d7e1
BLAKE2b-256 aded695ed228098ecc6eeb9837b741a431ee62c740028b11e201c25b28be1a8f

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 Pingdom Monitoring Sentry Error logging StatusPage Status page