[package] name = "makenotwork" version = "0.11.1" edition = "2024" license-file = "LICENSE" # Server binary: never published to a registry. Marks the crate private so # supply-chain tooling (cargo-deny) treats its first-party path deps correctly. publish = false [features] fast-tests = [] [dependencies] # Async trait (for StorageBackend trait object) async-trait = "0.1" # Web framework axum = { version = "0.8.8", features = ["macros"] } axum-extra = { version = "0.12.6", features = ["cookie", "form", "query", "typed-header"] } # OpenAPI spec generation utoipa = { version = "5", features = ["axum_extras", "chrono", "uuid"] } utoipa-axum = "0.2" utoipa-swagger-ui = { version = "9", features = ["axum"] } serde = { version = "1.0.228", features = ["derive"] } serde_json = "1.0.149" toml = "1.1" tokio = { version = "1.50.0", features = ["macros", "rt-multi-thread", "net", "signal"] } tokio-stream = { version = "0.1", features = ["sync"] } tokio-util = { version = "0.7", features = ["io"] } tower = "0.5.3" tower-http = { version = "0.7.0", features = ["trace", "fs", "limit", "request-id", "propagate-header", "set-header"] } tracing = "0.1.44" tracing-subscriber = { version = "0.3.22", features = ["env-filter", "json"] } # Templates askama = "0.16.0" # Environment & Configuration dotenvy = "0.15.7" # Database sqlx = { version = "0.8.6", features = ["runtime-tokio", "postgres", "uuid", "chrono", "migrate", "macros"] } uuid = { version = "1.22.0", features = ["v4", "serde"] } chrono = { version = "0.4.44", features = ["serde"] } # Authentication argon2 = "0.5.3" tower-sessions = { version = "0.14.0", features = ["axum-core"] } tower-sessions-sqlx-store = { version = "0.15.0", features = ["postgres"] } # Concurrent hash map (session touch cache) dashmap = "6" # Rate Limiting tower_governor = "0.8.0" governor = "0.10.4" # JWT (SyncKit) jsonwebtoken = { version = "10.4.0", features = ["rust_crypto"] } # TOTP / 2FA totp-rs = { version = "5.7", features = ["qr"] } # WebAuthn / Passkeys webauthn-rs = { version = "0.5", features = ["danger-allow-state-serialisation", "conditional-ui"] } webauthn-rs-proto = "0.5" # OpenSSL (transitive dep from git2, webauthn-rs: vendored for cross-compilation) openssl = { version = "0.10", features = ["vendored"] } # Security rand = "0.10" hmac = "0.13.0" sha1 = "0.11.0" sha2 = "0.11.0" subtle = "2.6" chacha20poly1305 = "0.11.0" hex = "0.4.3" base64 = "0.22.1" # Temp files (content export) tempfile = "3" # File scanning infer = "0.22" goblin = "0.10" zip = "8.2" # Single-stream decompressors for archive-bomb detection (already in the tree # transitively via `zip`; pinned to the resolved versions so no new build). flate2 = "1" bzip2 = "0.6" xz2 = "0.1" zstd = "0.13" yara-x = "1.16" fs2 = "0.4" memmap2 = "0.9" # CSV parsing (import system) csv = "1.3" # CLI clap = { version = "4", features = ["derive"] } # Logging (used by sqlx slow query config) log = "0.4" # Error handling thiserror = "2.0.18" anyhow = "1.0.102" bytes = "1" # Email validation (used at notify-me signup and guest-checkout entry points) email_address = "0.2" # Metrics metrics = "0.24" metrics-exporter-prometheus = { version = "0.18.1", default-features = false } # Markdown rendering + documentation engine docengine = { path = "../../Libraries/docengine", features = ["doc-loader", "directives", "frontmatter", "media-urls"] } mnw-assumptions = { path = "../shared/mnw-assumptions" } # Tag standard tagtree = { path = "../shared/tagtree" } # Shared theme palette + the bundled theme set (Tier 0 creator theming). makeover = "2.3.0" # Git source browser git2 = { version = "0.21", features = ["vendored-libgit2"] } syntect = { version = "5", default-features = false, features = ["default-syntaxes", "default-themes", "html", "regex-fancy"] } regex = "1" semver = "1" # S3 Storage s3-storage = { path = "../shared/s3-storage" } # Stripe Payments: async-stripe 1.0.0-rc.6 (split into sub-crates). # The umbrella `async-stripe` provides the HTTP client; resource types live in # per-domain sub-crates. The `deserialize` feature on each resource crate is # required to derive `serde::Deserialize` on Subscription, Invoice, etc: we # parse them from webhook payloads ourselves (no built-in webhook helper in the # rc line; see `payments::webhooks::verify_signature` for our HMAC check). async-stripe = { version = "1.0.0-rc.6", features = ["default-tls"] } async-stripe-shared = { version = "1.0.0-rc.6", features = ["deserialize"] } async-stripe-billing = { version = "1.0.0-rc.6", features = ["deserialize", "subscription", "billing_portal_session"] } async-stripe-checkout = { version = "1.0.0-rc.6", features = ["deserialize", "checkout_session"] } async-stripe-connect = { version = "1.0.0-rc.6", features = ["deserialize", "account", "account_link", "transfer", "transfer_reversal"] } async-stripe-core = { version = "1.0.0-rc.6", features = ["deserialize", "balance", "refund", "customer"] } async-stripe-payment = { version = "1.0.0-rc.6", features = ["deserialize"] } async-stripe-product = { version = "1.0.0-rc.6", features = ["deserialize", "product", "price"] } async-stripe-types = { version = "1.0.0-rc.6", features = ["deserialize"] } reqwest = { version = "0.13", features = ["json", "cookies", "form", "query"] } urlencoding = "2.1.3" # URL parsing url = "2.5.8" apple-codesign = { version = "0.29.0", default-features = false } authenticode = { version = "0.6.0", features = ["std", "object"] } x509-cert = "0.2.5" const-oid = { version = "0.9", features = ["db"] } object = { version = "0.39", features = ["pe"] } ammonia = "4" lightningcss = { version = "1.0.0-alpha.71", default-features = false, features = ["visitor"] } [[bin]] name = "mnw-admin" path = "src/bin/mnw-admin.rs" [dev-dependencies] tower = { version = "0.5.3", features = ["util"] } http-body-util = "0.1" webauthn-authenticator-rs = { version = "0.5", features = ["softpasskey"] } tempfile = "3" proptest = "1" wiremock = "0.6" pom-contract = { path = "../shared/pom-contract" } [profile.release] # Drop the symbol table from the shipped binary. Release builds already carry no # debuginfo, so this is purely the symbol table: measured 161.3 MiB -> 120.7 MiB # on 0.10.19 (25.1%) for no runtime cost. Every tier rsyncs that difference on # every promote. Nothing here reads a symbolized backtrace (no `backtrace` crate, # no RUST_BACKTRACE in the unit file). If a panic ever does need symbolizing, # rebuild the sha with `--config profile.release.strip=false`: the build is # reproducible from the git sha the release was cut from. strip = true [lints.rust] unused = "warn" unreachable_pub = "warn" [lints.clippy] pedantic = { level = "warn", priority = -1 } # Allow-list tuned from a measured breakdown across server/multithreaded/pter # (2026-07-22). These are the high-churn / low-signal pedantic lints; everything # else in `pedantic` stays a warning. Keep this block identical across repos. module_name_repetitions = "allow" # Doc lints. No docs-completeness push is underway. missing_errors_doc = "allow" missing_panics_doc = "allow" doc_markdown = "allow" # Numeric casts. Endemic and mostly intentional in size and byte math. cast_possible_truncation = "allow" cast_sign_loss = "allow" cast_precision_loss = "allow" cast_possible_wrap = "allow" cast_lossless = "allow" # Subjective structure and style nags. High churn, low signal. must_use_candidate = "allow" too_many_lines = "allow" struct_excessive_bools = "allow" similar_names = "allow" items_after_statements = "allow" single_match_else = "allow" # Frequent false-positives in TUI and router-heavy code. match_same_arms = "allow" unnecessary_wraps = "allow" type_complexity = "allow"