Jump to…
snowinitial commitqoxwzsukwmkx1mo
1[workspace]
2resolver = "2"
3# Crates are added here as they land, so `cargo test` at the workspace root is
4# green at every commit rather than only at the end.
5members = [
6 "crates/df-index",
7 "crates/df-db",
8 "crates/df-auth",
9 "crates/df-store",
10 "crates/df-render",
11 "crates/df-worker",
12 "crates/df-admin",
13 "crates/df-hook",
14 "crates/df-ssh",
15 "crates/df-web",
16]
17
18[workspace.package]
19version = "0.1.0"
20edition = "2021"
21rust-version = "1.85"
22license = "Apache-2.0"
23
24[workspace.dependencies]
25# ─── async runtime ───────────────────────────────────────────────────────────
26tokio = { version = "1", features = ["rt-multi-thread", "macros", "net", "io-util", "signal", "process", "time", "fs", "sync"] }
27async-trait = "0.1"
28futures = "0.3"
29
30# ─── errors, logging ─────────────────────────────────────────────────────────
31anyhow = "1"
32thiserror = "2"
33tracing = "0.1"
34tracing-subscriber = { version = "0.3", features = ["env-filter", "json"] }
35
36# ─── database ────────────────────────────────────────────────────────────────
37# `postgres` + rustls: the provided instance requires sslmode=require.
38sqlx = { version = "0.8", default-features = false, features = [
39 "runtime-tokio", "tls-rustls-aws-lc-rs", "postgres", "uuid", "chrono",
40 "json", "macros", "migrate", "ipnetwork",
41] }
42uuid = { version = "1", features = ["v7", "serde"] }
43chrono = { version = "0.4", default-features = false, features = ["std", "serde", "clock"] }
44
45# ─── git plumbing ────────────────────────────────────────────────────────────
46# CONSTRAINT (spec §3 rule 1): `gix` may appear ONLY in df-store's dependency
47# list. This is enforced by `scripts/check-store-boundary.sh` in CI.
48gix = { version = "0.68", default-features = false, features = [
49 "max-performance-safe", "blob-diff", "revision", "attributes",
50 # Landing a change server-side (decided §13.2: fast-forward + merge commit).
51 # `merge` brings the three-way tree merge; `tree-editor` writes its result.
52 "merge", "tree-editor",
53] }
54
55# ─── web ─────────────────────────────────────────────────────────────────────
56axum = { version = "0.8", features = ["macros", "http2"] }
57axum-extra = { version = "0.10", features = ["cookie", "typed-header"] }
58tower = { version = "0.5", features = ["util", "timeout", "limit"] }
59tower-http = { version = "0.6", features = ["trace", "compression-gzip", "set-header", "catch-panic", "limit"] }
60maud = { version = "0.27", features = ["axum"] }
61http = "1"
62hyper = "1"
63mime_guess = "2"
64
65# ─── auth ────────────────────────────────────────────────────────────────────
66openidconnect = "4"
67argon2 = "0.5"
68rand = "0.8"
69base64 = "0.22"
70hmac = "0.12"
71sha2 = "0.10"
72subtle = "2"
73
74# ─── ssh ─────────────────────────────────────────────────────────────────────
75russh = "0.51"
76russh-keys = "0.49"
77# Parsing user-pasted public keys in df-auth. Upstream `ssh-key` rather than
78# russh's vendored fork: the SHA256 fingerprint format is standardised, so both
79# sides agree, and df-auth does not need to pull in an SSH server.
80ssh-key = { version = "0.6", features = ["ed25519", "ecdsa", "rsa"] }
81
82# ─── rendering ───────────────────────────────────────────────────────────────
83comrak = "0.39"
84ammonia = "4"
85tree-sitter = "0.25"
86tree-sitter-highlight = "0.25"
87similar = { version = "2", features = ["text", "inline"] }
88
89# ─── misc ────────────────────────────────────────────────────────────────────
90serde = { version = "1", features = ["derive"] }
91serde_json = "1"
92reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls"] }
93lru = "0.12"
94url = "2"
95percent-encoding = "2"
96clap = { version = "4", features = ["derive", "env"] }
97dotenvy = "0.15"
98hex = "0.4"
99
100[profile.release]
101# The indexer walks large object graphs; LTO and a single codegen unit are worth
102# the build time. `panic = "abort"` is deliberately NOT set — df-web catches
103# panics per-request via tower-http's CatchPanic so one bad diff cannot take the
104# process down (spec §8).
105lto = "thin"
106codegen-units = 1
107strip = "debuginfo"

107 lines · TOML