[package]
edition = "2024"
rust-version = "1.85"
name = "portail"
version = "2.1.0"
build = "build.rs"
autolib = false
autobins = false
autoexamples = false
autotests = false
autobenches = false
description = "Unified proxy/gateway: AI Gateway + MCP Gateway + CDN cache"
readme = "README.md"
keywords = [
"proxy",
"gateway",
"ai",
"mcp",
"cdn",
]
categories = [
"web-programming::http-server",
"network-programming",
"caching",
]
license = "MIT"
repository = "https://github.com/peterlodri-sec/portail"
resolver = "2"
[package.metadata.deb]
maintainer = "Peter Lodri <peterlodri-sec@github.com>"
copyright = "2026, Peter Lodri <peterlodri-sec@github.com>"
license-file = [
"LICENSE",
"4",
]
extended-description = "Portail is a unified proxy and gateway for AI services, MCP tools, and CDN caching. Built in Rust with zero-copy I/O and SIMD-optimized hashing."
depends = "$auto"
section = "net"
priority = "optional"
assets = [
[
"target/release/portail",
"usr/bin/",
"755",
],
[
"README.md",
"usr/share/doc/portail/README",
"644",
],
[
"LICENSE",
"usr/share/doc/portail/LICENSE",
"644",
],
]
[package.metadata.deb.systemd-units]
enable = true
[features]
aws-lc = ["dep:aws-lc-rs"]
default = []
jemalloc = ["dep:tikv-jemallocator"]
portail_system_alloc = []
store-nats = []
[lib]
name = "portail"
path = "src/lib.rs"
[[bin]]
name = "portail"
path = "src/main.rs"
[[bin]]
name = "portail-mon"
path = "src/bin/portail-mon.rs"
[[test]]
name = "layer_tests"
path = "tests/layer_tests.rs"
[[test]]
name = "proptests"
path = "tests/proptests.rs"
[[test]]
name = "v0_2_integration"
path = "tests/v0_2_integration.rs"
[[bench]]
name = "hot_paths"
path = "benches/hot_paths.rs"
harness = false
[dependencies.aes-gcm]
version = "0.10"
[dependencies.anyhow]
version = "=1.0.103"
[dependencies.argon2]
version = "0.5"
[dependencies.async-graphql]
version = "=7.2.1"
[dependencies.async-nats]
version = "=0.48.0"
[dependencies.async-stream]
version = "=0.3.6"
[dependencies.async-trait]
version = "=0.1.89"
[dependencies.aws-lc-rs]
version = "=1.17.0"
optional = true
[dependencies.axum]
version = "=0.8.9"
features = [
"macros",
"ws",
]
[dependencies.base64]
version = "=0.22.1"
[dependencies.blake3]
version = "=1.8.5"
[dependencies.bytes]
version = "=1.12.0"
[dependencies.cacache]
version = "=13.1.0"
features = ["mmap"]
[dependencies.chrono]
version = "=0.4.45"
features = ["serde"]
[dependencies.clap]
version = "=4.6.1"
features = [
"derive",
"env",
]
[dependencies.clap_complete]
version = "=4.5.44"
[dependencies.dirs]
version = "=5.0.1"
[dependencies.dotenvy]
version = "=0.15.7"
[dependencies.figment]
version = "=0.10.19"
features = [
"toml",
"env",
]
[dependencies.futures]
version = "=0.3.32"
[dependencies.governor]
version = "=0.7.0"
features = ["std"]
[dependencies.hex]
version = "=0.4.3"
[dependencies.hmac]
version = "=0.12.1"
[dependencies.jsonwebtoken]
version = "=9.3.1"
[dependencies.loop-state-manager]
version = "3.0.0"
[dependencies.loopeng]
version = "3.0.0"
[dependencies.metrics]
version = "=0.24.6"
[dependencies.metrics-exporter-prometheus]
version = "=0.16.2"
[dependencies.mimalloc]
version = "=0.1.52"
[dependencies.moka]
version = "=0.12.15"
features = ["future"]
[dependencies.opentelemetry]
version = "=0.27.1"
[dependencies.opentelemetry-otlp]
version = "=0.27.0"
features = [
"grpc-tonic",
"metrics",
]
[dependencies.opentelemetry-semantic-conventions]
version = "=0.27.0"
[dependencies.opentelemetry_sdk]
version = "=0.27.1"
features = ["rt-tokio"]
[dependencies.pkg-ctx]
version = "0.1.0"
[dependencies.portail-agents]
version = "2.0.0"
[dependencies.portail-claude-plugins]
version = "0.1.0"
[dependencies.portail-mcp-wasm]
version = "0.1.0"
[dependencies.portail-plugin-sdk]
version = "3.0.0"
[dependencies.portail-vaked]
version = "3.0.0"
[dependencies.redis]
version = "=0.27.6"
features = [
"tokio-comp",
"connection-manager",
]
[dependencies.regex]
version = "=1.12.4"
[dependencies.reqwest]
version = "=0.12.28"
features = [
"json",
"http2",
"blocking",
]
[dependencies.rpassword]
version = "7"
[dependencies.rusqlite]
version = "=0.33.0"
features = ["bundled"]
[dependencies.rustc-hash]
version = "=2.1.2"
[dependencies.serde]
version = "=1.0.228"
features = ["derive"]
[dependencies.serde_json]
version = "=1.0.150"
[dependencies.sha2]
version = "=0.10.9"
[dependencies.sqlx]
version = "=0.9.0"
features = [
"runtime-tokio",
"sqlite",
"migrate",
]
[dependencies.sysinfo]
version = "=0.32.1"
[dependencies.thiserror]
version = "2"
[dependencies.tikv-jemallocator]
version = "=0.6.1"
optional = true
[dependencies.tokio]
version = "=1.52.3"
features = ["full"]
[dependencies.tokio-stream]
version = "=0.1.18"
features = [
"fs",
"sync",
]
[dependencies.toml]
version = "=0.8.23"
[dependencies.tower]
version = "=0.5.3"
features = ["util"]
[dependencies.tower-http]
version = "=0.6.11"
features = [
"cors",
"trace",
"limit",
]
[dependencies.tracing]
version = "=0.1.44"
[dependencies.tracing-appender]
version = "=0.2.5"
[dependencies.tracing-opentelemetry]
version = "=0.28.0"
[dependencies.tracing-subscriber]
version = "=0.3.23"
features = [
"env-filter",
"json",
]
[dependencies.utoipa]
version = "5"
features = ["axum_extras"]
[dependencies.utoipa-axum]
version = "0.2"
[dependencies.uuid]
version = "=1.23.4"
features = ["v4"]
[dependencies.walkdir]
version = "=2.5.0"
[dependencies.which]
version = "=7.0.3"
[dependencies.zeroize]
version = "1.8"
features = ["derive"]
[dev-dependencies.criterion]
version = "=0.5.1"
features = [
"html_reports",
"async_tokio",
]
[dev-dependencies.loopeng]
version = "3.0.0"
[dev-dependencies.pkg-ctx]
version = "0.1.0"
[dev-dependencies.proptest]
version = "=1.11.0"
[dev-dependencies.tokio]
version = "=1.52.3"
features = ["full"]
[build-dependencies.chrono]
version = "=0.4.45"
[build-dependencies.utoipa]
version = "5"
[profile.bench]
opt-level = 3
lto = "fat"
codegen-units = 1
debug = 0
[profile.dev]
opt-level = 0
debug = 2
split-debuginfo = "unpacked"
incremental = true
[profile.release]
opt-level = 3
lto = "fat"
codegen-units = 1
debug = 0
strip = "symbols"