An easy-to-host PDS on the ATProtocol, iPhone and MacOS. Maintain control of your keys and data, always.
1[workspace]
2members = [
3 "crates/relay",
4 "crates/repo-engine",
5 "crates/crypto",
6 "crates/common",
7 "apps/identity-wallet/src-tauri",
8]
9resolver = "2"
10
11[workspace.package]
12version = "0.1.0"
13edition = "2021"
14publish = false
15
16# Declare shared dependency versions here.
17# Individual crates opt in with `{ workspace = true }`.
18[workspace.dependencies]
19# Async runtime
20tokio = { version = "1", features = ["full"] }
21
22# Web framework (relay)
23axum = "0.7"
24
25# HTTP client (relay)
26reqwest = { version = "0.12", features = ["json"] }
27
28# Database
29sqlx = { version = "0.8", features = ["runtime-tokio", "sqlite"] }
30
31# Serialization
32serde = { version = "1", features = ["derive"] }
33serde_json = "1"
34toml = "0.8"
35
36# CLI argument parsing (relay)
37clap = { version = "4", features = ["derive", "env"] }
38
39# Error handling
40anyhow = "1"
41thiserror = "2"
42
43# Date/time
44chrono = { version = "0.4", default-features = false, features = ["clock", "std"] }
45
46# Observability
47tracing = { version = "0.1", features = ["log"] }
48tracing-subscriber = { version = "0.3", features = ["env-filter"] }
49tracing-opentelemetry = "0.29"
50opentelemetry = { version = "0.28", features = ["trace"] }
51opentelemetry-otlp = { version = "0.28", features = ["trace", "grpc-tonic"] }
52opentelemetry_sdk = { version = "0.28", features = ["rt-tokio", "trace"] }
53
54# HTTP middleware
55tower-http = { version = "0.5", features = ["trace", "cors"] }
56tower = { version = "0.5", features = ["util"] }
57
58# ATProto (repo-engine)
59# atrium-api = "0.22"
60# atrium-repo = "0.1"
61
62# Crypto (crypto)
63# rsky-crypto = "0.2"
64p256 = { version = "0.13", features = ["ecdsa", "pkcs8"] }
65aes-gcm = "0.10"
66multibase = "0.9"
67rand_core = { version = "0.6", features = ["getrandom"] }
68base64 = "0.21"
69ciborium = "0.2"
70data-encoding = "2"
71sha2 = "0.10"
72zeroize = "1"
73urlencoding = "2"
74subtle = "2"
75uuid = { version = "1", features = ["v4"] }
76
77# JWT (relay auth)
78jsonwebtoken = "9"
79
80# Password hashing (relay createSession)
81argon2 = { version = "0.5", features = ["password-hash"] }
82
83# ATProto handle resolution — DNS TXT fallback (relay)
84hickory-resolver = { version = "0.25", features = ["tokio", "system-config"] }
85
86# Testing
87tempfile = "3"
88
89# Intra-workspace
90common = { path = "crates/common" }
91crypto = { path = "crates/crypto" }
92repo-engine = { path = "crates/repo-engine" }
93
94# ── Local patches ─────────────────────────────────────────────────────────────
95#
96# swift-rs 1.0.7 does not pass --disable-sandbox to `swift build`. On macOS 26
97# (Tahoe), sandbox_apply() returns EPERM during manifest compilation, breaking
98# the Tauri ios-api build step. The local patch adds --disable-sandbox.
99# Remove when swift-rs ships a fix upstream.
100[patch.crates-io]
101swift-rs = { path = "apps/identity-wallet/swift-rs-patch" }