Our Personal Data Server from scratch!
tranquil.farm
pds
rust
database
fun
oauth
atproto
1[workspace]
2resolver = "2"
3members = [
4 "crates/tranquil-types",
5 "crates/tranquil-config",
6 "crates/tranquil-infra",
7 "crates/tranquil-crypto",
8 "crates/tranquil-storage",
9 "crates/tranquil-cache",
10 "crates/tranquil-ripple",
11 "crates/tranquil-repo",
12 "crates/tranquil-scopes",
13 "crates/tranquil-auth",
14 "crates/tranquil-oauth",
15 "crates/tranquil-comms",
16 "crates/tranquil-db-traits",
17 "crates/tranquil-db",
18 "crates/tranquil-pds",
19 "crates/tranquil-server",
20 "crates/tranquil-sync",
21 "crates/tranquil-oauth-server",
22 "crates/tranquil-api",
23 "crates/tranquil-lexicon",
24 "crates/tranquil-signal",
25 "crates/tranquil-store",
26]
27
28[workspace.package]
29version = "0.6.0"
30edition = "2024"
31license = "AGPL-3.0-or-later"
32
33[workspace.dependencies]
34tranquil-types = { path = "crates/tranquil-types" }
35tranquil-config = { path = "crates/tranquil-config" }
36tranquil-infra = { path = "crates/tranquil-infra" }
37tranquil-crypto = { path = "crates/tranquil-crypto" }
38tranquil-storage = { path = "crates/tranquil-storage" }
39tranquil-cache = { path = "crates/tranquil-cache" }
40tranquil-repo = { path = "crates/tranquil-repo" }
41tranquil-scopes = { path = "crates/tranquil-scopes" }
42tranquil-auth = { path = "crates/tranquil-auth" }
43tranquil-oauth = { path = "crates/tranquil-oauth" }
44tranquil-comms = { path = "crates/tranquil-comms" }
45tranquil-db-traits = { path = "crates/tranquil-db-traits" }
46tranquil-db = { path = "crates/tranquil-db" }
47tranquil-ripple = { path = "crates/tranquil-ripple" }
48tranquil-lexicon = { path = "crates/tranquil-lexicon" }
49tranquil-pds = { path = "crates/tranquil-pds" }
50tranquil-server = { path = "crates/tranquil-server" }
51tranquil-sync = { path = "crates/tranquil-sync" }
52tranquil-oauth-server = { path = "crates/tranquil-oauth-server" }
53tranquil-api = { path = "crates/tranquil-api" }
54tranquil-signal = { path = "crates/tranquil-signal", features = ["fjall-store"] }
55tranquil-store = { path = "crates/tranquil-store" }
56
57presage = { git = "https://github.com/whisperfish/presage", rev = "fe3ed54c4844ae51c3a9fa49cf80a7816a31a425", default-features = false }
58
59unicode-segmentation = "1"
60
61aes-gcm = "0.10"
62backon = "1"
63bincode = { version = "2", features = ["serde"] }
64anyhow = "1.0"
65async-trait = "0.1"
66aws-config = "1.8"
67aws-sdk-s3 = "1.118"
68axum = { version = "0.8", features = ["ws", "macros"] }
69base32 = "0.5"
70base64 = "0.22"
71bcrypt = "0.17"
72bs58 = "0.5"
73bytes = "1.11"
74chrono = { version = "0.4", features = ["serde"] }
75cid = "0.11"
76clap = { version = "4", features = ["derive", "env"] }
77confique = { version = "0.4", features = ["toml"] }
78dotenvy = "0.15"
79ed25519-dalek = { version = "2.1", features = ["pkcs8"] }
80foca = { version = "1", features = ["bincode-codec", "tracing"] }
81futures = "0.3"
82futures-util = "0.3"
83governor = "0.10"
84hex = "0.4"
85hickory-resolver = { version = "0.24", features = ["tokio-runtime"] }
86hkdf = "0.12"
87hmac = "0.12"
88http = "1.4"
89image = { version = "0.25", default-features = false, features = ["jpeg", "png", "gif", "webp"] }
90qrcodegen = "1.8"
91infer = "0.19"
92ipld-core = "0.4"
93iroh-car = "0.5"
94jacquard-common = { version = "0.9", features = ["crypto-k256"] }
95jacquard-repo = "0.9"
96lettre = { version = "0.11", default-features = false, features = ["builder", "smtp-transport", "tokio1", "tokio1-rustls-tls", "pool", "dkim", "tracing"] }
97jsonwebtoken = { version = "10.2", features = ["rust_crypto"] }
98k256 = { version = "0.13", features = ["ecdsa", "pem", "pkcs8"] }
99metrics = "0.24"
100metrics-exporter-prometheus = { version = "0.16", default-features = false, features = ["http-listener"] }
101multibase = "0.9"
102parking_lot = "0.12"
103multihash = "0.19"
104p256 = { version = "0.13", features = ["ecdsa"] }
105p384 = { version = "0.13", features = ["ecdsa"] }
106rand = "0.8"
107redis = { version = "1.0", features = ["tokio-comp", "connection-manager"] }
108regex = "1"
109rsa = "0.9"
110secrecy = { version = "0.10", features = ["serde"] }
111reqwest = { version = "0.12", default-features = false, features = ["json", "rustls-tls-webpki-roots", "http2", "charset", "macos-system-configuration"] }
112serde = { version = "1.0", features = ["derive"] }
113serde_bytes = "0.11"
114serde_ipld_dagcbor = "0.6"
115serde_json = "1.0"
116serde_urlencoded = "0.7"
117sha2 = "0.10"
118sqlx = { version = "0.8", features = ["runtime-tokio-rustls", "postgres", "uuid", "chrono", "json"] }
119subtle = "2.5"
120thiserror = "2.0"
121tokio = { version = "1.48", features = ["macros", "rt-multi-thread", "time", "signal", "process", "io-util", "fs"] }
122tokio-util = "0.7.18"
123tokio-tungstenite = { version = "0.28", features = ["rustls-tls-webpki-roots"] }
124totp-rs = { version = "5", features = ["qr"] }
125tower = "0.5"
126tower-http = { version = "0.6", features = ["fs", "cors"] }
127tower-layer = "0.3"
128tracing = "0.1"
129tracing-subscriber = "0.3"
130urlencoding = "2.1"
131uuid = { version = "1.19", features = ["v4", "v5", "v7", "fast-rng", "serde"] }
132webauthn-rs = { version = "0.5", features = ["danger-allow-state-serialisation", "danger-user-presence-only-security-keys", "conditional-ui"] }
133webauthn-rs-proto = "0.5"
134zip = { version = "7.0", default-features = false, features = ["deflate"] }
135
136ciborium = "0.2"
137ctor = "0.6"
138testcontainers = "0.26"
139testcontainers-modules = { version = "0.14", features = ["postgres"] }
140wiremock = "0.6"
141
142[patch.crates-io]
143curve25519-dalek = { git = "https://github.com/signalapp/curve25519-dalek", tag = "signal-curve25519-4.1.3" }
144
145[profile.release]
146lto = "fat"
147strip = true
148codegen-units = 1
149panic = "abort"
150
151[profile.bench]
152debug = 1
153strip = false