mrkeyoor.com_
Wed 04 Nov 21:04 UTC
Dev Toolsevaluationupdated 31 Oct 2026

pingora review

Choose Pingora when you need to write custom proxy behavior in Rust and can maintain the resulting service. Pingora is a Rust framework for building programmable network services. Our run on September 20, 2026, at commit 4487f7b built successfully, but the test command failed; it did not establish production readiness or runtime performance.

+39stars / 7d
Verdict

Choose Pingora for a custom Rust proxy service when its documented platform and API limits fit your project. Our recorded build succeeded, but the failed test command needs investigation before adoption. Start with a minimal service against your own upstreams, preserve the complete test output and validate your routing, TLS and failure handling. Evaluate HAProxy or Envoy if operating an existing proxy better matches the work; consider hyper if you need lower-level HTTP building blocks.

We ran it

Lab card: what happened when we ran pingoraScreenshot of pingora (github.com/cloudflare/pingora)
Install✓ · 18s342 packages
Build✓ · 407s
Tests✗ · 369s2248 passed · 36 failed of 2284 (cargo test)
Repo402 files~112,425 lines of source · 11.1 MB · 5 CI workflows · Dockerfile

Answers from our run

Does pingora build from source?

Dependencies installed in 18 seconds (342 packages), and the build succeeded in 407 seconds. We cloned commit 4487f7b into a clean Debian container with 3 CPUs and no project-specific setup.

Do pingora's tests pass?

No. The project's own test command finished in 369 seconds and reported 2248 passed, 36 failed (cargo test).

Who should not use pingora?

Operators seeking a proxy they can adopt primarily through configuration.

What are the alternatives to pingora?

HAProxy, hyper, Envoy. Choose Pingora for a custom Rust proxy service when its documented platform and API limits fit your project.

Setup2/5Material unresolved friction: our sandbox build succeeded in 407 seconds, but the test command exited 101. Stored parser aggregates may repeat suites and are not unique test counts.
Docs4/5Strong documented support: the supplied quick start covers service construction and operation, and the phase guide explains request hooks; cache filters remain undocumented there.
CommunityN/AThe supplied primary extracts do not establish contributor participation, support response times or maintenance responsiveness.
Maturity3/5Usable evidence with significant limits: the README reports production use and documents proxy capabilities, but caching APIs are experimental and platform support varies.

Discussed on

  1. hnA good day to trie-hard: saving compute 1% at a time614 points
  2. hnPingora, the proxy that connects Cloudflare to the Internet456 points
  3. hnCloudflare has replaced Nginx with in-house, Rust-written Pingora334 points
  4. hnPingora: build fast, reliable and programmable networked systems245 points
  5. hnWe could save petabytes of cache storage with Zstandard and Pingora139 points

Who it’s for

Rust developers who need custom upstream selection or request handling.
Infrastructure teams prepared to develop, deploy and maintain their own proxy service.
Linux operators evaluating programmable HTTP/1 and HTTP/2 proxying.

Who it’s NOT for

Operators seeking a proxy they can adopt primarily through configuration.
Teams requiring stable proxy-cache APIs: the supplied README explicitly describes these interfaces as experimental and highly volatile.
Windows deployments requiring first-party support comparable to Linux.
Buyers seeking a throughput benchmark, security assessment or verified production deployment from this review.

Setup reality

Our run took place on September 20, 2026, at commit 4487f7b in our sandbox, recorded as lab-rust:1 with 3 CPUs and 12 GB memory. Installation succeeded in 18 seconds, the build succeeded in 407 seconds, and cargo test exited with code 101 after 369 seconds. Neither command timed out.

The attached stored parser summaries record 2,248 passed, 36 failed and 2,284 total. These are historical parser aggregates, not verified unique or exhaustive test counts: the stored output repeats Cargo summaries and may double-count suites. They remain unchanged here.

The raw test_basic footer separately reports four passes and eighteen failures within that suite. Its failure list includes test_origin_alive, test_simple_proxy_uds and test_upstream_compression. Their visible panic messages say "Lazy instance has previously been poisoned"; the tail does not establish the initiating failure.

The README lists Clang for BoringSSL builds and Perl 5 for OpenSSL builds. A successful workspace build does not show that we deployed a proxy, exercised its CLI, validated graceful upgrades or tested an application workload.

Should you build your proxy with Pingora?

Use Pingora when request handling needs application code and your team wants to own that code. The supplied quick start builds a load balancer by creating a Rust application, implementing ProxyHttp, selecting upstreams and adding a listener. Pingora provides server infrastructure, but adopting the framework still means building a service.

Pingora is a Rust framework for building programmable network services. Its README documents HTTP/1 and HTTP/2 proxying, gRPC and WebSocket proxying, graceful reload, and customizable load balancing and failover. These are documented capabilities, not features individually verified by our sandbox run.

What our recorded run establishes

Our run on September 20, 2026, at commit 4487f7b built successfully, but the test command failed. The exact matching sandbox record reports installation in 18 seconds, a successful build in 407 seconds and a test-command exit code of 101 after 369 seconds.

