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.11.0rc2.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.11.0rc2-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.11.0rc2-cp310-abi3-win_amd64.whl (2.5 MB view details)

Uploaded CPython 3.10+Windows x86-64

bustapi-0.11.0rc2-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.11.0rc2-cp310-abi3-musllinux_1_2_aarch64.whl (2.7 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ ARM64

bustapi-0.11.0rc2-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.11.0rc2-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.11.0rc2-cp310-abi3-macosx_11_0_arm64.whl (2.3 MB view details)

Uploaded CPython 3.10+macOS 11.0+ ARM64

bustapi-0.11.0rc2-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.11.0rc2.tar.gz.

File metadata

  • Download URL: bustapi-0.11.0rc2.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.11.0rc2.tar.gz
Algorithm Hash digest
SHA256 e211ff8864a6aadbbf243361a1400373afe08d356acc456bb996dda1250f6270
MD5 54fa47512acf186226f432e10c2fd08b
BLAKE2b-256 d75efdcdaa6e9a135d7307042b3a3450e644537d95a99bb3f16ecd7cf4c9e65f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bustapi-0.11.0rc2-pp311-pypy311_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f2279557a638de8100a3750a1bda909be296487e147a7fd4071eeded15b1d3f8
MD5 f0d111fdc89dd077fe7f24e2850671c1
BLAKE2b-256 2da637139d3e880f0e00c4de601a473f55cbf7d0d5ae080038cbc66ad9657367

See more details on using hashes here.

File details

Details for the file bustapi-0.11.0rc2-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: bustapi-0.11.0rc2-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.11.0rc2-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 4f6ab735ea45add746f7e59f271bc9b75ae860a92e2223b357faa9430ecacbeb
MD5 4e8340b10b0dba165e089772c81119ff
BLAKE2b-256 287fc8b96b9cf5b28284c883a7cf99170ad2b1f8a27a90934093e7c29a7f5794

See more details on using hashes here.

File details

Details for the file bustapi-0.11.0rc2-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

File hashes

Hashes for bustapi-0.11.0rc2-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 ebf05853115ef8ef8f5710d2156e511dcdd07538a6e168bd6402bdd68ea16c82
MD5 ef74ce97c38f2573e35fa508ea56afe2
BLAKE2b-256 39c1f4f07cc153dfd1dada9f29d8a5abba95f7ffc235a07b54f2400db941f492

See more details on using hashes here.

File details

Details for the file bustapi-0.11.0rc2-cp310-abi3-musllinux_1_2_aarch64.whl.

File metadata

File hashes

Hashes for bustapi-0.11.0rc2-cp310-abi3-musllinux_1_2_aarch64.whl
Algorithm Hash digest
SHA256 bd27470f37802de17ed8cf79c4d01a5f013c757a965c75f2e396cfa103ba832e
MD5 f5e0d7eef0292c96b970e12412a251bb
BLAKE2b-256 63bda2ff6fd28417621dd8f872dd488d5d3b169ed5ff371aba0cef79c5a61ec7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bustapi-0.11.0rc2-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f29da7323af8b1930f016ed6b1db1c38371b080b4a8872bd85b53998f555d2d2
MD5 3c9111d6cd612de558cebf746150e21d
BLAKE2b-256 fe3c98c6b473affea90eb49fd77f762eb80ec7877fd6c45e2b8cf8b6f906c432

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for bustapi-0.11.0rc2-cp310-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 1b3e5b9174f7a2bfc39a05b96fbca9138199b9c3ed87947e8a3f417f97759664
MD5 6f9ebff3f1cbf21f7b90ce9a33d65395
BLAKE2b-256 17ecb4524b5c6a59d3d8d44f07b817db908db552dcc8c67948d0e119ac94e82b

See more details on using hashes here.

File details

Details for the file bustapi-0.11.0rc2-cp310-abi3-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for bustapi-0.11.0rc2-cp310-abi3-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 eb42fbaebe3c2f2008ab38635e2c78aecd2f8b27b34c100603e5f88a2e350c77
MD5 7124b6936ca9ce45c6c9511c8f46d331
BLAKE2b-256 586e41fcbae6c10ca679792d772cb91ad9d26ccd749218eb8d1f664ba8c65301

See more details on using hashes here.

File details

Details for the file bustapi-0.11.0rc2-cp310-abi3-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for bustapi-0.11.0rc2-cp310-abi3-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 44930af16773291954199654b947e47733b2a39588d3c40eac19cad3601c3497
MD5 b69045520edc778f6d20f3df9705084e
BLAKE2b-256 8e4c92cb6aed4334dba75f7f525450afa683a7a929d433835a9c57090ab3da01

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