[package]
name = "alkhttp"
version = "0.4.1"
edition = "2021"
rust-version = "1.88"
license = "MIT OR Apache-2.0"
description = "HTTP interface for the alk stack: serves HTTP/1.1 + HTTP/2 on standard ALPNs (with WebSocket upgrade carrying the channels protocol) and hosts the HTTP-backed call-protocol adapters"
readme = "README.md"
repository = "https://git.alk.dev/alkdev/alkhttp"
keywords = ["http", "websocket", "rpc", "openapi", "mcp"]
categories = ["network-programming", "web-programming", "asynchronous"]
exclude = [".opencode/", "AGENTS.md", "docs/", "tasks/", "scripts/"]
[lib]
name = "alkhttp"
[features]
default = ["server", "client", "h2", "http1"]
server = ["dep:axum", "dep:hyper", "dep:hyper-util", "dep:uuid", "openapi", "http1"]
client = ["dep:arc-swap", "dep:httpdate", "dep:percent-encoding", "dep:reqwest", "dep:reqwest-middleware", "dep:reqwest-retry", "dep:url", "openapi"]
openapi = ["dep:yaml_serde"]
mcp = ["dep:rmcp"]
wss = ["dep:tokio-tungstenite"]
test-support = ["server", "dep:tokio-tungstenite"]
h2 = ["server", "dep:hyper", "hyper-util/http2", "hyper/http2"]
http1 = ["server", "dep:hyper", "hyper-util/http1", "hyper/http1"]
[dependencies]
alkcall = { version = "0.7", features = ["gateway"] }
arc-swap = { version = "1", optional = true }
axum = { version = "0.8", optional = true, features = ["ws"] }
bytes = "1"
futures = "0.3"
http = "1"
httpdate = { version = "1", optional = true }
hyper = { version = "1", optional = true, features = ["server"] }
hyper-util = { version = "0.1", optional = true, features = ["server", "service", "tokio"] }
jsonschema = { version = "0.46", default-features = false }
parking_lot = "0.12"
percent-encoding = { version = "2", optional = true }
reqwest = { version = "0.13", optional = true, default-features = false, features = ["json", "stream", "rustls"] }
reqwest-middleware = { version = "0.5", optional = true }
reqwest-retry = { version = "0.9", optional = true }
tokio = { version = "1", features = ["macros", "rt-multi-thread", "io-util", "net", "fs", "time", "sync"] }
tokio-tungstenite = { version = "0.29", optional = true, default-features = false, features = ["connect", "rustls-tls-webpki-roots", "handshake"] }
serde = { version = "1", features = ["derive"] }
serde_json = "1"
async-trait = "0.1"
tracing = "0.1"
thiserror = "2"
uuid = { version = "1", optional = true, features = ["v4"] }
url = { version = "2", optional = true }
yaml_serde = { version = "0.10", optional = true }
rmcp = { version = "1.8", optional = true, default-features = false, features = [
"client",
"server",
"transport-streamable-http-client-reqwest",
"transport-streamable-http-server",
] }
[dev-dependencies]
http-body-util = "0.1"
tower = { version = "0.5", features = ["util"] }
tokio-tungstenite = { version = "0.29", default-features = false, features = ["connect"] }
openapiv3 = "2"
rcgen = "0.14"
tokio-rustls = "0.26"
rustls = { version = "0.23", default-features = false, features = ["aws_lc_rs", "std", "tls12"] }
rustls-pki-types = "1"
uuid = { version = "1", features = ["v4"] }
[[test]]
name = "ws_upgrade_session"
required-features = ["test-support"]
[[test]]
name = "ws_overlay_ops"
required-features = ["test-support"]
[[test]]
name = "from_mcp_integration"
required-features = ["server", "client", "mcp"]
[[test]]
name = "full_surface"
required-features = ["server", "client", "openapi", "mcp", "test-support"]
[[test]]
name = "client_config_reload"
required-features = ["client"]
[[test]]
name = "client_tls"
required-features = ["client"]
[[test]]
name = "retry_after_budget"
required-features = ["client"]
[[test]]
name = "retry_policy_wire"
required-features = ["client"]