[package] name = "kobo-shelf" version = "0.1.0" edition = "2021" # Application, not a published library; lets cargo-deny treat it as private # (see deny.toml `[licenses] private.ignore`). publish = false [dependencies] # Web framework axum = { version = "0.8", features = ["macros", "multipart"] } tokio = { version = "1", features = ["full"] } tower = "0.5" tower-http = { version = "0.7", features = ["cors", "trace", "fs", "limit"] } # Serialization serde = { version = "1", features = ["derive"] } serde_json = "1" # Database (SQLite for both Calibre and app DB) sqlx = { version = "0.9", features = [ "runtime-tokio", "sqlite", "chrono", "uuid", ] } # Error handling error-stack = "0.8" thiserror = "2.0" # Logging / tracing tracing = "0.1" tracing-subscriber = { version = "0.3", features = ["env-filter"] } # Date/time chrono = { version = "0.4", features = ["serde"] } # UUID uuid = { version = "1", features = ["v3", "v4", "serde"] } # Base64 encoding for sync token base64 = "0.23" # CLI argument parsing clap = { version = "4", features = ["derive", "env"] } # .env file loading dotenvy = "0.15" # config.toml parsing toml = "1" # Async utilities futures = "0.3" axum-listener = "0.3" # Embed the Leptos SPA bundle (web-ui/dist) into the binary. In release the # assets are baked in (single-binary deploy); in debug they are read from disk, # so rebuilding the frontend with Trunk needs no server recompile. rust-embed = "8" # EPUB upload: zip container + OPF metadata parsing, content hashing zip = { version = "8", default-features = false, features = ["deflate"] } quick-xml = "0.41" sha2 = "0.11" # Cover transcode to JPEG (decode common formats, encode JPEG) image = { version = "0.25", default-features = false, features = [ "jpeg", "png", "gif", "webp", "bmp", ] } # Online metadata enrichment (OpenLibrary / Google Books) # Held at 0.12: openidconnect 4.0.1 targets reqwest 0.12, and the OIDC client # handoff in oidc.rs requires a matching reqwest version. 0.13 also renames the # `rustls-tls` feature to `rustls`. reqwest = { version = "0.12", default-features = false, features = [ "rustls-tls", "json", ] } # Authentication / sessions axum-login = "0.18" # Held at 0.14: axum-login 0.18 depends on tower-sessions 0.14. The SQLite # session store is our own (src/session_store.rs) rather than the unmaintained # tower-sessions-sqlx-store, which pinned sqlx to 0.8. tower-sessions = { version = "0.14", default-features = false, features = [ "axum-core", "signed", ] } async-trait = "0.1" password-auth = "1.0" time = "0.3" openidconnect = { version = "4.0.1", default-features = false, features = [ "reqwest", "rustls-tls", ] }