Build & Feature Flags

bext-server uses Cargo feature flags to keep the binary lean. Enable only what your deployment needs.

Available Features

Feature What it enables When you need it
v8 V8 SSR engine (heap snapshots, TurboFan JIT) Default. The only supported render engine — required for SSR.
tls Auto-TLS (Let's Encrypt / ZeroSSL), SNI, OCSP Any production server serving HTTPS.
nginx-compat Drop-in nginx.conf parser, masquerade mode Replacing nginx. Required for --nginx-masquerade.
php PHP/FastCGI (embedded SAPI + FPM proxy) WordPress, Laravel, or any PHP site.
redis Redis pub/sub, sessions, distributed cache Horizontal scaling across multiple instances.
realtime SSE + WebSocket hub, topic pub/sub Real-time features (chat, notifications).
waf Web Application Firewall IP filtering, geo-blocking, SQLi/XSS detection.
plugins WASM + QuickJS + nsjail sandbox Running third-party plugins.
websocket-proxy Upstream WebSocket proxy passthrough Proxying WebSocket connections to backends.
otel OpenTelemetry tracing + metrics Observability pipelines (Jaeger, Grafana).
h3-quic HTTP/3 over QUIC Bleeding-edge HTTP/3 support.
ebpf eBPF-based monitoring Kernel-level observability.
react-compiler React Compiler Rust (auto-memoization) Experimental. Optimizes React bundles at build time.
turbopack In-process Turbopack bundler Experimental. Requires nightly Rust.
route-css Rust-native Tailwind CSS generation Per-route CSS, bext css command, live rebuild.

Common Build Profiles

Development (single app)

cargo build -p bext-server --release

Uses default features (v8 + route-css). Good for local development and simple deployments.

Production nginx replacement

cargo build -p bext-server --release \
  --features nginx-compat,tls,php

The minimum for replacing nginx on a server with PHP sites.

Production with V8

cargo build -p bext-server --release \
  --no-default-features \
  --features nginx-compat,tls,php,v8

V8 is the only SSR engine. --no-default-features drops feature baggage we don't need for this profile.

Full-featured production

cargo build -p bext-server --release \
  --no-default-features \
  --features nginx-compat,tls,redis,realtime,waf,v8,react-compiler,turbopack,php

Everything enabled. Requires nightly Rust for the turbopack feature:

cargo +nightly-2026-04-02 build -p bext-server --release \
  --no-default-features \
  --features nginx-compat,tls,redis,realtime,waf,v8,react-compiler,turbopack,php,route-css

Bun Detection

bext auto-detects the Bun binary for on-demand compilation. Detection order:

1. BUN_PATH environment variable 2. which bun (searches PATH) 3. /usr/local/bin/bun, /usr/bin/bun 4. $HOME/.bun/bin/bun

Override with: export BUN_PATH=/path/to/bun

Verifying Features

Check which features are compiled into a binary:

bext-server version

Output:

bext 0.1.2
build: release
features: v8, react-compiler, turbopack, tls, redis, realtime, waf, php, nginx-compat

Render Engine

bext ships with V8 as the single SSR engine (via rusty_v8). Characteristics:

V8
Startup ~1ms per worker (heap snapshots)
JIT TurboFan
Thread model tokio-compatible (Send), in-process worker pool
Crash recovery ~1ms snapshot reload + per-route crash markers (see V8 Crash Isolation)
Config [render] workers = N — no engine selection needed

A second backend (WebKit/JavaScriptCore) historically existed; it was removed once V8's snapshot-based cold start made JSC redundant.

Release Profile

The workspace Cargo.toml configures aggressive optimization:

[profile.release]
opt-level = 3
lto = "fat"
codegen-units = 1
strip = true

Build times are ~8-10 minutes with LTO on a typical server. Most of this is the final linking stage.