#cargo-features = ["profile-rustflags"] [workspace] resolver = "2" members = ["src/*"] default-members = ["src/*"] [workspace.package] authors = [ "strawberry ", "timokoesters ", ] categories = ["network-programming"] description = "a very cool fork of Conduit, a Matrix homeserver written in Rust" edition = "2021" homepage = "https://conduwuit.puppyirl.gay/" keywords = ["chat", "matrix", "server"] license = "Apache-2.0" # See also `rust-toolchain.toml` readme = "README.md" repository = "https://github.com/girlbossceo/conduwuit" rust-version = "1.77.0" version = "0.4.1" [workspace.metadata.crane] name = "conduit" [workspace.dependencies.sanitize-filename] version = "0.5.0" [workspace.dependencies.infer] version = "0.15" default-features = false [workspace.dependencies.jsonwebtoken] version = "9.3.0" [workspace.dependencies.base64] version = "0.22.1" # used for TURN server authentication [workspace.dependencies.hmac] version = "0.12.1" [workspace.dependencies.sha-1] version = "0.10.1" # used for checking if an IP is in specific subnets / CIDR ranges easier [workspace.dependencies.ipaddress] version = "0.1.3" [workspace.dependencies.rand] version = "0.8.5" # Used for the http request / response body type for Ruma endpoints used with reqwest [workspace.dependencies.bytes] version = "1.6.0" [workspace.dependencies.http-body-util] version = "0.1.1" [workspace.dependencies.http] version = "1.1.0" [workspace.dependencies.regex] version = "1.10.4" [workspace.dependencies.axum] version = "0.7.5" default-features = false features = [ "form", "http1", "http2", "json", "matched-path", "tokio", "tracing", ] [workspace.dependencies.axum-extra] version = "0.9.3" default-features = false features = ["typed-header"] [workspace.dependencies.axum-server] version = "0.6.0" features = ["tls-rustls"] [workspace.dependencies.tower] version = "0.4.13" features = ["util"] [workspace.dependencies.tower-http] version = "0.5.2" features = [ "add-extension", "cors", "sensitive-headers", "set-header", "trace", "util", "catch-panic", ] [workspace.dependencies.reqwest] version = "0.12.4" default-features = false features = [ "rustls-tls-native-roots", "socks", "hickory-dns", "http2", ] [workspace.dependencies.serde] version = "1.0.201" features = ["rc"] [workspace.dependencies.serde_json] version = "1.0.117" features = ["raw_value"] # Used for appservice registration files [workspace.dependencies.serde_yaml] version = "0.9.34" # Used to load forbidden room/user regex from config [workspace.dependencies.serde_regex] version = "1.1.0" # Used for ruma wrapper [workspace.dependencies.serde_html_form] version = "0.2.6" # Used for password hashing [workspace.dependencies.argon2] version = "0.5.3" features = ["alloc", "rand"] default-features = false # Used to generate thumbnails for images [workspace.dependencies.image] version = "0.25.1" default-features = false features = [ "jpeg", "png", "gif", "webp", ] # logging [workspace.dependencies.log] version = "0.4.21" default-features = false [workspace.dependencies.tracing] version = "0.1.40" default-features = false [workspace.dependencies.tracing-subscriber] version = "0.3.18" features = ["env-filter"] # for URL previews [workspace.dependencies.webpage] version = "2.0.1" default-features = false # used for conduit's CLI and admin room command parsing [workspace.dependencies.clap] version = "4.5.4" default-features = false features = [ "std", "derive", "help", "usage", "error-context", "string", ] [workspace.dependencies.futures-util] version = "0.3.30" default-features = false [workspace.dependencies.tokio] version = "1.37.0" features = [ "fs", "net", "macros", "sync", "signal", "time", "rt-multi-thread", "io-util", ] [workspace.dependencies.libloading] version = "0.8.3" # Validating urls in config, was already a transitive dependency [workspace.dependencies.url] version = "2.5.0" features = ["serde"] # standard date and time tools [workspace.dependencies.chrono] version = "0.4.38" features = ["alloc"] default-features = false [workspace.dependencies.hyper] version = "1.3.1" features = [ "server", "http1", "http2", ] [workspace.dependencies.hyper-util] version = "0.1.5" features = [ "client", "server-auto", "server-graceful", "service", "tokio", ] # to support multiple variations of setting a config option [workspace.dependencies.either] version = "1.11.0" features = ["serde"] # Used for reading the configuration from conduwuit.toml & environment variables [workspace.dependencies.figment] version = "0.10.18" features = ["env", "toml"] [workspace.dependencies.hickory-resolver] version = "0.24.1" default-features = false # Used for conduit::Error type [workspace.dependencies.thiserror] version = "1.0.61" # Used when hashing the state [workspace.dependencies.ring] version = "0.17.8" # Used to make working with iterators easier, was already a transitive depdendency [workspace.dependencies.itertools] version = "0.13.0" # to parse user-friendly time durations in admin commands #TODO: overlaps chrono? [workspace.dependencies.cyborgtime] version = "2.1.1" # used to replace the channels of the tokio runtime [workspace.dependencies.loole] version = "0.3.0" [workspace.dependencies.async-trait] version = "0.1.80" [workspace.dependencies.lru-cache] version = "0.1.2" # Used for matrix spec type definitions and helpers [workspace.dependencies.ruma] git = "https://github.com/girlbossceo/ruwuma" branch = "conduwuit-changes" features = [ "compat", "rand", "appservice-api-c", "client-api", "federation-api", "push-gateway-api-c", "state-res", "unstable-exhaustive-types", "ring-compat", "unstable-unspecified", "unstable-msc2448", "unstable-msc2666", "unstable-msc2867", "unstable-msc2870", "unstable-msc3026", "unstable-msc3061", "unstable-msc3575", "unstable-msc4121", "unstable-msc4125", "unstable-extensible-events", ] [workspace.dependencies.ruma-identifiers-validation] git = "https://github.com/girlbossceo/ruwuma" branch = "conduwuit-changes" [workspace.dependencies.rust-rocksdb] path = "deps/rust-rocksdb" package = "rust-rocksdb-uwu" features = [ "multi-threaded-cf", "mt_static", "snappy", "lz4", "zstd", "zlib", "bzip2", ] [workspace.dependencies.zstd] version = "0.13.1" # to listen on both HTTP and HTTPS if listening on TLS dierctly from conduwuit for complement or sytest [workspace.dependencies.axum-server-dual-protocol] version = "0.6" # optional SHA256 media keys feature [workspace.dependencies.sha2] version = "0.10.8" # optional opentelemetry, performance measurements, flamegraphs, etc for performance measurements and monitoring [workspace.dependencies.opentelemetry] version = "0.21.0" [workspace.dependencies.tracing-flame] version = "0.2.0" [workspace.dependencies.tracing-opentelemetry] version = "0.22.0" [workspace.dependencies.opentelemetry_sdk] version = "0.21.2" features = ["rt-tokio"] [workspace.dependencies.opentelemetry-jaeger] version = "0.20.0" features = ["rt-tokio"] # optional sentry metrics for crash/panic reporting [workspace.dependencies.sentry] version = "0.32.3" default-features = false features = [ "backtrace", "contexts", "debug-images", "panic", "rustls", "tower", "tower-http", "tracing", "reqwest", "log", ] [workspace.dependencies.sentry-tracing] version = "0.32.3" [workspace.dependencies.sentry-tower] version = "0.32.3" # jemalloc usage [workspace.dependencies.tikv-jemalloc-sys] version = "0.5.4" default-features = false features = ["stats", "unprefixed_malloc_on_supported_platforms"] [workspace.dependencies.tikv-jemallocator] version = "0.5.4" default-features = false features = ["stats", "unprefixed_malloc_on_supported_platforms"] [workspace.dependencies.tikv-jemalloc-ctl] version = "0.5.4" default-features = false features = ["use_std"] [workspace.dependencies.rusqlite] git = "https://github.com/rusqlite/rusqlite" #branch = "master" rev = "e00b626e2b1c67347d789fb7f600281705c89381" features = ["bundled"] # used only by rusqlite [workspace.dependencies.parking_lot] version = "0.12.2" # used only by rusqlite [workspace.dependencies.thread_local] version = "1.1.8" [workspace.dependencies.tokio-metrics] version = "0.3.1" default-features = false [workspace.dependencies.console-subscriber] version = "0.2" [workspace.dependencies.nix] version = "0.28.0" features = ["resource"] [workspace.dependencies.sd-notify] version = "0.4.1" [workspace.dependencies.hardened_malloc-rs] version = "0.1.2" default-features = false features = [ "static", "gcc", "light", ] # # Patches # # backport of [https://github.com/tokio-rs/tracing/pull/2956] to the 0.1.x branch of tracing. # we can switch back to upstream if #2956 is merged and backported in the upstream repo. [patch.crates-io.tracing-subscriber] git = "https://github.com/girlbossceo/tracing" branch = "tracing-subscriber/env-filter-clone-0.1.x-backport" [patch.crates-io.tracing] git = "https://github.com/girlbossceo/tracing" branch = "tracing-subscriber/env-filter-clone-0.1.x-backport" [patch.crates-io.tracing-core] git = "https://github.com/girlbossceo/tracing" branch = "tracing-subscriber/env-filter-clone-0.1.x-backport" # # Our crates # [workspace.dependencies.conduit-router] package = "conduit_router" path = "src/router" default-features = false [workspace.dependencies.conduit-admin] package = "conduit_admin" path = "src/admin" default-features = false [workspace.dependencies.conduit-api] package = "conduit_api" path = "src/api" default-features = false [workspace.dependencies.conduit-service] package = "conduit_service" path = "src/service" default-features = false [workspace.dependencies.conduit-database] package = "conduit_database" path = "src/database" default-features = false [workspace.dependencies.conduit-core] package = "conduit_core" path = "src/core" default-features = false ############################################################################### # # Release profiles # [profile.release] strip = "symbols" lto = "thin" # release profile with debug symbols [profile.release-debuginfo] inherits = "release" debug = "full" strip = "none" [profile.release-high-perf] inherits = "release" lto = "fat" codegen-units = 1 panic = "abort" # do not use without profile-rustflags enabled [profile.release-max-perf] inherits = "release" strip = "symbols" lto = "fat" #rustflags = [ # '-Ctarget-cpu=native', # '-Ztune-cpu=native', # '-Ctarget-feature=+crt-static', # '-Crelocation-model=static', # '-Ztls-model=local-exec', # '-Zinline-in-all-cgus=true', # '-Zinline-mir=true', # '-Zmir-opt-level=3', # '-Clink-arg=-fuse-ld=gold', # '-Clink-arg=-Wl,--threads', # '-Clink-arg=-Wl,--gc-sections', # '-Clink-arg=-luring', # '-Clink-arg=-lstdc++', # '-Clink-arg=-lc', # '-Ztime-passes', # '-Ztime-llvm-passes', #] [profile.release-max-perf.build-override] inherits = "release-max-perf" opt-level = 0 #rustflags = [ # '-Ctarget-feature=-crt-static', #] [profile.bench] inherits = "release" #rustflags = [ # "-Cremark=all", # '-Ztime-passes', # '-Ztime-llvm-passes', #] ############################################################################### # # Developer profile # # To enable hot-reloading: # 1. Uncomment all of the rustflags here. # 2. Uncomment crate-type=dylib in src/*/Cargo.toml and deps/rust-rocksdb/Cargo.toml # # opt-level, mir-opt-level, validate-mir are not known to interfere with reloading # and can be raised if build times are tolerable. [profile.dev] debug = 1 opt-level = 0 panic = "unwind" debug-assertions = true incremental = true codegen-units = 64 #rustflags = [ # '--cfg', 'conduit_mods', # '-Ztime-passes', # '-Zmir-opt-level=0', # '-Zvalidate-mir=false', # '-Ztls-model=global-dynamic', # '-Cprefer-dynamic=true', # '-Zstaticlib-prefer-dynamic=true', # '-Zstaticlib-allow-rdylib-deps=true', # '-Zpacked-bundled-libs=false', # '-Zplt=true', # '-Crpath=true', # '-Clink-arg=-Wl,--as-needed', # '-Clink-arg=-Wl,--allow-shlib-undefined', # '-Clink-arg=-Wl,-z,keep-text-section-prefix', # '-Clink-arg=-Wl,-z,lazy', #] [profile.dev.package.conduit_core] inherits = "dev" incremental = false #rustflags = [ # '--cfg', 'conduit_mods', # '-Ztime-passes', # '-Zmir-opt-level=0', # '-Ztls-model=initial-exec', # '-Cprefer-dynamic=true', # '-Zstaticlib-prefer-dynamic=true', # '-Zstaticlib-allow-rdylib-deps=true', # '-Zpacked-bundled-libs=false', # '-Zplt=true', # '-Clink-arg=-Wl,--as-needed', # '-Clink-arg=-Wl,--allow-shlib-undefined', # '-Clink-arg=-Wl,-z,lazy', # '-Clink-arg=-Wl,-z,unique', # '-Clink-arg=-Wl,-z,nodlopen', # '-Clink-arg=-Wl,-z,nodelete', #] [profile.dev.package.conduit] inherits = "dev" incremental = false #rustflags = [ # '--cfg', 'conduit_mods', # '-Ztime-passes', # '-Zmir-opt-level=0', # '-Zvalidate-mir=false', # '-Ztls-model=global-dynamic', # '-Cprefer-dynamic=true', # '-Zexport-executable-symbols=true', # '-Zplt=true', # '-Crpath=true', # '-Clink-arg=-Wl,--as-needed', # '-Clink-arg=-Wl,--allow-shlib-undefined', # '-Clink-arg=-Wl,--export-dynamic', # '-Clink-arg=-Wl,-z,lazy', #] [profile.dev.package.rust-rocksdb-uwu] inherits = "dev" debug = 'limited' incremental = false codegen-units = 1 opt-level = 'z' #rustflags = [ # '--cfg', 'conduit_mods', # '-Ztls-model=initial-exec', # '-Cprefer-dynamic=true', # '-Zstaticlib-prefer-dynamic=true', # '-Zstaticlib-allow-rdylib-deps=true', # '-Zpacked-bundled-libs=true', # '-Zplt=true', # '-Clink-arg=-Wl,--no-as-needed', # '-Clink-arg=-Wl,--allow-shlib-undefined', # '-Clink-arg=-Wl,-z,lazy', # '-Clink-arg=-Wl,-z,nodlopen', # '-Clink-arg=-Wl,-z,nodelete', #] [profile.dev.package.'*'] inherits = "dev" debug = 'limited' incremental = false codegen-units = 1 opt-level = 'z' #rustflags = [ # '--cfg', 'conduit_mods', # '-Ztls-model=global-dynamic', # '-Cprefer-dynamic=true', # '-Zstaticlib-prefer-dynamic=true', # '-Zstaticlib-allow-rdylib-deps=true', # '-Zpacked-bundled-libs=true', # '-Zplt=true', # '-Clink-arg=-Wl,--as-needed', # '-Clink-arg=-Wl,-z,lazy', # '-Clink-arg=-Wl,-z,nodelete', #] [profile.test] incremental = false ############################################################################### # # Linting # [workspace.lints.rust] absolute-paths-not-starting-with-crate = "warn" #box-pointers = "warn" # TODO deprecated-in-future = "warn" elided-lifetimes-in-paths = "warn" explicit-outlives-requirements = "warn" ffi-unwind-calls = "warn" keyword-idents = "warn" macro-use-extern-crate = "warn" meta-variable-misuse = "warn" missing-abi = "warn" #missing-copy-implementations = "warn" # TODO #missing-debug-implementations = "warn" # TODO non-ascii-idents = "warn" rust-2021-incompatible-closure-captures = "warn" rust-2021-incompatible-or-patterns = "warn" rust-2021-prefixes-incompatible-syntax = "warn" rust-2021-prelude-collisions = "warn" single-use-lifetimes = "warn" #trivial-casts = "warn" # TODO trivial-numeric-casts = "warn" unit-bindings = "warn" #unnameable-types = "warn" # TODO unreachable-pub = "warn" unsafe-op-in-unsafe-fn = "warn" unstable-features = "warn" unused-extern-crates = "warn" unused-import-braces = "warn" unused-lifetimes = "warn" unused-macro-rules = "warn" unused-qualifications = "warn" #unused-results = "warn" # TODO ## some sadness let_underscore_drop = "allow" missing_docs = "allow" # cfgs cannot be limited to expected cfgs or their de facto non-transitive/opt-in use-case e.g. # tokio_unstable will warn. unexpected_cfgs = "allow" # this seems to suggest broken code and is not working correctly unused_braces = "allow" # buggy, but worth checking on occasionally unused_crate_dependencies = "allow" unsafe_code = "allow" variant_size_differences = "allow" ####################################### # # Clippy lints # [workspace.lints.clippy] ################### cargo = "warn" ## some sadness multiple_crate_versions = { level = "allow", priority = 1 } ################### complexity = "warn" ################### correctness = "warn" ################### nursery = "warn" ### some sadness branches_sharing_code = { level = "allow", priority = 1 } # TODO cognitive_complexity = { level = "allow", priority = 1 } # TODO derive_partial_eq_without_eq = { level = "allow", priority = 1 } # TODO equatable_if_let = { level = "allow", priority = 1 } # TODO future_not_send = { level = "allow", priority = 1 } # TODO missing_const_for_fn = { level = "allow", priority = 1 } # TODO needless_collect = { level = "allow", priority = 1 } # TODO needless_pass_by_ref_mut = { level = "allow", priority = 1 } # TODO option_if_let_else = { level = "allow", priority = 1 } # TODO redundant_pub_crate = { level = "allow", priority = 1 } # TODO significant_drop_in_scrutinee = { level = "allow", priority = 1 } # TODO significant_drop_tightening = { level = "allow", priority = 1 } # TODO suboptimal_flops = { level = "allow", priority = 1 } # TODO use_self = { level = "allow", priority = 1 } # TODO useless_let_if_seq = { level = "allow", priority = 1 } # TODO ################### pedantic = "warn" ## some sadness cast_possible_truncation = "allow" cast_precision_loss = "allow" cast_sign_loss = "allow" doc_markdown = "allow" error_impl_error = "allow" expect_used = "allow" if_not_else = "allow" if_then_some_else_none = "allow" implicit_return = "allow" inline_always = "allow" map_err_ignore = "allow" missing_docs_in_private_items = "allow" missing_errors_doc = "allow" missing_panics_doc = "allow" mod_module_files = "allow" module_name_repetitions = "allow" multiple_inherent_impl = "allow" no_effect_underscore_binding = "allow" ref_patterns = "allow" same_name_method = "allow" similar_names = { level = "allow", priority = 1 } single_call_fn = "allow" string_add = "allow" string_slice = "allow" struct_field_names = { level = "allow", priority = 1 } unnecessary_wraps = { level = "allow", priority = 1 } unused_async = { level = "allow", priority = 1 } unwrap_used = "allow" ################### perf = "warn" ################### #restriction = "warn" #arithmetic_side_effects = "warn" # TODO #as_conversions = "warn" # TODO assertions_on_result_states = "warn" dbg_macro = "warn" default_union_representation = "warn" deref_by_slicing = "warn" empty_drop = "warn" empty_structs_with_brackets = "warn" exit = "warn" filetype_is_file = "warn" float_cmp_const = "warn" fn_to_numeric_cast_any = "warn" format_push_string = "warn" get_unwrap = "warn" impl_trait_in_params = "warn" let_underscore_must_use = "warn" let_underscore_untyped = "warn" lossy_float_literal = "warn" mem_forget = "warn" missing_assert_message = "warn" mutex_atomic = "warn" pub_without_shorthand = "warn" rc_buffer = "warn" rc_mutex = "warn" redundant_type_annotations = "warn" rest_pat_in_fully_bound_structs = "warn" semicolon_outside_block = "warn" str_to_string = "warn" string_lit_chars_any = "warn" string_to_string = "warn" suspicious_xor_used_as_pow = "warn" tests_outside_test_module = "warn" try_err = "warn" undocumented_unsafe_blocks = "warn" unnecessary_safety_comment = "warn" unnecessary_safety_doc = "warn" unnecessary_self_imports = "warn" unneeded_field_pattern = "warn" unseparated_literal_suffix = "warn" verbose_file_reads = "warn" ################### style = "warn" ################### suspicious = "warn" ## some sadness let_underscore_future = "allow"