Language: English.
Reverse proxy and load balancer written in Rust, targeting progressive functional parity with the reference proxy together with verifiable improvements in diagnostics, configuration, administration, extensibility and security.
Status: v0.6.2 (2026-10-20) — patch over v0.6.1 «rules, routing and traffic». A real TCP and HTTP/1.1 proxy (crates
eqproxy-core/config/net/cli) with typed routing rules per listener — host/path/method/header/cookie/map/IP conditions, first match wins — and four rule actions:use_backend,split(weighted canary withweight = 0rollback, optionally pinned byhash_policyso a key keeps its target, and optionally mirrored to a shadow backend),redirectanddirect_response. On top of the v0.5 dataplane (strict framing, per-phase timeouts, TLS termination and backend TLS, ALPN h1, mTLS, multi-certificate SNI, active TCP/HTTP health checks, passive failure detection, safe idempotent retries, bounded queues, PROXY protocol v1/v2, hot config + certificate reload under traffic, backend keep-alive pool): set/add/del request headers and response headers with$remote_addr/$host/$schemetemplates, weighted round-robin + leastconn + slow start, source/cookie affinity, non-blocking dynamic DNS, canary by header/cookie/weight, hot data maps updated without a config reload, per-rule rate limiting, CORS/HSTS, basic + subrequest authentication, WebSocket/CONNECTtunnels,max_stream_duration, certificates selected by SNI (exact name, then wildcard, then the listener default), and theeqproxyCLI (validate,explainwith per-rule trace andtimeout_on_fire,schema— the public JSON Schema for editor completion,diff,plan, offlineapply/rollback,doctor), with 327 tests green plus two Docker-gated harnesses run before the release: differential corpus 23/23 cases against HAProxy 3.4.6, nginx, the ingress-nginx data plane and static Envoy v1.34.2, and the migration matrix 65/65 checks (four real source configs and theireqproxy.tomltranslation routing identically; evidence in docs/evidence/v06-migration/). No HTTP/2 yet. Release v0.6.2 (binaries for darwin/linux amd64+arm64 and multi-arch image, see Install). Performance vs 3.4.6 on netcup-bench (amd64, medians of 5, evidence): S-H1-04 (10 listeners, 100 backends, 20 rules) 18 207 vs 15 957 rps (p95 4.45 vs 5.92 ms), S-H1-05 (500 backends + health checks) 15 624 vs 3 466 rps (p95 5.16 vs 31.4 ms); the arm64 campaign (evidence) leads in both scenarios with S-H1-04 gaps within noise.Scope honesty: v0.6.2 is not declared production ready (Phase 9 gate pending). The whole v0.6 roadmap is delivered (32/32 scope boxes, 6/6 version-gate criteria); what remains is outside this version by design and listed in the CHANGELOG: the reference filters that only exist as WASM (v0.9, so ecosystem extension stays WASM-only), maps consumed through
equalsmatching only, and HTTP/2. The 24h soak gate passed on netcup-bench (2026-10-18: 17.28M requests, 0 errors, steady RSS 8.86 MiB / peak 9.32 MiB, clean SIGINT shutdown; budgets in BENCHMARK_PLAN.md §9).
Docs language: documentation is published in English only.
cargo run -p eqproxy-cli -- config validate --config eqproxy.toml.example
cargo run -p eqproxy-cli -- run --config eqproxy.toml.exampleBinaries and checksums live on the release page.
Every release carries four prebuilt binaries: eqproxy-darwin-arm64,
eqproxy-darwin-amd64, eqproxy-linux-arm64 and eqproxy-linux-amd64. The
Linux ones are statically linked against musl (file reports static-pie linked on amd64 and statically linked on arm64, no NEEDED entries, no
interpreter), so they need no libc, no glibc version and no packages at all:
they run on any Linux distribution of that architecture, and also on
FROM scratch. Each release ships the Docker Scout report of both image
architectures (SCOUT-<version>-linux-amd64.md, …-arm64.md).
# Pick your platform artifact:
# eqproxy-darwin-arm64 | eqproxy-darwin-amd64
# eqproxy-linux-arm64 | eqproxy-linux-amd64 (static, musl)
curl -sSLO https://github.com/ExyonQ/EQProxy/releases/download/v0.6.2/eqproxy-linux-amd64
curl -sSLO https://github.com/ExyonQ/EQProxy/releases/download/v0.6.2/SHA256SUMS.txt
shasum -a 256 -c SHA256SUMS.txt --ignore-missing # Linux: sha256sum -c --ignore-missing SHA256SUMS.txt
chmod +x eqproxy-linux-amd64
./eqproxy-linux-amd64 --version
# Smoke test with a minimal config (validate is offline, binds nothing):
cat > eqproxy.toml <<'EOF'
schema_version = 1
[listener.web]
listen = "127.0.0.1:8080"
mode = "http"
backend = "api"
[backend.api]
server = "127.0.0.1:9000"
EOF
./eqproxy-linux-amd64 config validate --config eqproxy.tomlDocker (linux/amd64 + linux/arm64), same digests on both registries:
docker pull exyonq/eqproxy:0.6.2 # Docker Hub (docs + examples on the repo page)
docker pull ghcr.io/exyonq/eqproxy:0.6.2 # GitHub Container Registry
docker run --rm exyonq/eqproxy:0.6.2 --version| Document | Contents |
|---|---|
| SPEC.md | Specification: goals, priorities, architecture, state taxonomy |
| THREAT_MODEL.md | Threat model and non-protections statement |
| BENCHMARK_PLAN.md | Honest benchmark plan and operator-task study |
| docs/differential-corpus.md | Declared shared-semantics corpus vs HAProxy, nginx, ingress-nginx and Envoy |
| docs/migration/README.md | Migration matrix: the same deployment in the four source formats and in EQProxy |
| docs/adr/ | Architecture decision records |
- Comparison reference: versions 3.4.6 LTS (primary) + 3.0.29 LTS (legacy deployed) of the reference proxy. See ADR-0003.
- Production platform: Linux x86_64 (glibc). See ADR-0001.
- Configuration format: study in ADR-0002, decision pending approval.
- Network stack: tokio + hyper 1.x + rustls; HTTP/3 is mandatory scope (Phase 5, experimental until interop is passed). See ADR-0004.
- Performance goal: match or beat the reference proxy 3.4.6 LTS on connections, memory, CPU and P50/P95/P99 latencies in the scenarios of BENCHMARK_PLAN.md. First measurements (S-TCP-01/S-H1-01/S-TLS-01, evidence): Comparable after the A16 keep-alive pool; the rest of the matrix is Not measured (no data, no claim).
- Code: 100 % safe Rust (
#![forbid(unsafe_code)], no exceptions); extensions WASM-only (Lua discarded due to FFIunsafe). - Parity scope: the OSS edition of the reference proxy only.
- Migration: configuration converter from the reference proxy to EQProxy
(CLI
eqproxy config import) with its own parser for the reference configuration format and a conversion report; directives are never silently dropped.
Dual: MIT OR Apache-2.0, at the recipient's choice.