[workspace] members = ["crates/*"] resolver = "3" [workspace.package] edition = "2024" # keep in sync with .rustfmt.toml version = "0.2.0-dev" license = "EUPL-1.2" readme = true rust-version = "1.95.0" # follows nightly Rust [workspace.dependencies] # Crate components for Pinakes. pinakes-core = { path = "./crates/pinakes-core" } pinakes-server = { path = "./crates/pinakes-server" } pinakes-plugin-api = { path = "./crates/pinakes-plugin-api" } pinakes-ui = { path = "./crates/pinakes-ui" } pinakes-tui = { path = "./crates/pinakes-tui" } # Async runtime tokio = { version = "1.49.0", features = ["full"] } tokio-util = { version = "0.7.18", features = ["rt"] } # Serialization serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.149" toml = "0.9.11" # CLI argument parsing clap = { version = "4.5.57", features = ["derive", "env"] } # Date/time chrono = { version = "0.4.43", features = ["serde"] } # IDs uuid = { version = "1.20.0", features = ["v7", "serde"] } # Error handling thiserror = "2.0.18" anyhow = "1.0.100" # Logging tracing = "0.1.44" tracing-subscriber = { version = "0.3.22", features = ["env-filter", "json"] } # Hashing blake3 = "1.8.3" # Metadata extraction lofty = "0.23.1" lopdf = "0.39.0" epub = "2.1.5" matroska = "0.30.0" gray_matter = "0.3.2" kamadak-exif = "0.6.1" # Database - SQLite rusqlite = { version = "0.37", features = ["bundled", "column_decltype"] } # Database - PostgreSQL tokio-postgres = { version = "0.7.16", features = [ "with-uuid-1", "with-chrono-0_4", "with-serde_json-1", ] } deadpool-postgres = "0.14.1" postgres-types = { version = "0.2.12", features = ["derive"] } postgres-native-tls = "0.5.2" native-tls = "0.2.14" # Migrations refinery = { version = "0.9.0", features = ["rusqlite", "tokio-postgres"] } # Filesystem walkdir = "2.5.0" notify = { version = "8.2.0", features = ["macos_fsevent"] } # Search parser winnow = "0.7.14" # HTTP server axum = { version = "0.8.8", features = ["macros", "multipart"] } axum-server = { version = "0.8.0" } tower = "0.5.3" tower-http = { version = "0.6.8", features = ["cors", "trace", "set-header"] } governor = "0.10.4" tower_governor = "0.8.0" # HTTP client reqwest = { version = "0.13.1", features = ["json", "query", "blocking"] } # TUI ratatui = "0.30.0" crossterm = "0.29.0" # Desktop/Web UI dioxus = { version = "0.7.3", features = ["desktop", "router"] } # Async trait (dyn-compatible async methods) async-trait = "0.1.89" # Async utilities futures = "0.3.31" # Image processing (thumbnails) image = { version = "0.25.9", default-features = false, features = [ "jpeg", "png", "webp", "gif", "tiff", "bmp", ] } # Markdown rendering pulldown-cmark = "0.13.0" ammonia = "4.1.2" # Password hashing argon2 = { version = "0.5.3", features = ["std"] } # Misc mime_guess = "2.0.5" regex = "1.12.3" dioxus-free-icons = { version = "0.10.0", features = ["font-awesome-solid"] } rfd = "0.17.2" gloo-timers = { version = "0.3.0", features = ["futures"] } rand = "0.10.0" moka = { version = "0.12.13", features = ["future"] } urlencoding = "2.1.3" image_hasher = "3.1.0" percent-encoding = "2.3.2" http = "1.4.0" # WASM runtime for plugins wasmtime = { version = "41.0.3", features = ["component-model"] } wit-bindgen = "0.52.0" [profile.dev.package] blake3 = { opt-level = 3 } image = { opt-level = 3 } regex = { opt-level = 3 } argon2 = { opt-level = 3 } matroska = { opt-level = 3 } lopdf = { opt-level = 3 } lofty = { opt-level = 3 }