Rust data-plane proxy · pre-1.0

One hop.
Explicit decisions.

Route MySQL, PostgreSQL/TimescaleDB, and Redis/Valkey traffic across pools and shards while keeping failure boundaries visible.

  • ProtocolsMySQL · PostgreSQL · RESP
  • Routingread/write · hash · range · value
  • Modelindependent data-plane replicas
routing decision
op_7J2k…mQ

Example routing decisions

requestSELECT … tenant_id = 11
dbproxy decisionread · shard 01
destinationorders-1 / replica-b
fallback: primaryROUTE ACCEPTED

Documentation paths

Start with the decision you need to make.

Protocol modes

Preserve the wire, or terminate it for control.

MySQL

Statement-aware by default

Terminate the protocol for SQL parsing, prepared routing, pooled backends, cache policy, and XA fanout.

Read the architecture →
PostgreSQL / TimescaleDB

Choose fidelity or pooling

Use transparent relay for full protocol fidelity, or transaction mode for bounded pools and statement routing.

Compare the modes →
Redis / Valkey

Pin a connection or route keys

Keep RESP transparent, or use command mode for CRC16 placement and guarded multi-key operations.

Choose a topology →

Production contract

Uncertainty does not become a replica read or a cross-shard guess.

Unsupported SQL shapes, topology ambiguity, metadata mismatch, and unsafe distributed operations fail closed. The boundary pages state what DBProxy can prove today.

Local demo

Three commands to a routed stack.

./deploy.sh
./scripts/smoke.sh
./deploy.sh local-down
Endpoints and expected results →
Try “transaction pooling”, “MOVED”, “XA recovery”, or “shard key”.