[package] name = "backend" version = "0.1.0" edition = "2021" [features] default = ["push-notifications"] push-notifications = ["web-push", "openssl"] [dependencies] axum = { version = "0.8", features = ["macros", "ws"] } tokio = { version = "1", features = ["full"] } tower = { version = "0.4", features = ["util", "timeout"] } tower-http = { version = "0.5", features = ["fs", "trace", "cors", "compression-full"] } serde = { version = "1", features = ["derive"] } serde_json = "1" tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } tokio-stream = "0.1" bytes = "1" futures = "0.3" quick-xml = { version = "0.31", features = ["serde", "serialize"] } # We might need `tokio-util` for codecs if we implement SCGI manually tokio-util = { version = "0.7", features = ["codec", "io"] } clap = { version = "4.4", features = ["derive", "env"] } rust-embed = "8.2" mime_guess = "2.0" shared = { path = "../shared" } thiserror = "2.0.18" dotenvy = "0.15.7" utoipa = { version = "5.4.0", features = ["axum_extras"] } utoipa-swagger-ui = { version = "9.0.2", features = ["axum"] } web-push = { version = "0.10", default-features = false, features = ["hyper-client"], optional = true } base64 = "0.22" openssl = { version = "0.10", features = ["vendored"], optional = true } sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite"] } bcrypt = "0.17.0" axum-extra = { version = "0.10", features = ["cookie"] } rand = "0.8" anyhow = "1.0.101" time = { version = "0.3.47", features = ["serde", "formatting", "parsing"] }