solid-pod-rs-server 0.4.0-alpha.4

Drop-in Solid Pod server binary. Wraps solid-pod-rs with actix-web and a JSS-compatible layered config loader.
Documentation
[package]
name = "solid-pod-rs-server"
version.workspace = true
edition.workspace = true
license.workspace = true
authors.workspace = true
repository.workspace = true
homepage.workspace = true
documentation.workspace = true
rust-version.workspace = true
description = "Drop-in Solid Pod server binary. Wraps solid-pod-rs with actix-web and a JSS-compatible layered config loader."
keywords = ["solid", "pod", "server", "nostr", "agpl"]
categories = ["web-programming::http-server", "command-line-utilities"]
readme = "README.md"

[lib]
name = "solid_pod_rs_server"
path = "src/lib.rs"

[[bin]]
name = "solid-pod-rs-server"
path = "src/main.rs"

[dependencies]
# Library core — the binary's sole non-transport dependency.
solid-pod-rs = { version = "0.4.0-alpha.4", path = "../solid-pod-rs", features = ["fs-backend", "memory-backend", "config-loader", "legacy-notifications"] }

# IdP crate — Sprint-11 CLI ops (`account delete`, `invite create`)
# dispatch into UserStore::delete and the new InviteStore trait.
solid-pod-rs-idp = { version = "0.4.0-alpha.4", path = "../solid-pod-rs-idp" }

# Sprint-11 CLI: `invite create` surfaces invite records with
# absolute expiry timestamps. Kept here rather than transitively
# through solid-pod-rs so the server binary can build invite URLs
# independently.
chrono = { version = "0.4", features = ["clock"] }

# HTTP transport.
actix-web = "4"

# Async runtime.
tokio = { version = "1", features = ["macros", "rt-multi-thread", "signal", "sync"] }

# CLI parsing — clap derive.
clap = { version = "4", features = ["derive", "env"] }

# Request/response helpers.
bytes = "1"

# Percent-decoding for the defence-in-depth path-traversal middleware.
percent-encoding = "2"

# Async traits for middleware plumbing.
async-trait = "0.1"
futures-util = "0.3"

# Serde for discovery payload construction when sibling interop helpers
# are not feature-gated.
serde = { version = "1", features = ["derive"] }
serde_json = "1"

# Tracing / logging.
tracing = "0.1"
tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }

# Error wiring.
anyhow = "1"

# Optional TLS (rustls). Gated by the `tls` feature so default builds
# keep the dependency surface minimal.
rustls = { version = "0.23", optional = true, default-features = false, features = ["std", "ring"] }
rustls-pemfile = { version = "2", optional = true }

[features]
# Feature umbrella toggles for the server binary.
default = []

# TLS via rustls (actix-web's `rustls-0_23` integration).
tls = ["dep:rustls", "dep:rustls-pemfile", "actix-web/rustls-0_23"]

# Forwarded Sprint-7 sibling features — pass-through to `solid-pod-rs`.
rate-limit = ["solid-pod-rs/rate-limit"]
quota = ["solid-pod-rs/quota"]
did-nostr = ["solid-pod-rs/did-nostr"]
security-primitives = ["solid-pod-rs/security-primitives"]

[dev-dependencies]
tokio = { version = "1", features = ["full"] }
tempfile = "3"
parking_lot = "0.12"
async-trait = "0.1"