BridgeBase Python SDK
BridgeBase is a Python SDK for connecting to databases through a secure gateway using JWT authentication. The SDK handles all the infrastructure (gateway resolution, socket connection, local proxy) and returns native library clients directly — no wrappers, full access to every feature.
Supported Databases
- TigerBeetle — via
tigerbeetle()→ returnstigerbeetle.ClientSync - Redis / Valkey — via
redis()→ returnsredis.Redis
Features
- 🔐 JWT Authentication — Secure gateway authentication with JWT tokens
- 🌐 Auto Gateway Resolution — No region required; resolved automatically from JWT
- 🔄 Local Proxy — Transparent TCP proxy forwarding traffic through the gateway
- 🚀 Native Clients — Returns
tigerbeetle.ClientSync,redis.Redis, etc. directly - ⚡ Lazy Initialization — No network calls until you call
connect()or use context manager - 🎯 Unified API — Access all TigerBeetle types through a single import
Installation
pip install bridgebase[all] # Everything
Install with optional database drivers:
pip install bridgebase[tigerbeetle] # TigerBeetle support
pip install bridgebase[redis] # Redis/Valkey support
pip install bridgebase[all] # Everything
Requirements
- Python 3.10+
- httpx >= 0.25.0
Quick Start
TigerBeetle
from bridgebase.tigerbeetle import tigerbeetle
# Single import provides BOTH session creation AND type access
with tigerbeetle(jwt_token="your-jwt-token") as tb:
account = tigerbeetle.Account(
id=tigerbeetle.id(),
ledger=1,
code=1,
flags=0,
)
destination = tigerbeetle.Account(
id=tigerbeetle.id(),
ledger=1,
code=1,
flags=0,
)
tb.create_accounts([account, destination])
transfer = tigerbeetle.Transfer(
id=tigerbeetle.id(),
debit_account_id=account.id,
credit_account_id=destination.id,
amount=100,
ledger=1,
code=1,
)
tb.create_transfers([transfer])
Redis / Valkey
from bridgebase.redis import redis
with redis(jwt_token="your-jwt-token") as rd:
rd.set("key", "value")
print(rd.get("key"))
Usage
Use the convenience functions tigerbeetle() and redis() for the simplest API:
from bridgebase.tigerbeetle import tigerbeetle
from bridgebase.redis import redis
# Context manager (auto cleanup)
with tigerbeetle(jwt_token="your-jwt-token") as tb:
account = tigerbeetle.Account(
id=tigerbeetle.id(),
ledger=1,
code=1,
)
tb.create_accounts([account])
with redis(jwt_token="your-jwt-token") as rd:
rd.set("key", "value")
Explicit Connect/Close
session = tigerbeetle(jwt_token="your-jwt-token")
try:
tb = session.connect()
tb.create_accounts([...])
finally:
session.close()
TigerBeetle Unified API
The tigerbeetle import provides both session creation AND access to all TigerBeetle types:
from bridgebase.tigerbeetle import tigerbeetle
# Use tigerbeetle() to create sessions
with tigerbeetle(jwt_token="...") as tb_client:
# Use tigerbeetle.* to access TigerBeetle types/functions
accounts = [
tigerbeetle.Account(
id=tigerbeetle.id(),
ledger=1,
code="CHECKING",
),
tigerbeetle.Account(
id=tigerbeetle.id(),
ledger=1,
code="SAVINGS",
),
]
tb_client.create_accounts(accounts)
# All TigerBeetle types are available:
# tigerbeetle.Transfer
# tigerbeetle.AccountFilter
# tigerbeetle.QueryFilter
# tigerbeetle.AccountFlags
# ... and everything else from the native tigerbeetle package
No need to import the native package separately — everything is available through bridgebase.tigerbeetle.
API Reference
tigerbeetle(jwt_token, *, cluster_id=0, api_base_url=...)
Create a TigerBeetle session.
Parameters:
jwt_token(str) — JWT token for authenticationcluster_id(int, optional) — TigerBeetle cluster ID (default: 0)api_base_url(str, optional) — Override default control-plane URL
Returns: TigerBeetleSession — Session that returns native tigerbeetle.ClientSync via connect()
Example:
from bridgebase.tigerbeetle import tigerbeetle
with tigerbeetle(jwt_token="...") as tb:
tb.create_accounts([...])
redis(jwt_token, *, db=0, api_base_url=...)
Create a Redis/Valkey session.
Parameters:
jwt_token(str) — JWT token for authenticationdb(int, optional) — Redis database index (default: 0)api_base_url(str, optional) — Override default control-plane URL
Returns: RedisSession — Session that returns native redis.Redis via connect()
Example:
from bridgebase.redis import redis
with redis(jwt_token="...") as rd:
rd.set("key", "value")
Session Objects
All sessions (TigerBeetleSession, RedisSession) share the same interface:
connect() -> NativeClient
Initialize the session and return the native database client.
- Resolves gateway endpoint via JWT
- Opens gateway socket with JWT handshake
- Starts local proxy on ephemeral port
- Connects native driver through proxy
close()
Tear down the session — closes native client, stops proxy, closes gateway socket.
Context Manager
with session as client:
# client is the native library object
pass
Local Proxy
The SDK starts a local TCP proxy that:
- Binds to ephemeral port (OS-assigned)
- Forwards all traffic bidirectionally between TigerBeetle client and gateway
- Runs in background thread
- Automatically cleaned up on
close()
Examples
See the example.py files for complete examples.
Error Handling
The SDK provides custom exceptions:
BridgeBaseError— Base exceptionAuthError— JWT authentication failedGatewayError— Gateway connection failedGatewayResolutionError— Gateway resolve API call failed (subclass ofGatewayError)ConnectionError— Native database connection issuesProxyError— Local proxy failed to start or forward traffic
from bridgebase.tigerbeetle import tigerbeetle
from bridgebase.core import AuthError, GatewayResolutionError
try:
with tigerbeetle(jwt_token="invalid") as tb:
pass
except AuthError as e:
print(f"Authentication failed: {e}")
except GatewayResolutionError as e:
print(f"Gateway resolution failed: {e}")
Development
Install in editable mode with dev dependencies:
pip install -e ".[dev]"
Code formatting:
ruff check bridgebase/
ruff format bridgebase/
Project Structure
bridgebase/
├── __init__.py # Root package metadata
├── core/ # Database-agnostic infrastructure
│ ├── __init__.py
│ ├── base.py
│ ├── gateway.py
│ ├── proxy.py
│ ├── credentials.py
│ └── exceptions.py
├── redis/ # Redis/Valkey adapter
│ ├── __init__.py
│ └── session.py
└── tigerbeetle/ # TigerBeetle adapter
├── __init__.py
└── session.py
License
MIT
Support
For issues or questions, please open an issue on GitHub.
Metadata
Release files for bridgebase 0.2.0
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 | Actions |
|---|---|---|---|---|
| bridgebase-0.2.0.tar.gz | 16.5 kB | Without provenance | Details for bridgebase-0.2.0.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| bridgebase-0.2.0-py3-none-any.whl | Python 3 | none | any | Details for bridgebase-0.2.0-py3-none-any.whl |
Total release size: 35.5 kB
Release files / bridgebase-0.2.0.tar.gz
| Download URL | bridgebase-0.2.0.tar.gz |
|---|---|
| Size | 16.5 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
7bce7beb7228d313bae48750983b5546405b58b054365b21b0655fa091449340
|
|
BLAKE2b-256 checksum How to use checksums |
3c1a9b5908316c4493975b684d85fe699f165a6b841540c22a12f47b3cbf0c8b
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.19
|
Release files / bridgebase-0.2.0-py3-none-any.whl
| Download URL | bridgebase-0.2.0-py3-none-any.whl |
|---|---|
| Size | 19.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
87c11d64b321563d2855ccfda6f315b9afd61f3fbe3304960aaa92308c5d40c3
|
|
BLAKE2b-256 checksum How to use checksums |
eef3b58e6c20f9c4a2d8f5b614773299c41ff0a45c3f86c9f0082aa67f2eba80
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.10.19
|
Security for bridgebase 0.2.0
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.