Skip to content

GrandpaEJ/BustAPI

Repository files navigation

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 config β€” pip 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 Tool β€” bustapi 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-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)

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.