Our user guide covers more topics such as how to configure and run Pingora servers, as well as how to build custom HTTP servers and proxy logic on top of Pingora's framework.
API docs are also available for all the crates.
Notable crates in this workspace
Pingora: the "public facing" crate to build networked systems and proxies
Pingora-core: this crate defines the protocols, functionalities and basic traits
Pingora-proxy: the logic and APIs to build HTTP proxies
Pingora-error: the common error type used across Pingora crates
Pingora-http: the HTTP header definitions and APIs
Pingora-openssl & pingora-boringssl: SSL related extensions and APIs
Pingora-load-balancing: load balancing algorithm extensions for pingora-proxy
Pingora-memory-cache: Async in-memory caching with cache lock to prevent cache stampede
Pingora-s2n: SSL extensions and APIs related to s2n-tls
Pingora-timeout: A more efficient async timer system
TinyUfo: The caching algorithm behind pingora-memory-cache
Note that Pingora proxy integration with caching should be considered experimental, and as such APIs related to caching are currently highly volatile.
System requirements
Systems
Linux is our tier 1 environment and main focus.
We will try our best for most code to compile for Unix environments. This is for developers and users to have an easier time developing with Pingora in Unix-like environments like macOS (though some features might be missing)
Windows support is preliminary by community's best effort only.
Both x86_64 and aarch64 architectures will be supported.
Rust version
Pingora keeps a rolling MSRV (minimum supported Rust version) policy of 6 months. This means we will accept PRs that upgrade the MSRV as long as the new Rust version used is at least 6 months old. However, we generally will not bump the highest MSRV across the workspace without a sufficiently compelling reason.
Our current MSRV is 1.84.
Currently not all crates enforce rust-version as it is possible to use some crates on lower versions.
Build Requirements
Some of the crates in this repository have dependencies on additional tools and
libraries that must be satisfied in order to build them:
Make sure that Clang is installed on your system (for boringssl)
Make sure that Perl 5 is installed on your system (for openssl)