[package] name = "rpxy-lib" description = "Library of `rpxy`: a simple and ultrafast http reverse proxy" version.workspace = true authors.workspace = true homepage.workspace = true repository.workspace = true license.workspace = true readme.workspace = true edition.workspace = true publish.workspace = true # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [features] http3-quinn = ["socket2", "quinn", "h3", "h3-quinn", "rpxy-certs/http3"] http3-s2n = [ "s2n-quic", "s2n-quic-core", "s2n-quic-rustls", "s2n-quic-h3", "rpxy-certs/http3", "h3", ] cache = ["http-cache-semantics", "lru", "sha2", "base64"] sticky-cookie = ["base64", "sha2", "chrono"] native-tls-backend = ["hyper-tls"] rustls-backend = ["hyper-rustls"] webpki-roots = ["rustls-backend", "hyper-rustls/webpki-tokio"] acme = ["dep:rpxy-acme"] post-quantum = [ "rustls-post-quantum", "rpxy-acme/post-quantum", "rpxy-certs/post-quantum", "s2n-quic-rustls/post-quantum", ] [dependencies] rand = "0.9.2" ahash = "0.8.12" bytes = "1.10.1" derive_builder = "0.20.2" futures = { version = "0.3.31", features = ["alloc", "async-await"] } tokio = { version = "1.47.1", default-features = false, features = [ "net", "rt-multi-thread", "time", "sync", "macros", "fs", ] } tokio-util = { version = "0.7.16", default-features = false } pin-project-lite = "0.2.16" async-trait = "0.1.89" # Error handling anyhow = "1.0.99" thiserror = "2.0.16" # http for both server and client http = "1.3.1" http-body-util = "0.1.3" hyper = { version = "1.7.0", default-features = false } hyper-util = { version = "0.1.16", features = ["full"] } futures-util = { version = "0.3.31", default-features = false } futures-channel = { version = "0.3.31", default-features = false } # http client for upstream hyper-tls = { version = "0.6.0", features = [ "alpn", "vendored", ], optional = true } hyper-rustls = { version = "0.27.7", default-features = false, features = [ "aws-lc-rs", "http1", "http2", "rustls-platform-verifier", ], optional = true } # tls and cert management for server rpxy-certs = { path = "../rpxy-certs/", default-features = false } hot_reload = "0.2.0" rustls = { version = "0.23.31", default-features = false } rustls-post-quantum = { version = "0.2.3", optional = true } tokio-rustls = { version = "0.26.2", features = ["early-data"] } # acme rpxy-acme = { path = "../rpxy-acme/", default-features = false, optional = true } # logging tracing = { version = "0.1.41" } # http/3 quinn = { version = "0.11.9", optional = true } h3 = { version = "0.0.8", features = ["tracing"], optional = true } h3-quinn = { version = "0.0.10", optional = true } s2n-quic = { version = "1.64.0", path = "../submodules/s2n-quic/quic/s2n-quic/", default-features = false, features = [ "provider-tls-rustls", ], optional = true } s2n-quic-core = { version = "0.64.0", path = "../submodules/s2n-quic/quic/s2n-quic-core", default-features = false, optional = true } s2n-quic-rustls = { version = "0.64.0", path = "../submodules/s2n-quic/quic/s2n-quic-rustls", optional = true } s2n-quic-h3 = { path = "../submodules/s2n-quic/quic/s2n-quic-h3/", features = [ "tracing", ], optional = true } ########## # for UDP socket wit SO_REUSEADDR when h3 with quinn socket2 = { version = "0.6.0", features = ["all"], optional = true } # cache http-cache-semantics = { path = "../submodules/rusty-http-cache-semantics", default-features = false, optional = true } lru = { version = "0.16.0", optional = true } sha2 = { version = "0.10.9", default-features = false, optional = true } # cookie handling for sticky cookie chrono = { version = "0.4.41", default-features = false, features = [ "unstable-locales", "alloc", "clock", ], optional = true } base64 = { version = "0.22.1", optional = true } [dev-dependencies] tokio-test = "0.4.4"