This release is a pre-release and may not be stable for production use.
RustAPI
FastAPI-style Python Web Framework backed by a Rust (Tokio / Hyper) Engine — with embedded Rust Database Streaming, JWT & Argon2 Primitives, Tier 3 Rust-Native Routes, and a built-in MCP Server.
📦 Key Open-Source Features Included
| Feature Area | Implementation Details |
|---|---|
| FastAPI Compatibility | FastAPI & Request aliases, status codes, declared status_code (e.g. 201, 204), async/sync response_model with response_model_exclude/include, structured 422 validation error handling, FastAPI(lifespan=...) ASGI context managers, Depends(..., scope="function"), EventSourceResponse (SSE), jsonable_encoder, Query/Body/Path/Form/File, OAuth2PasswordBearer, HTTPBearer, APIKeyHeader, OpenIdConnect, get_openapi, app.frontend(). |
| Maximum Rust Architecture | Direct SQL routes (@app.get(path, sql=...)), lock-free TTL cache (cache_ttl=60), token-bucket rate limiter (rate_limit="100/minute"), SIMD vector similarity (cosine_similarity/vector_search), high-concurrency WebSockets pub/sub (ws.subscribe/app.broadcast), zero-copy disk streaming (await file.save_to()), and native SSE broadcast (sse="topic"). |
| HTTP & Routing | FastAPI-style @app.get, @app.post, APIRouter, Depends, app.dependency_overrides, response_model, reload=True. |
| Rust-Native Tier 3 Routes | app.add_native_route() zero-GIL C-speed fast-paths (50,000+ req/sec). |
| Database Engine | sqlx SQLite & PostgreSQL pool (app.connect_db()) with zero-copy JSON streaming (db.query_json()). |
| Power Primitives | Native Rust encode_jwt() / decode_jwt(), Argon2 hash_password() / verify_password(), MiniJinja render_template(), SIMD vector search. |
| Response Classes | HTMLResponse, JSONResponse, PlainTextResponse, RedirectResponse, StreamingResponse, EventSourceResponse. |
| Request Ergonomics | req.json(), req.form, req.body, UploadFile (with save_to zero-copy disk streaming), WebSocket (with pub/sub channels). |
| AI / MCP Integration | Embedded Model Context Protocol server (@app.tool(), @app.resource(), @app.prompt()) at POST /mcp, plus optional hardware-accelerated ONNX serving (pyrustapi[ai]). |
| Telemetry & Observability | Terminal access logging (INFO: 127.0.0.1 - "GET /render HTTP/1.1" 200 - 0.45ms), Swagger UI (/docs), OpenAPI (/openapi.json). |
⚡ Framework Standing & Multi-Framework Benchmarks
rustapi delivers 100% FastAPI developer experience (DX) while running on a high-performance Rust (Tokio/Hyper) core engine.
┌───────────────────────────────────────────────────────────┐
│ Python Layer (DX) │
│ FastAPI Syntax • Pydantic Models • Routers • SSE • Docs │
└─────────────────────────────┬─────────────────────────────┘
│ PyO3 C-Bindings
┌─────────────────────────────▼─────────────────────────────┐
│ Rust Tokio/Hyper Core │
│ Async Multi-Thread IO • Tokio Workers • sqlx DB • SSE │
└───────────────────────────────────────────────────────────┘
📊 Empirical Benchmark Results (oha Load Generator, $c=32$)
Measured under identical business logic and schemas across Python and Node.js frameworks:
| Workload Scenario | FastAPI (uvloop) |
Express.js | RustAPI (v1.8.9) | Fastify (Node.js) | RustAPI Native Tier 3 |
|---|---|---|---|---|---|
Sync JSON (GET /json) |
3,417 req/s | 12,873 req/s | 10,178 req/s (⚡ 3.0x vs FastAPI) | 17,063 req/s | 🚀 96,386 req/s (⚡ 7.5x vs Express) |
Async JSON (GET /async_json) |
5,430 req/s | 13,638 req/s | 8,117 req/s (⚡ 1.5x vs FastAPI) | 17,122 req/s | N/A |
Validated POST (POST /items) |
2,762 req/s | 10,529 req/s | 8,621 req/s (⚡ 3.1x vs FastAPI) | 13,463 req/s | N/A |
Response Model (50 items) (GET /users) |
1,916 req/s | 10,072 req/s | 1,928 req/s (⚡ Lower p95) | 11,145 req/s | N/A |
High Concurrency (c=100) |
6,088 req/s | 12,637 req/s | 7,571 req/s (⚡ 1.25x vs FastAPI) | 15,523 req/s | N/A |
Detailed report & reproducible scripts: performance-reports/rustapi_vs_fastapi_vs_nodejs.md
🚀 Maximum Native Rust Architecture Benchmarks (PyRustAPI vs FastAPI Uvicorn, $c=50$)
Under high-concurrency production load with the maximum native Rust acceleration active:
| Workload Scenario | FastAPI (Uvicorn) | PyRustAPI (Native Rust) | Empirical Performance Boost | Notes |
|---|---|---|---|---|
DDoS / Rate Limit Shield (/rate-limit) |
2,092.4 req/s (24.0 ms) | 62,723.6 req/s (0.79 ms) | 🚀 +2,897.6% (30x faster) | Handled in Tokio before Python wakes up |
| SIMD Vector Search (10k vectors × 128 dim) | 247.45 ms (Python loop) | 23.36 ms (AVX2 registers) | 🧠 +959.0% (10.5x faster) | Native SIMD vector distance |
Database Query (/sql SQLx vs SQLite) |
258.2 req/s (201.5 ms) | 1,524.0 req/s (32.8 ms) | ⚡ +490.2% (6x throughput) | Direct socket wire-protocol streaming |
Standard JSON Response (/json) |
2,609.5 req/s (19.2 ms) | 7,732.2 req/s (6.4 ms) | 🔥 +196.3% (3x faster) | Hyper Ingress + PyO3 C-bindings |
In-Memory Cache Hit (/cached) |
2,394.2 req/s (20.9 ms) | 5,754.9 req/s (8.6 ms) | 💾 +140.4% (2.4x faster) | Lock-free DashMap cache (sub-100µs) |
Detailed report: performance-reports/maximum_rust_architecture_benchmark.md & guide: docs/md/maximum_rust_architecture.md
🏛️ The Maximum Native Rust Execution Model
- Tier 1 (FastAPI Drop-in): Standard Python
@app.get(),async def, Pydantic models, and dependencies. - Tier 2 (Hybrid Rust Acceleration): Standard Python handlers utilizing native Rust power primitives (
db.query_json()SQLite/PostgreSQL streaming,rustapi.encode_jwt(),rustapi.hash_password(), MiniJinja templates, SIMDcosine_similarity). - Tier 3 (Pure Rust Native Fast-Paths & Wire Streaming): Zero-GIL routes registered via
@app.get(path, sql=...),@app.get(path, sse=...), orapp.add_native_route("/health", ...)clocking up to 96,000+ req/sec with sub-millisecond latencies. - Token-Bucket Shield & In-Memory TTL Cache: Sub-50µs 429 DDoS mitigation and sub-100µs RAM cache hits handled completely in Rust.
- Zero-Copy Disk Streaming: High-throughput file uploads (
await file.save_to(path)) streamed directly to disk at flat 15MB memory.
🔄 Lifespan Context Manager (ML Models, DB Pools, Resource Cleanup)
RustAPI supports the modern FastAPI @asynccontextmanager lifespan protocol across both ASGI and native Tokio app.run():
from contextlib import asynccontextmanager
from rustapi import FastAPI
ml_models = {}
@asynccontextmanager
async def lifespan(app: FastAPI):
# Startup: Load ML model or connect to database before handling requests
print("Loading application resources...")
ml_models["hero_model"] = "Loaded Model Instance"
yield
# Shutdown: Clean up resources and release memory on server exit
print("Cleaning up resources...")
ml_models.clear()
app = FastAPI(lifespan=lifespan)
@app.get("/")
async def read_root():
return {"model": ml_models.get("hero_model")}
if __name__ == "__main__":
app.run(host="127.0.0.1", port=8000)
⚡ 5 Proven Ways to Maximize Performance
- Pre-load Heavy Resources in
lifespan: Load models and connection pools once during startup rather than in request handlers. - Zero-Copy SQL with
db.query_json(): Stream database query results directly to client sockets without allocating Python dictionary objects. - Declare
response_modelfor Compiled Serialization: RustAPI compiles PydanticTypeAdapterinstances once, boosting serialization by up to 64.5%. - Offload Health Checks to Tier 3 Native Routes: Use
app.add_native_route("/health", ...)for ultra-high-frequency endpoints (96,000+ req/s). - Scale Multi-Process Workers: Set
workers=os.cpu_count()inapp.run()for multi-core parallelism.
📚 Documentation Reference
Detailed documentation is available in the docs/ directory and project reference:
- ⚡ Maximum Native Rust Architecture & Performance Guide
- 📖 Getting Started & Core Routing
- 🔒 Security, Authentication & JWT Guide
- 📚 Complete API & Migration Guide
🛠️ Local Development & Testing
Build from source with maturin:
# Clone the repository
git clone https://github.com/rajboopathiking/rustapi.git
cd rustapi
# Build release wheel with Maturin
pip install maturin
maturin develop --release
# Run full test suite
pytest tests/ -v
PYPI Package
pip install pyrustapi
📄 License
Distributed under the MIT License.
Metadata
Release files for pyrustapi 1.9.0b6
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| pyrustapi-1.9.0b6.tar.gz | 3.6 MB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| pyrustapi-1.9.0b6-cp38-abi3-macosx_10_12_x86_64.whl | CPython 3.8 | abi3 | macOS 10.12+ x86-64 | Details |
Total release size: 7.9 MB
Release files / pyrustapi-1.9.0b6.tar.gz
| Download URL | pyrustapi-1.9.0b6.tar.gz |
|---|---|
| Size | 3.6 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
0ad142cad90617e5044f0533d157bd5acbbfc755038e7300c5750016c36c65d1
|
|
BLAKE2b-256 checksum How to use checksums |
7cafc390ae7797bc4abc611afa6dd120f4530162b270ac70bac69a0dc3eb6df0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.9
|
Release files / pyrustapi-1.9.0b6-cp38-abi3-macosx_10_12_x86_64.whl
| Download URL | pyrustapi-1.9.0b6-cp38-abi3-macosx_10_12_x86_64.whl |
|---|---|
| Size | 4.3 MB |
| Tags | CPython 3.8 abi3 macOS 10.12+ x86-64 |
|
SHA-256 checksum How to use checksums |
45b42e096f1b8d7b654ef5b5e669014e983f2be3247ae3efd28431c296ab099e
|
|
BLAKE2b-256 checksum How to use checksums |
4f41cc3c1b33f5515030c8a275c02268e4102f68245ff8bdc36cac9ed383846e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.11.9
|
Security for pyrustapi 1.9.0b6
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.