#cargo-features = ["profile-rustflags"] [workspace] resolver = "2" members = ["src/*"] default-members = ["src/*"] [workspace.package] description = "a very cool fork of Conduit, a Matrix homeserver written in Rust" license = "Apache-2.0" authors = [ "strawberry ", "timokoesters ", ] version = "0.4.0" edition = "2021" # See also `rust-toolchain.toml` rust-version = "1.77.0" homepage = "https://conduwuit.puppyirl.gay/" repository = "https://github.com/girlbossceo/conduwuit" readme = "README.md" [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", ] [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", ] [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.4" # 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" [workspace.dependencies.num_cpus] version = "1.16.0" # 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 = ["unprefixed_malloc_on_supported_platforms"] [workspace.dependencies.tikv-jemallocator] version = "0.5.4" default-features = false features = ["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=mold', # '-Clink-arg=-Wl,--threads', # '-Clink-arg=-Wl,--gc-sections', # '-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 [workspace.lints.rust] missing_abi = "warn" noop_method_call = "warn" pointer_structural_match = "warn" explicit_outlives_requirements = "warn" unused_extern_crates = "warn" unused_import_braces = "warn" unused_lifetimes = "warn" unused_qualifications = "warn" unused_macro_rules = "warn" dead_code = "warn" elided_lifetimes_in_paths = "warn" macro_use_extern_crate = "warn" single_use_lifetimes = "warn" unsafe_op_in_unsafe_fn = "warn" unreachable_pub = "warn" # this seems to suggest broken code and is not working correctly unused_braces = "allow" # cfgs cannot be limited to features or cargo build --all-features panics for unsuspecting users. # 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" # some sadness missing_docs = "allow" [workspace.lints.clippy] # pedantic = "warn" suspicious = "warn" # assume deny in practice perf = "warn" # assume deny in practice redundant_clone = "warn" cloned_instead_of_copied = "warn" expl_impl_clone_on_copy = "warn" unnecessary_cast = "warn" cast_lossless = "warn" ptr_as_ptr = "warn" mut_mut = "warn" char_lit_as_u8 = "warn" dbg_macro = "warn" empty_structs_with_brackets = "warn" get_unwrap = "warn" negative_feature_names = "warn" pub_without_shorthand = "warn" rc_buffer = "warn" rc_mutex = "warn" redundant_feature_names = "warn" redundant_type_annotations = "warn" rest_pat_in_fully_bound_structs = "warn" str_to_string = "warn" string_to_string = "warn" tests_outside_test_module = "warn" undocumented_unsafe_blocks = "warn" unneeded_field_pattern = "warn" unseparated_literal_suffix = "warn" wildcard_dependencies = "warn" or_fun_call = "warn" unnecessary_lazy_evaluations = "warn" assertions_on_result_states = "warn" default_union_representation = "warn" deref_by_slicing = "warn" empty_drop = "warn" exit = "warn" filetype_is_file = "warn" float_cmp_const = "warn" format_push_string = "warn" impl_trait_in_params = "warn" lossy_float_literal = "warn" mem_forget = "warn" missing_assert_message = "warn" mutex_atomic = "warn" semicolon_outside_block = "warn" fn_to_numeric_cast = "warn" fn_to_numeric_cast_with_truncation = "warn" string_lit_chars_any = "warn" suspicious_xor_used_as_pow = "warn" try_err = "warn" unnecessary_safety_comment = "warn" unnecessary_safety_doc = "warn" unnecessary_self_imports = "warn" verbose_file_reads = "warn" cast_possible_wrap = "warn" redundant_closure_for_method_calls = "warn" large_futures = "warn" semicolon_if_nothing_returned = "warn" match_bool = "warn" struct_excessive_bools = "warn" must_use_candidate = "warn" collapsible_else_if = "warn" inconsistent_struct_constructor = "warn" manual_string_new = "warn" zero_sized_map_values = "warn" unnecessary_box_returns = "warn" map_unwrap_or = "warn" implicit_clone = "warn" match_wildcard_for_single_variants = "warn" match_same_arms = "warn" ignored_unit_patterns = "warn" redundant_else = "warn" explicit_into_iter_loop = "warn" used_underscore_binding = "warn" needless_pass_by_value = "warn" too_many_lines = "warn" let_underscore_untyped = "warn" single_match = "warn" single_match_else = "warn" explicit_deref_methods = "warn" explicit_iter_loop = "warn" manual_let_else = "warn" trivially_copy_pass_by_ref = "warn" wildcard_imports = "warn" checked_conversions = "warn" let_underscore_must_use = "warn" #integer_arithmetic = "warn" #as_conversions = "warn" # some sadness missing_errors_doc = "allow" missing_panics_doc = "allow" module_name_repetitions = "allow" if_not_else = "allow" doc_markdown = "allow" cast_possible_truncation = "allow" cast_precision_loss = "allow" cast_sign_loss = "allow" same_name_method = "allow" mod_module_files = "allow" unwrap_used = "allow" expect_used = "allow" if_then_some_else_none = "allow" let_underscore_future = "allow" map_err_ignore = "allow" missing_docs_in_private_items = "allow" multiple_inherent_impl = "allow" error_impl_error = "allow" string_add = "allow" string_slice = "allow" ref_patterns = "allow" unnecessary_wraps = "allow"