⚡ B-FAST (Binary Fast Adaptive Serialization Transfer)
B-FAST is an ultra-high performance binary serialization protocol, developed in Rust for Python and TypeScript ecosystems. It's designed to replace JSON in critical routes where latency, CPU usage, and bandwidth are bottlenecks.
"Performance is not just about speed—it's about efficiency where it matters most"
B-FAST was born from the recognition that modern applications need more than just fast serialization—they need smart serialization that adapts to real-world constraints. After extensive optimization, B-FAST has found its perfect niche in bandwidth-constrained environments, achieving 1.7x faster than orjson for simple objects and 5.7x faster on slow networks.
Philosophy: We believe that the future of data transfer lies not in raw CPU speed alone, but in intelligent protocols that minimize network overhead while maintaining excellent performance. B-FAST represents our contribution to a more efficient, bandwidth-conscious web.
📚 Documentation
Full documentation available at: https://marcelomarkus.github.io/b-fast/
🚀 Why B-FAST?
- Rust Engine: Native serialization without Python interpreter overhead.
- Pydantic Native: Reads Pydantic model attributes directly from memory, skipping the slow .model_dump() process.
- Zero-Copy NumPy: Serializes tensors and numeric arrays directly, achieving 14-96x speedup vs JSON/orjson.
- Parallel Compression: LZ4 with multi-thread processing for large payloads (>1MB).
- Cache Optimized: Aligned allocation and batch processing for maximum efficiency.
📊 Benchmarks (Updated Results)
🚀 Simple Objects (10,000)
| Format | Time (ms) | Speedup |
|---|---|---|
| JSON | 12.0ms | 1.0x |
| orjson | 8.19ms | 1.5x |
| B-FAST | 2.01ms | 🚀 6.0x |
B-FAST is 4.1x faster than orjson!
🌊 Streaming Protocol (1,000 frames)
| Metric | Performance | Speedup / Throughput |
|---|---|---|
| Streaming Decode (Aligned) | 11.8ms | ~85,000 frames/s |
| Streaming Decode (Fragmented) | 13.6ms | ~73,500 frames/s |
| Single Frame Latency | 139.2µs | Real-time instant parsing |
| Sustained Stream Throughput | 12,500 frames/s | High-frequency event feeds |
🔄 Round-Trip (Encode + Network + Decode)
Complete test including network transfer and deserialization (10,000 objects):
📡 100 Mbps (Slow Network)
| Format | Total Time | Speedup vs orjson |
|---|---|---|
| JSON | 114.5ms | 0.8x |
| orjson | 91.7ms | 1.0x |
| B-FAST + LZ4 | 16.1ms | 🚀 5.7x |
📡 1 Gbps (Fast Network)
| Format | Total Time | Speedup vs orjson |
|---|---|---|
| JSON | 29.4ms | 0.5x |
| orjson | 15.3ms | 1.0x |
| B-FAST + LZ4 | 7.2ms | 🚀 2.1x |
📡 10 Gbps (Ultra-Fast Network)
| Format | Total Time | Speedup vs orjson |
|---|---|---|
| JSON | 20.9ms | 0.4x |
| orjson | 7.7ms | 1.0x |
| B-FAST + LZ4 | 6.3ms | 🚀 1.2x |
🎯 Ideal Use Cases
- 📱 Mobile/IoT: 89% data savings + 5.7x performance on slow networks
- 🌐 APIs with slow networks: Up to 5.7x faster than orjson
- 📊 Data pipelines: 14-96x speedup for NumPy arrays
- 🗜️ Storage/Cache: Superior integrated compression
- 🚀 Simple objects: 4.1x faster than orjson
- 🌊 Real-time Streaming: > 12,500 frames/s with zero-allocation chunk parsing
📦 Installation
Backend (Python)
# Basic installation
pip install bfast-py
# With FastAPI support
pip install "bfast-py[fastapi]"
or with uv:
uv add bfast-py
# or
uv add "bfast-py[fastapi]"
Frontend (TypeScript)
npm install bfast-client
🛠️ How to Use
Backend (Python)
1. FastAPI (Direct Integration) ⭐ Recommended
B-FAST includes a built-in BFastResponse for seamless integration.
from fastapi import FastAPI
from pydantic import BaseModel
from b_fast import BFastResponse
app = FastAPI()
class User(BaseModel):
id: int
name: str
@app.get("/users", response_class=BFastResponse)
async def get_users():
# Returns binary B-FAST data with automatic LZ4 compression
return [User(id=i, name=f"User {i}") for i in range(1000)]
# ⚡ Streamable HTTP (Progressive Chunks)
from b_fast import BFastStreamingResponse
@app.get("/users/stream")
async def stream_users():
async def user_generator():
for i in range(1000):
yield User(id=i, name=f"User {i}")
# Streams framed chunks with Content-Type: application/x-bfast-stream
return BFastStreamingResponse(user_generator())
2. Django Ninja & Django
from ninja import NinjaAPI
from b_fast.django import BFastRenderer, BFastHttpResponse
# Django Ninja with BFastRenderer
api = NinjaAPI(renderer=BFastRenderer())
@api.get("/users")
def get_users(request):
return [{"id": i, "name": f"User {i}"} for i in range(1000)]
# Standard Django View
def django_view(request):
return BFastHttpResponse({"status": "ok"})
3. Polars & Pandas DataFrames
from b_fast import BFast, encode_dataframe
import polars as pl
df = pl.DataFrame({"id": [1, 2, 3], "score": [95.0, 88.0, 92.5]})
# Direct native serialization in BFast
packed = BFast().encode_packed(df, compress=True)
# Or with orientation control ('records', 'columns', 'split')
col_data = encode_dataframe(df, orient="columns")
4. FastMCP 2.0 (AI Agent Tools)
from b_fast import FastMCPBFast, bfast_tool
mcp = FastMCPBFast("data-service")
@mcp.tool()
@bfast_tool()
def query_records(limit: int = 100):
return [{"id": i, "metric": i * 1.5} for i in range(limit)]
Frontend (TypeScript)
1. Fetch & TanStack Query (React Query)
import { bfastFetch, bfastQueryOptions } from 'bfast-client';
import { useQuery } from '@tanstack/react-query';
import { z } from 'zod';
const UserSchema = z.object({ id: z.number(), name: z.string() });
type User = z.infer<typeof UserSchema>;
// Direct Fetch
const users = await bfastFetch<User[]>('/users');
// In React with TanStack Query
function UserComponent() {
const { data: user } = useQuery(
bfastQueryOptions<User>({
queryKey: ['user', 1],
url: '/users/1',
schema: UserSchema, // Runtime schema validation
})
);
return <div>{user?.name}</div>;
}
2. Streamable HTTP (Progressive Stream)
import { decodeReadableStream } from 'bfast-client';
async function streamData() {
const response = await fetch('/users/stream');
// Iterates over incoming network frames in real-time
for await (const user of decodeReadableStream(response.body!)) {
console.log('Received user in real-time:', user);
}
}
🤖 AI Assistants & Coding Agents (llms.txt)
B-FAST provides a standardized, curated llms.txt endpoint for AI tools (OpenCode, Cursor, Claude Code, ChatGPT, Windsurf, and GitHub Copilot).
Prompt your AI assistant directly:
Follow the B-FAST guidelines at https://marcelomarkus.github.io/b-fast/llms.txt to implement binary endpoints.
About B-FAST
Key Achievements:
- 🚀 4.1x faster than orjson for simple objects (2.01 ms)
- 🚀 5.7x faster than orjson on 100 Mbps networks (round-trip)
- 🌊 12,500+ frames/sec sustained streaming throughput (~139 µs latency)
- 📦 89% smaller payloads with built-in LZ4 compression
- ⚡ 14-96x speedup for NumPy arrays
- 🎯 Competitive even on ultra-fast 10 Gbps networks
B-FAST performance comparison across 6 key scenarios: simple objects encoding, zero-copy NumPy arrays, payload size, 100 Mbps round-trip, streaming decode time, and streaming throughput. B-FAST demonstrates clear superiority in speed (2.1-14x faster) and bandwidth efficiency (90% reduction with LZ4).
Developed by: marcelomarkus
📄 License
Distributed under the MIT License. See LICENSE for more information.
Release files for bfast-py 1.6.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Built distributions (wheels)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| bfast_py-1.6.0-cp38-abi3-win_amd64.whl | CPython 3.8 | abi3 | Windows x86-64 | Details |
| bfast_py-1.6.0-cp38-abi3-manylinux_2_34_x86_64.whl | CPython 3.8 | abi3 | Linux glibc 2.34+ x86-64 | Details |
| bfast_py-1.6.0-cp38-abi3-macosx_11_0_arm64.whl | CPython 3.8 | abi3 | macOS 11.0+ ARM64 | Details |
Total release size: 1.2 MB
Release files / bfast_py-1.6.0-cp38-abi3-win_amd64.whl
| Download URL | bfast_py-1.6.0-cp38-abi3-win_amd64.whl |
|---|---|
| Size | 307.5 kB |
| Tags | CPython 3.8 Windows x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
8f1901bc7f8e41ad5dabacfdf5dd81087bfea910ee4e1be04560da1b4e4a2702
|
|
BLAKE2b-256 checksum How to use checksums |
73565a7aa6875853949bebefa3a65b53a8e0d5ca24e51fe4eb21813da28f4f19
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Release files / bfast_py-1.6.0-cp38-abi3-manylinux_2_34_x86_64.whl
| Download URL | bfast_py-1.6.0-cp38-abi3-manylinux_2_34_x86_64.whl |
|---|---|
| Size | 488.8 kB |
| Tags | CPython 3.8 Linux glibc 2.34+ x86-64 abi3 |
|
SHA-256 checksum How to use checksums |
42b9cad0877e49863626d5dd01b6bf8bc9e9c18fd3b07c1200c4bf3ad5ad2feb
|
|
BLAKE2b-256 checksum How to use checksums |
187ef239295777b9224c5a9cf5409f5a5a3e56b28fe2649e111183580de4ee11
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|
Release files / bfast_py-1.6.0-cp38-abi3-macosx_11_0_arm64.whl
| Download URL | bfast_py-1.6.0-cp38-abi3-macosx_11_0_arm64.whl |
|---|---|
| Size | 429.3 kB |
| Tags | CPython 3.8 abi3 macOS 11.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
300fdb653f4d7c44fab564e327f34a87f458f65a1066d83d26a121710a0112a7
|
|
BLAKE2b-256 checksum How to use checksums |
9250a3cfef48e9bb41499395745cab42f279150900aa28d497f1a7ea0c02477e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.13
|