[package]
edition = "2024"
rust-version = "1.93"
name = "vane"
version = "0.9.2"
build = "build.rs"
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "A flow-based reverse proxy with multi-layer routing and programmable pipelines."
homepage = "https://vaneproxy.com"
readme = "README.md"
keywords = [
"network",
"server",
"web",
"vane",
"proxy",
]
categories = [
"network-programming",
"web-programming",
"asynchronous",
]
license = "MIT"
repository = "https://github.com/canmi21/vane.git"
[package.metadata.docs.rs]
all-features = true
[features]
aws-lc-rs = [
"rustls?/aws-lc-rs",
"tokio-rustls?/aws-lc-rs",
"hyper-rustls?/aws-lc-rs",
"quinn?/aws-lc-rs",
"reqwest?/rustls",
]
cgi = ["dep:base64"]
console = ["dep:axum"]
default = [
"full",
"aws-lc-rs",
]
domain-target = ["dep:hickory-resolver"]
full = [
"tcp",
"udp",
"tls",
"quic",
"httpx",
"h2upstream",
"h3upstream",
"cgi",
"static",
"ratelimit",
"domain-target",
"console",
"swagger-ui",
"lazycert",
]
h2upstream = ["dep:reqwest"]
h3upstream = [
"quic",
"dep:h3",
"dep:h3-quinn",
]
httpx = [
"dep:hyper",
"dep:hyper-util",
"dep:http-body",
"dep:http-body-util",
"dep:tower-service",
"dep:axum",
]
lazycert = ["dep:reqwest"]
quic = [
"dep:quinn",
"dep:aes",
]
ratelimit = []
ring = [
"rustls?/ring",
"tokio-rustls?/ring",
"hyper-rustls?/ring",
"quinn?/ring",
"reqwest?/rustls-no-provider",
"reqwest?/rustls-native-certs",
]
static = [
"dep:infer",
"dep:mime_guess",
]
swagger-ui = ["dep:utoipa-swagger-ui"]
tcp = ["dep:fancy-regex"]
tls = [
"dep:rustls",
"dep:tokio-rustls",
"dep:rcgen",
"dep:hyper-rustls",
"dep:tls-parser",
"dep:x509-parser",
"dep:rustls-pemfile",
"dep:rustls-native-certs",
]
udp = ["dep:fancy-regex"]
[[bin]]
name = "vane"
path = "src/main.rs"
[dependencies.aes]
version = "0.8"
optional = true
[dependencies.ahash]
version = "0.8"
[dependencies.anyhow]
version = "1"
[dependencies.async-trait]
version = "0.1"
[dependencies.axum]
version = "0.8"
features = [
"macros",
"multipart",
]
optional = true
[dependencies.base64]
version = "0.22"
optional = true
[dependencies.bytes]
version = "1"
[dependencies.chrono]
version = "0.4"
features = ["serde"]
[dependencies.dashmap]
version = "6"
[dependencies.dotenvy]
version = "0.15"
[dependencies.fancy-log]
version = "0.1"
[dependencies.fancy-regex]
version = "0.17"
optional = true
[dependencies.flate2]
version = "1"
[dependencies.futures]
version = "0.3"
[dependencies.futures-util]
version = "0.3"
[dependencies.h3]
version = "0.0.8"
optional = true
[dependencies.h3-quinn]
version = "0.0.10"
optional = true
[dependencies.hex]
version = "0.4"
[dependencies.hickory-resolver]
version = "0.25"
optional = true
[dependencies.http]
version = "1"
[dependencies.http-body]
version = "1"
optional = true
[dependencies.http-body-util]
version = "0.1"
optional = true
[dependencies.httparse]
version = "1"
[dependencies.hyper]
version = "1"
features = ["full"]
optional = true
[dependencies.hyper-rustls]
version = "0.27"
features = [
"http2",
"native-tokio",
"logging",
"tls12",
]
optional = true
default-features = false
[dependencies.hyper-util]
version = "0.1"
features = ["full"]
optional = true
[dependencies.infer]
version = "0.19"
optional = true
[dependencies.lazy-motd]
version = "1"
[dependencies.lazy_static]
version = "1"
[dependencies.live]
version = "0.4"
features = ["full"]
[dependencies.mime_guess]
version = "2"
optional = true
[dependencies.once_cell]
version = "1"
[dependencies.oneshot]
version = "0.1"
[dependencies.percent-encoding]
version = "2"
[dependencies.quinn]
version = "0.11"
features = ["runtime-tokio"]
optional = true
default-features = false
[dependencies.quinn-proto]
version = "0.11"
[dependencies.rand]
version = "0.9"
[dependencies.rcgen]
version = "0.14"
optional = true
[dependencies.regex]
version = "1"
[dependencies.reqwest]
version = "0.13"
features = ["json"]
optional = true
default-features = false
[dependencies.ring]
version = "0.17"
[dependencies.rustls]
version = "0.23"
features = [
"logging",
"std",
"tls12",
]
optional = true
default-features = false
[dependencies.rustls-native-certs]
version = "0.8"
optional = true
[dependencies.rustls-pemfile]
version = "2"
optional = true
[dependencies.serde]
version = "1"
features = ["derive"]
[dependencies.serde_json]
version = "1"
[dependencies.serde_yaml]
version = "0.9"
[dependencies.sha2]
version = "0.10"
[dependencies.shellexpand]
version = "3"
[dependencies.sigterm]
version = "0.3"
features = ["full"]
[dependencies.tar]
version = "0.4"
[dependencies.thiserror]
version = "2"
[dependencies.tls-parser]
version = "0.12"
optional = true
[dependencies.tokio]
version = "1"
features = [
"full",
"signal",
]
[dependencies.tokio-rustls]
version = "0.26"
features = [
"logging",
"tls12",
]
optional = true
default-features = false
[dependencies.tokio-util]
version = "0.7"
[dependencies.toml]
version = "0.9"
[dependencies.tower-service]
version = "0.3"
optional = true
[dependencies.utoipa]
version = "5"
features = ["axum_extras"]
[dependencies.utoipa-axum]
version = "0.2"
[dependencies.utoipa-swagger-ui]
version = "9"
features = ["axum"]
optional = true
[dependencies.uuid]
version = "1"
features = [
"v4",
"v7",
"serde",
]
[dependencies.validator]
version = "0.20"
features = ["derive"]
[dependencies.x509-parser]
version = "0.18"
optional = true
[dev-dependencies.axum]
version = "0.8"
features = ["macros"]
[dev-dependencies.dirs]
version = "6"
[dev-dependencies.serial_test]
version = "3"
[dev-dependencies.temp-env]
version = "0.3"
[dev-dependencies.tempfile]
version = "3"
[dev-dependencies.tower]
version = "0.5"
[build-dependencies.chrono]
version = "0.4"
features = ["serde"]
[lints.clippy]
await_holding_lock = "warn"
dbg_macro = "warn"
empty_enum = "warn"
enum_glob_use = "warn"
equatable_if_let = "warn"
exit = "warn"
filter_map_next = "warn"
fn_params_excessive_bools = "warn"
if_let_mutex = "warn"
implicit_clone = "warn"
imprecise_flops = "warn"
inefficient_to_string = "warn"
linkedlist = "warn"
lossy_float_literal = "warn"
macro_use_imports = "warn"
manual_let_else = "warn"
match_same_arms = "warn"
match_wildcard_for_single_variants = "warn"
mem_forget = "warn"
must_use_candidate = "warn"
needless_borrow = "warn"
needless_continue = "warn"
needless_pass_by_ref_mut = "warn"
needless_pass_by_value = "warn"
option_option = "warn"
redundant_clone = "warn"
ref_option = "warn"
rest_pat_in_fully_bound_structs = "warn"
return_self_not_must_use = "warn"
single_match_else = "warn"
str_to_string = "warn"
suboptimal_flops = "warn"
todo = "warn"
trivially_copy_pass_by_ref = "warn"
type_complexity = "allow"
uninlined_format_args = "warn"
unnested_or_patterns = "warn"
unused_self = "warn"
use_self = "warn"
verbose_file_reads = "warn"
[lints.rust]
missing_debug_implementations = "allow"
missing_docs = "allow"
unreachable_pub = "warn"
unsafe_code = "forbid"
[lints.rust.rust_2018_idioms]
level = "warn"
priority = -1
[profile.minimum]
opt-level = "z"
lto = true
codegen-units = 1
panic = "abort"
inherits = "release"
strip = true
[profile.release]
opt-level = "z"
lto = true
codegen-units = 1