Our harness records command success, exit codes, elapsed time and parsed test summaries separately. The stored parser summaries contain 2,248 passed, 36 failed and 2,284 total. Repeated Cargo output means these aggregates may double-count suites; they do not establish unique or exhaustive test totals. We have preserved the stored figures rather than recalculating them from the available tail.

Within the separately identified pingora-proxy test_basic suite, the raw footer reports four passes and eighteen failures. The named failures include test_origin_alive, test_simple_proxy_uds, test_simple_proxy_uds_peer and test_upstream_compression. Their visible panic output reports a previously poisoned lazy instance. That identifies an observed failure condition, but the available tail does not identify its original cause. It also does not justify subtracting this suite's failures from the stored aggregate to infer additional failures elsewhere. Another footer records two ignored tests; ignored tests are not failures.

The MrKeyoor testing methodology explains how command outcomes and parsed counts reach reviews. That page provides provenance context; its current procedure does not establish which methodology version governed this September run. This correction uses the existing record and includes no new execution.

We did not benchmark throughput, deploy a production service or reproduce a client workload. The record contains no audit result or scanned-package count, so security scan coverage is unknown.

What customization makes you responsible for

The quick start makes the upstream address, TLS setting, SNI and Host header part of the application. Its current instructions explain that a plain-HTTP upstream needs TLS disabled and that the demo Host header must be changed or removed to suit your backend. Those details are a useful evaluation checklist, rather than evidence that our run exercised the example.

The phase guide describes hooks for upstream selection, request modification, response processing and logging. It also distinguishes response changes made before cache storage from changes made before delivery to the client. Before adopting Pingora, identify where your policy belongs and test its effect on both stored and delivered responses. The supplied current guide is documentation evidence, not proof that every described hook existed or ran at the recorded commit.

Cache stability and platform support constrain the choice

Pingora's proxy-cache integration is experimental, and its caching APIs are highly volatile. That warning appears in both the supplied current README and the README pinned to our recorded commit. If stable cache interfaces are an adoption requirement, resolve that constraint before building around them.

The pinned README names Linux as the tier 1 environment. It describes Unix-like development, including macOS, as best effort with possible missing features, and Windows support as preliminary community work. It lists a workspace minimum Rust version of 1.85 and additional build tools for selected TLS dependencies. Validate your chosen crates and platform rather than treating general Rust platform support as Pingora support.

The supplied primary extracts do not establish the current status of the previously cited HTTP/3, public-egress or Brotli issues. Those issue claims therefore do not determine this recommendation.

Which alternatives deserve a look?

HAProxy is a reverse proxy for TCP and HTTP applications with high availability and load balancing. Its repository points operators to installation, configuration and management documentation. Evaluate it as a replacement candidate when you want to operate an existing proxy and check whether its configuration covers your requirements. We did not run a feature-parity or performance comparison.

hyper is a relatively low-level HTTP library intended as a building block for libraries and applications. Consider it when you want HTTP client or server primitives and intend to design more of the surrounding application yourself. Its documented role does not establish it as a ready-made operational replacement for Pingora.

Envoy describes itself as an edge, middle and service proxy. That makes it another replacement candidate to investigate for those deployment roles, but the supplied extract does not establish configuration parity, migration effort or comparative performance.

How to read the editorial scores

Scores assess the supplied evidence, not popularity or benchmark position. For each assessed dimension, 1 means substantial demonstrated barriers, 2 means material unresolved friction, 3 means usable evidence with significant limits, 4 means strong documented support with narrower gaps, and 5 requires broad direct evidence for that dimension. An unassessed dimension has no numerical score.

Setup ease receives 2 because the build completed but the test command failed and the original failure remains unresolved. Documentation receives 4 because the supplied quick start and phase guide explain implementation and operation, while the phase guide leaves cache filters undocumented. Community is unassessed because the supplied extracts do not establish contributor participation or response times. Maturity receives 3 because the project documents an established proxy framework and reports production use, while explicitly warning about experimental caching and uneven platform support.

Alternatives

ProjectWhat it isPick it when
HAProxyA reverse proxy for TCP and HTTP applications with high availability and load balancing.Evaluate it as a replacement candidate when you want an existing proxy and can verify that its configuration covers your requirements.
hyperA relatively low-level HTTP library with client and server APIs.Choose it as a building block when you intend to design more of the application yourself; it is not documented here as a ready-made proxy replacement.
Envoy gh↗An edge, middle and service proxy.Investigate it as a replacement candidate for those proxy roles; this review does not establish migration effort or feature parity.

What people are saying

  1. [github-trending] cloudflare/pingora
  2. [hackernews] We could save petabytes of cache storage with Zstandard and Pingora

Sources

  1. Pingora README
  2. Pingora quick start
  3. Pingora proxy phase guide
  4. Pingora 0.9.0 release
  5. Issue 999: connector tests use public egress
  6. Issue 1013: incomplete Brotli streams
  7. Issue 95: HTTP/3 and QUIC request

More dev tools reviews

90DaysOfDevOps · dracula-theme · sandcastle · SimpleEnglish · QuickLook · kero · the whole board →