Skip to main content
Version: Next

Architecture

BeaRust separates request handling from operational management while keeping both processes driven by the same validated configuration and persistent control-plane state. Both halves run inside one binary and one container — there is no separate service to deploy or keep in sync.

System overview

The data plane and control plane are two logical halves of the same process: the data plane serves traffic, the control plane manages configuration and state, and everything in the dashed box is inactive until you configure it. See feature status for exactly what ships on versus opt-in.

Request path

Health checks (TCP or HTTP) continuously probe each backend; an unhealthy backend is excluded from selection until it recovers.

Data plane

The Rust data plane uses Pingora for the HTTP/1.1 and HTTP/2 proxy listener. It receives client traffic, resolves the request host and path to a route, selects a healthy backend from the route's upstream pool, and forwards the request.

The primary listener is port 8080 in the Docker Compose deployment. Native TLS is optional. HTTP/3 is also optional: it uses a separate QUIC listener and requires TLS, so it is not part of the default listener configuration.

Control plane and UI

The Axum control plane exposes authenticated setup and management APIs, and the bundled UI uses those same APIs — the UI is a client, not a second backend. In the supplied Compose files, port 8081 is published on 127.0.0.1 only. This is deliberate: do not publish the management port broadly without a separate access and TLS design.

Persistent control-plane data defaults to SQLite in the bearust-data Docker volume. Certificate material is stored in the separate bearust-tls volume. The control plane can use an opt-in PostgreSQL or MySQL Compose profile instead of SQLite.

Optional subsystems

Security controls (WAF, IP rules, bot protection, and rate limiting), analytics, clustering, WASM plugins, and the AI advisor are separate subsystems around the core request path. They are configuration- or environment-driven; the AI advisor, for example, stays disabled without both provider URL and API key. Review feature status before enabling these capabilities in production.

Reloading configuration

Validate a configuration before use, replace the mounted TOML atomically, and send SIGHUP to reload the running service. The Compose equivalent is:

docker compose kill -s HUP bearust

See Configure your first proxy for the configuration structures this reload applies.