Cargo.toml
⎇
Raw
1[package]
2name = "server"
3version = "0.1.0"
4edition = "2024"
5license = "AGPL-3.0-or-later"
6
7[[bin]]
8name = "filebrowser-ng"
9path = "src/main.rs"
10
11[dependencies]
12api-types = { path = "../api-types" }
13pimdav = { path = "../pimdav" }
14anyhow = "1"
15argon2 = "0.6"
16axum = "0.8"
17bytes = "1"
18chrono = { version = "0.4", features = ["serde"] }
19clap = { version = "4", features = ["derive", "env"] }
20# WebDAV protocol only. The bundled `localfs`/`memfs` backends are off: the
21# dav filesystem is `api::dav`, which goes through `crate::fs` so that root
22# containment, read-only roots and share scoping apply to a mount too.
23dav-server = { version = "0.11", default-features = false }
24# Thumbnails: decode only what the grid can show. The default feature set
25# also pulls in rav1e and exr, which are large and unused here.
26image = { version = "0.25", default-features = false, features = [
27 "jpeg",
28 "png",
29 "gif",
30 "webp",
31 "bmp",
32 "tiff",
33] }
34# Lanczos3 downscaling. `image`'s own is 15x slower at the same quality.
35fast_image_resize = { version = "6", features = ["image"] }
36# libwebp for the encoder. The crate vendors the C source and builds it with
37# `cc`; no system library, same as the bundled SQLite.
38webp = "0.3"
39# `default-features = false` drops the `cfb` dependency (compound-document
40# detection we do not need) and makes this a zero-dependency crate.
41infer = { version = "0.22", default-features = false, features = ["alloc"] }
42mime_guess = "2"
43# CalDAV hrefs. Already in the tree via `url`.
44percent-encoding = "2"
45multer = "3"
46rusqlite = { version = "0.40", features = ["bundled"] }
47serde = { version = "1", features = ["derive"] }
48serde_json = "1"
49sha2 = "0.11"
50tokio = { version = "1", features = [
51 "rt-multi-thread",
52 "macros",
53 "fs",
54 "io-util",
55 "sync",
56 "time",
57 "signal",
58 "process",
59] }
60tar = "0.4"
61flate2 = "1"
62zstd = "0.14"
63# Deflate only; the defaults add AES, bzip2, lzma, ppmd, zopfli.
64zip = { version = "9.0.0-pre3", default-features = false, features = ["deflate-flate2-zlib-rs"] }
65tower-http = { version = "0.7", features = ["trace", "set-header", "fs"] }
66# Named in the `DavLockSystem` impl. dav-server does not re-export it, so the
67# version has to track dav-server's own.
68xmltree = "0.12"
69futures-util = "0.3"
70# Typed `Authorization: Basic` parsing. Already in the tree via dav-server.
71headers = "0.4"
72tracing = "0.1"
73tracing-subscriber = { version = "0.3", features = ["env-filter"] }
74ignore = "0.4"
75grep = "0.4"
76webauthn-rs = { version = "0.5.5", features = ["conditional-ui"], default-features = false }
77getrandom = "0.4"
78# For `ResidentKeyRequirement` and `AllowCredentials`, which `webauthn-rs` uses
79# internally but does not re-export. Keep this version equal to webauthn-rs'
80# own: it already pulls this crate in, and two different versions would compile
81# while being different types.
82webauthn-rs-proto = "0.5.5"
83
84[dev-dependencies]
85base64 = "0.23"
86tempfile = "3"
87tower = { version = "0.5", features = ["util"] }
88http-body-util = "0.1"
89
90[dependencies.rust-embed]
91version = "8"
92optional = true
93
94[features]
95# Embed the frontend (built into server/dist by `just build`).
96# Without this feature the server reads the frontend from disk at runtime
97# (Trunk's output directory, or $FBNG_DIST), which is the dev flow.
98embedded = ["dep:rust-embed"]
99