# Copyright 2025 New Vector Ltd. # # SPDX-License-Identifier: AGPL-3.0-only OR LicenseRef-Element-Commercial # Please see LICENSE files in the repository root for full details. [workspace] default-members = ["crates/cli"] members = ["crates/*"] resolver = "2" # Updated in the CI with a `sed` command package.version = "1.5.0-rc.1" package.license = "AGPL-3.0-only OR LicenseRef-Element-Commercial" package.authors = ["Element Backend Team"] package.edition = "2024" package.homepage = "https://element-hq.github.io/matrix-authentication-service/" package.repository = "https://github.com/element-hq/matrix-authentication-service/" package.publish = false [workspace.lints.rust] unsafe_code = "deny" [workspace.lints.clippy] # We use groups as good defaults, but with a lower priority so that we can override them all = { level = "deny", priority = -1 } pedantic = { level = "warn", priority = -1 } str_to_string = "deny" too_many_lines = "allow" [workspace.lints.rustdoc] broken_intra_doc_links = "deny" [workspace.dependencies] # Workspace crates mas-axum-utils = { path = "./crates/axum-utils/", version = "=1.5.0-rc.1" } mas-cli = { path = "./crates/cli/", version = "=1.5.0-rc.1" } mas-config = { path = "./crates/config/", version = "=1.5.0-rc.1" } mas-context = { path = "./crates/context/", version = "=1.5.0-rc.1" } mas-data-model = { path = "./crates/data-model/", version = "=1.5.0-rc.1" } mas-email = { path = "./crates/email/", version = "=1.5.0-rc.1" } mas-graphql = { path = "./crates/graphql/", version = "=1.5.0-rc.1" } mas-handlers = { path = "./crates/handlers/", version = "=1.5.0-rc.1" } mas-http = { path = "./crates/http/", version = "=1.5.0-rc.1" } mas-i18n = { path = "./crates/i18n/", version = "=1.5.0-rc.1" } mas-i18n-scan = { path = "./crates/i18n-scan/", version = "=1.5.0-rc.1" } mas-iana = { path = "./crates/iana/", version = "=1.5.0-rc.1" } mas-iana-codegen = { path = "./crates/iana-codegen/", version = "=1.5.0-rc.1" } mas-jose = { path = "./crates/jose/", version = "=1.5.0-rc.1" } mas-keystore = { path = "./crates/keystore/", version = "=1.5.0-rc.1" } mas-listener = { path = "./crates/listener/", version = "=1.5.0-rc.1" } mas-matrix = { path = "./crates/matrix/", version = "=1.5.0-rc.1" } mas-matrix-synapse = { path = "./crates/matrix-synapse/", version = "=1.5.0-rc.1" } mas-oidc-client = { path = "./crates/oidc-client/", version = "=1.5.0-rc.1" } mas-policy = { path = "./crates/policy/", version = "=1.5.0-rc.1" } mas-router = { path = "./crates/router/", version = "=1.5.0-rc.1" } mas-spa = { path = "./crates/spa/", version = "=1.5.0-rc.1" } mas-storage = { path = "./crates/storage/", version = "=1.5.0-rc.1" } mas-storage-pg = { path = "./crates/storage-pg/", version = "=1.5.0-rc.1" } mas-tasks = { path = "./crates/tasks/", version = "=1.5.0-rc.1" } mas-templates = { path = "./crates/templates/", version = "=1.5.0-rc.1" } mas-tower = { path = "./crates/tower/", version = "=1.5.0-rc.1" } oauth2-types = { path = "./crates/oauth2-types/", version = "=1.5.0-rc.1" } syn2mas = { path = "./crates/syn2mas", version = "=1.5.0-rc.1" } # OpenAPI schema generation and validation [workspace.dependencies.aide] version = "0.14.2" features = ["axum", "axum-extra", "axum-extra-query", "axum-json", "macros"] # An `Arc` that can be atomically updated [workspace.dependencies.arc-swap] version = "1.7.1" # GraphQL server [workspace.dependencies.async-graphql] version = "7.0.17" default-features = false features = ["chrono", "url", "tracing", "playground"] [workspace.dependencies.async-stream] version = "0.3.6" # Utility to write and implement async traits [workspace.dependencies.async-trait] version = "0.1.89" # High-level error handling [workspace.dependencies.anyhow] version = "1.0.100" # Assert that a value matches a pattern [workspace.dependencies.assert_matches] version = "1.5.0" # HTTP router [workspace.dependencies.axum] version = "0.8.6" # Extra utilities for Axum [workspace.dependencies.axum-extra] version = "0.10.3" features = ["cookie-private", "cookie-key-expansion", "typed-header", "query"] # Axum macros [workspace.dependencies.axum-macros] version = "0.5.0" # AEAD (Authenticated Encryption with Associated Data) [workspace.dependencies.aead] version = "0.5.2" features = ["std"] # Argon2 password hashing [workspace.dependencies.argon2] version = "0.5.3" features = ["password-hash", "std"] # Constant-time base64 [workspace.dependencies.base64ct] version = "1.8.0" features = ["std"] # Bcrypt password hashing [workspace.dependencies.bcrypt] version = "0.17.1" default-features = true # Packed bitfields [workspace.dependencies.bitflags] version = "2.9.4" # Bytes [workspace.dependencies.bytes] version = "1.10.1" # UTF-8 paths [workspace.dependencies.camino] version = "1.2.1" features = ["serde1"] # ChaCha20Poly1305 AEAD [workspace.dependencies.chacha20poly1305] version = "0.10.1" features = ["std"] # Memory optimisation for short strings [workspace.dependencies.compact_str] version = "0.9.0" # Terminal formatting [workspace.dependencies.console] version = "0.15.11" # Cookie store [workspace.dependencies.cookie_store] version = "0.22.0" default-features = false features = ["serde_json"] # Time utilities [workspace.dependencies.chrono] version = "0.4.42" default-features = false features = ["serde", "clock"] # CLI argument parsing [workspace.dependencies.clap] version = "4.5.50" features = ["derive"] # Object Identifiers (OIDs) as constants [workspace.dependencies.const-oid] version = "0.9.6" features = ["std"] # Utility for converting between different cases [workspace.dependencies.convert_case] version = "0.8.0" # CRC calculation [workspace.dependencies.crc] version = "3.3.0" # Cron expressions [workspace.dependencies.cron] version = "0.15.0" # CSV parsing and writing [workspace.dependencies.csv] version = "1.3.1" # DER encoding [workspace.dependencies.der] version = "0.7.10" features = ["std"] # Interactive CLI dialogs [workspace.dependencies.dialoguer] version = "0.11.0" default-features = false features = ["fuzzy-select", "password"] # Cryptographic digest algorithms [workspace.dependencies.digest] version = "0.10.7" # Load environment variables from .env files [workspace.dependencies.dotenvy] version = "0.15.7" # ECDSA algorithms [workspace.dependencies.ecdsa] version = "0.16.9" features = ["signing", "verifying"] # Elliptic curve cryptography [workspace.dependencies.elliptic-curve] version = "0.13.8" features = ["std", "pem", "sec1"] # Configuration loading [workspace.dependencies.figment] version = "0.10.19" features = ["env", "yaml", "test"] # URL form encoding [workspace.dependencies.form_urlencoded] version = "1.2.2" # Utilities for dealing with futures [workspace.dependencies.futures-util] version = "0.3.31" # Fixed-size arrays with trait implementations [workspace.dependencies.generic-array] version = "0.14.7" # Rate-limiting [workspace.dependencies.governor] version = "0.10.1" default-features = false features = ["std", "dashmap", "quanta"] # HMAC calculation [workspace.dependencies.hmac] version = "0.12.1" # HTTP headers [workspace.dependencies.headers] version = "0.4.1" # Hex encoding and decoding [workspace.dependencies.hex] version = "0.4.3" # HTTP request/response [workspace.dependencies.http] version = "1.3.1" # HTTP body trait [workspace.dependencies.http-body] version = "1.0.1" # http-body utilities [workspace.dependencies.http-body-util] version = "0.1.3" # HTTP client and server [workspace.dependencies.hyper] version = "1.7.0" features = ["client", "server", "http1", "http2"] # Additional Hyper utilties [workspace.dependencies.hyper-util] version = "0.1.17" features = [ "client", "server", "server-auto", "service", "http1", "http2", "tokio", ] # Hyper Rustls support [workspace.dependencies.hyper-rustls] version = "0.27.7" features = ["http1", "http2"] default-features = false # ICU libraries for internationalization [workspace.dependencies.icu_calendar] version = "1.5.2" features = ["compiled_data", "std"] [workspace.dependencies.icu_datetime] version = "1.5.1" features = ["compiled_data", "std"] [workspace.dependencies.icu_experimental] version = "0.1.0" features = ["compiled_data", "std"] [workspace.dependencies.icu_locid] version = "1.5.0" features = ["std"] [workspace.dependencies.icu_locid_transform] version = "1.5.0" features = ["compiled_data", "std"] [workspace.dependencies.icu_normalizer] version = "1.5.0" [workspace.dependencies.icu_plurals] version = "1.5.0" features = ["compiled_data", "std"] [workspace.dependencies.icu_provider] version = "1.5.0" features = ["std", "sync"] [workspace.dependencies.icu_provider_adapters] version = "1.5.0" features = ["std"] # HashMap which preserves insertion order [workspace.dependencies.indexmap] version = "2.11.4" features = ["serde"] # Indented string literals [workspace.dependencies.indoc] version = "2.0.6" # Snapshot testing [workspace.dependencies.insta] version = "1.43.2" features = ["yaml", "json"] # IP network address types [workspace.dependencies.ipnetwork] version = "0.20.0" features = ["serde", "schemars"] # Iterator utilities [workspace.dependencies.itertools] version = "0.14.0" # K256 elliptic curve [workspace.dependencies.k256] version = "0.13.4" features = ["std"] # RFC 5646 language tags [workspace.dependencies.language-tags] version = "0.3.2" features = ["serde"] # Email sending [workspace.dependencies.lettre] version = "0.11.19" default-features = false features = [ "tokio1-rustls", "rustls-platform-verifier", "aws-lc-rs", "hostname", "builder", "tracing", "pool", "smtp-transport", "sendmail-transport", ] # Listening on passed FDs [workspace.dependencies.listenfd] version = "1.0.2" # MIME type support [workspace.dependencies.mime] version = "0.3.17" # Templates [workspace.dependencies.minijinja] version = "2.12.0" features = ["urlencode", "loader", "json", "speedups", "unstable_machinery"] # Additional filters for minijinja [workspace.dependencies.minijinja-contrib] version = "2.12.0" features = ["pycompat"] # Utilities to deal with non-zero values [workspace.dependencies.nonzero_ext] version = "0.3.0" # Open Policy Agent support through WASM [workspace.dependencies.opa-wasm] version = "0.1.7" # OpenTelemetry [workspace.dependencies.opentelemetry] version = "0.31.0" features = ["trace", "metrics"] [workspace.dependencies.opentelemetry-http] version = "0.31.0" features = ["reqwest"] [workspace.dependencies.opentelemetry-jaeger-propagator] version = "0.31.0" [workspace.dependencies.opentelemetry-otlp] version = "0.31.0" default-features = false features = ["trace", "metrics", "http-proto"] [workspace.dependencies.opentelemetry-prometheus-text-exporter] version = "0.2.1" [workspace.dependencies.opentelemetry-resource-detectors] version = "0.10.0" [workspace.dependencies.opentelemetry-semantic-conventions] version = "0.31.0" features = ["semconv_experimental"] [workspace.dependencies.opentelemetry-stdout] version = "0.31.0" features = ["trace", "metrics"] [workspace.dependencies.opentelemetry_sdk] version = "0.31.0" features = [ "experimental_trace_batch_span_processor_with_async_runtime", "experimental_metrics_periodicreader_with_async_runtime", "rt-tokio", ] [workspace.dependencies.tracing-opentelemetry] version = "0.32.0" default-features = false # P256 elliptic curve [workspace.dependencies.p256] version = "0.13.2" features = ["std"] # P384 elliptic curve [workspace.dependencies.p384] version = "0.13.1" features = ["std"] # Text padding utilities [workspace.dependencies.pad] version = "0.1.6" # PBKDF2 password hashing [workspace.dependencies.pbkdf2] version = "0.12.2" features = ["password-hash", "std", "simple", "parallel"] # PEM encoding/decoding [workspace.dependencies.pem-rfc7468] version = "0.7.0" features = ["std"] # Parser generator [workspace.dependencies.pest] version = "2.8.3" # Pest derive macros [workspace.dependencies.pest_derive] version = "2.8.3" # Pin projection [workspace.dependencies.pin-project-lite] version = "0.2.16" # PKCS#1 encoding [workspace.dependencies.pkcs1] version = "0.7.5" features = ["std"] # PKCS#8 encoding [workspace.dependencies.pkcs8] version = "0.10.2" features = ["std", "pkcs5", "encryption"] # Public Suffix List [workspace.dependencies.psl] version = "2.1.148" # High-precision clock [workspace.dependencies.quanta] version = "0.12.6" # Random values [workspace.dependencies.rand] version = "0.8.5" [workspace.dependencies.rand_chacha] version = "0.3.1" [workspace.dependencies.rand_core] version = "0.6.4" # Regular expressions [workspace.dependencies.regex] version = "1.12.2" # High-level HTTP client [workspace.dependencies.reqwest] version = "0.12.24" default-features = false features = [ "http2", "rustls-tls-manual-roots-no-provider", "charset", "json", "socks", ] # RSA cryptography [workspace.dependencies.rsa] version = "0.9.8" features = ["std", "pem"] # Fast hash algorithm for HashMap [workspace.dependencies.rustc-hash] version = "2.1.1" # Matrix-related types [workspace.dependencies.ruma-common] version = "0.16.0" # TLS stack [workspace.dependencies.rustls] version = "0.23.32" # PEM parsing for rustls [workspace.dependencies.rustls-pemfile] version = "2.2.0" # PKI types for rustls [workspace.dependencies.rustls-pki-types] version = "1.12.0" # Use platform-specific verifier for TLS [workspace.dependencies.rustls-platform-verifier] version = "0.6.1" # systemd service status notification [workspace.dependencies.sd-notify] version = "0.4.5" # JSON Schema generation [workspace.dependencies.schemars] version = "0.8.22" features = ["url", "chrono", "preserve_order"] # SEC1 encoding format [workspace.dependencies.sec1] version = "0.7.3" features = ["std"] # Query builder [workspace.dependencies.sea-query] version = "0.32.7" features = ["derive", "attr", "with-uuid", "with-chrono", "postgres-array"] # Query builder [workspace.dependencies.sea-query-binder] version = "0.7.0" features = [ "sqlx", "sqlx-postgres", "with-uuid", "with-chrono", "postgres-array", ] # Sentry error tracking [workspace.dependencies.sentry] version = "0.45.0" default-features = false features = ["backtrace", "contexts", "panic", "tower", "reqwest"] # Sentry tower layer [workspace.dependencies.sentry-tower] version = "0.45.0" features = ["http", "axum-matched-path"] # Sentry tracing integration [workspace.dependencies.sentry-tracing] version = "0.45.0" # Serialization and deserialization [workspace.dependencies.serde] version = "1.0.228" features = ["derive"] # Most of the time, if we need serde, we need derive # JSON serialization and deserialization [workspace.dependencies.serde_json] version = "1.0.145" features = ["preserve_order"] # URL encoded form serialization [workspace.dependencies.serde_urlencoded] version = "0.7.1" # Custom serialization helpers [workspace.dependencies.serde_with] version = "3.14.0" features = ["hex", "chrono"] # YAML serialization [workspace.dependencies.serde_yaml] version = "0.9.34" # SHA-2 cryptographic hash algorithm [workspace.dependencies.sha2] version = "0.10.9" features = ["oid"] # Digital signature traits [workspace.dependencies.signature] version = "2.2.0" # Low-level socket manipulation [workspace.dependencies.socket2] version = "0.6.1" # Subject Public Key Info [workspace.dependencies.spki] version = "0.7.3" features = ["std"] # SQL database support [workspace.dependencies.sqlx] version = "0.8.6" features = [ "runtime-tokio", "tls-rustls-aws-lc-rs", "postgres", "migrate", "chrono", "json", "uuid", "ipnetwork", ] # Custom error types [workspace.dependencies.thiserror] version = "2.0.17" [workspace.dependencies.thiserror-ext] version = "0.3.0" # Async runtime [workspace.dependencies.tokio] version = "1.48.0" features = ["full"] [workspace.dependencies.tokio-stream] version = "0.1.17" # Tokio rustls integration [workspace.dependencies.tokio-rustls] version = "0.26.4" # Tokio test utilities [workspace.dependencies.tokio-test] version = "0.4.4" # Useful async utilities [workspace.dependencies.tokio-util] version = "0.7.16" features = ["rt"] # Tower services [workspace.dependencies.tower] version = "0.5.2" features = ["util"] # Tower service trait [workspace.dependencies.tower-service] version = "0.3.3" # Tower layer trait [workspace.dependencies.tower-layer] version = "0.3.3" # Tower HTTP layers [workspace.dependencies.tower-http] version = "0.6.6" features = ["cors", "fs", "add-extension", "set-header"] # Logging and tracing [workspace.dependencies.tracing] version = "0.1.41" [workspace.dependencies.tracing-subscriber] version = "0.3.20" features = ["env-filter"] [workspace.dependencies.tracing-appender] version = "0.2.3" # URL manipulation [workspace.dependencies.url] version = "2.5.7" features = ["serde"] # URL encoding [workspace.dependencies.urlencoding] version = "2.1.3" # ULID support [workspace.dependencies.ulid] version = "=1.1.4" # Pinned to the latest version which used rand 0.8 features = ["serde", "uuid"] # UUID support [workspace.dependencies.uuid] version = "1.18.1" # HTML escaping [workspace.dependencies.v_htmlescape] version = "0.15.8" # Version information generation [workspace.dependencies.vergen-gitcl] version = "1.0.8" features = ["rustc"] # Directory traversal [workspace.dependencies.walkdir] version = "2.5.0" # HTTP mock server [workspace.dependencies.wiremock] version = "0.6.5" # User-agent parser [workspace.dependencies.woothee] version = "0.13.0" # String writing interface [workspace.dependencies.writeable] version = "0.5.5" # Zero memory after use [workspace.dependencies.zeroize] version = "1.8.2" # Password strength estimation [workspace.dependencies.zxcvbn] version = "3.1.0" [profile.release] codegen-units = 1 # Reduce the number of codegen units to increase optimizations lto = true # Enable fat LTO # A few profile opt-level tweaks to make the test suite run faster [profile.dev.package] argon2.opt-level = 3 bcrypt.opt-level = 3 block-buffer.opt-level = 3 cranelift-codegen.opt-level = 3 digest.opt-level = 3 hmac.opt-level = 3 generic-array.opt-level = 3 num-bigint-dig.opt-level = 3 pbkdf2.opt-level = 3 rayon.opt-level = 3 regalloc2.opt-level = 3 sha2.opt-level = 3 sqlx-macros.opt-level = 3