Skip to main content

max / makenotwork

5.2 KB · 166 lines History Blame Raw
1 [workspace]
2 resolver = "2"
3 members = [
4 "crates/mt-core",
5 "crates/mt-db",
6 ]
7 default-members = ["."]
8
9 [workspace.package]
10 version = "0.4.1"
11 edition = "2024"
12 license = "LicenseRef-PolyForm-Noncommercial-1.0.0"
13
14 [workspace.dependencies]
15 # Core
16 tokio = { version = "1", features = ["rt-multi-thread", "sync", "time", "macros", "signal"] }
17 tokio-util = { version = "0.7", features = ["io"] }
18 thiserror = "2"
19 serde = { version = "1", features = ["derive"] }
20 serde_json = "1"
21 tracing = "0.1"
22 tracing-subscriber = { version = "0.3", features = ["env-filter"] }
23
24 # Web
25 axum = { version = "0.8", features = ["ws", "multipart"] }
26 tower = "0.5"
27 tower-http = { version = "0.7", features = ["fs", "cors", "trace", "set-header", "timeout"] }
28 tower-sessions = "0.14"
29 tower-sessions-sqlx-store = { version = "0.15", features = ["postgres"] }
30
31 # HTTP client / crypto
32 # `rustls-no-provider` rather than `rustls`: the latter is an alias for
33 # `__rustls-aws-lc-rs`, which links a C crypto backend. The provider is ring
34 # (pure Rust), installed process-wide by `crate::tls` before any client is built.
35 reqwest = { version = "0.13", default-features = false, features = ["json", "rustls-no-provider"] }
36 rustls = { version = "0.23", default-features = false, features = ["std", "tls12", "logging", "ring"] }
37 # Reads the host trust store, which is what reqwest's platform verifier does on
38 # Linux and what the AWS client behind s3-storage calls directly. Already in the
39 # tree through both of those; declared here so trust_store can probe the same
40 # store the outbound paths will use (deploy/README.md).
41 rustls-native-certs = "0.8"
42 # Pinned to the exact major reqwest resolves so the SSRF pre-check parses the
43 # host with the same parser reqwest connects through (link_preview::validate_url).
44 url = "2"
45 sha2 = "0.11"
46 hmac = "0.13"
47 base64 = "0.22"
48 rand = "0.10"
49
50 # Live chat
51 livechat = { path = "../shared/livechat", features = ["axum"] }
52 async-trait = "0.1"
53 dashmap = "6"
54
55 # S3 storage
56 s3-storage = { path = "../shared/s3-storage" }
57
58 # Database
59 sqlx = { version = "0.8", features = ["runtime-tokio", "postgres", "chrono", "uuid"] }
60
61 # Rate limiting
62 tower_governor = "0.8"
63 governor = "0.10"
64
65 # Utilities
66 chrono = { version = "0.4", features = ["serde"] }
67 uuid = { version = "1", features = ["v4", "serde"] }
68 pulldown-cmark = "0.13"
69 askama = "0.16.0"
70
71 # Internal crates
72 mt-core = { path = "crates/mt-core" }
73 mt-db = { path = "crates/mt-db" }
74 tagtree = { path = "../shared/tagtree" }
75
76 [package]
77 name = "multithreaded"
78 license.workspace = true
79 version.workspace = true
80 edition.workspace = true
81
82 [dependencies]
83 mt-core = { workspace = true }
84 mt-db = { workspace = true }
85 tokio = { workspace = true }
86 tokio-util = { workspace = true }
87 axum = { workspace = true }
88 tower = { workspace = true }
89 tower-http = { workspace = true }
90 tracing = { workspace = true }
91 tracing-subscriber = { workspace = true }
92 serde = { workspace = true }
93 serde_json = { workspace = true }
94 askama = { workspace = true }
95 chrono = { workspace = true }
96 uuid = { workspace = true }
97 sqlx = { workspace = true }
98 tower-sessions = { workspace = true }
99 tower-sessions-sqlx-store = { workspace = true }
100 reqwest = { workspace = true }
101 rustls = { workspace = true }
102 rustls-native-certs = { workspace = true }
103 url = { workspace = true }
104 sha2 = { workspace = true }
105 base64 = { workspace = true }
106 rand = { workspace = true }
107 pulldown-cmark = { workspace = true }
108 docengine = { git = "https://makenot.work/git/max/docengine.git", version = "0.7", features = ["mentions", "quotes"] }
109 tagtree = { workspace = true }
110 tower_governor = { workspace = true }
111 governor = { workspace = true }
112 s3-storage = { workspace = true }
113 livechat = { workspace = true }
114 async-trait = { workspace = true }
115 dashmap = { workspace = true }
116 dotenvy = "0.15"
117 hex = "0.4"
118 hmac = { workspace = true }
119 regex-lite = "0.1"
120 urlencoding = "2"
121 time = "0.3"
122 include_dir = "0.7.4"
123
124 [dev-dependencies]
125 http-body-util = "0.1"
126 wiremock = "0.6"
127 pom-contract = { path = "../shared/pom-contract" }
128 # Enable mt-db's setup-only mutations for the integration suite. Resolver 2 keeps
129 # this feature out of the normal/production build.
130 mt-db = { workspace = true, features = ["test-support"] }
131
132 [workspace.lints.rust]
133 unused = "warn"
134 unreachable_pub = "warn"
135
136 [workspace.lints.clippy]
137 pedantic = { level = "warn", priority = -1 }
138 # Allow-list tuned from a measured breakdown across server/multithreaded/pter
139 # (2026-07-22). These are the high-churn / low-signal pedantic lints; everything
140 # else in `pedantic` stays a warning. Keep this block identical across repos.
141 module_name_repetitions = "allow"
142 # Doc lints. No docs-completeness push is underway.
143 missing_errors_doc = "allow"
144 missing_panics_doc = "allow"
145 doc_markdown = "allow"
146 # Numeric casts. Endemic and mostly intentional in size and byte math.
147 cast_possible_truncation = "allow"
148 cast_sign_loss = "allow"
149 cast_precision_loss = "allow"
150 cast_possible_wrap = "allow"
151 cast_lossless = "allow"
152 # Subjective structure and style nags. High churn, low signal.
153 must_use_candidate = "allow"
154 too_many_lines = "allow"
155 struct_excessive_bools = "allow"
156 similar_names = "allow"
157 items_after_statements = "allow"
158 single_match_else = "allow"
159 # Frequent false-positives in TUI and router-heavy code.
160 match_same_arms = "allow"
161 unnecessary_wraps = "allow"
162 type_complexity = "allow"
163
164 [lints]
165 workspace = true
166