[workspace] members = [ "benchmarks", "bindings/matrix-sdk-crypto-ffi", "bindings/matrix-sdk-ffi", "crates/*", "examples/*", "labs/*", "testing/*", "uniffi-bindgen", "xtask", ] exclude = ["testing/data"] # xtask, multiverse, testing and the bindings should only be built when invoked explicitly. default-members = ["benchmarks", "crates/*"] resolver = "3" [workspace.package] rust-version = "1.93" [workspace.dependencies] anyhow = { version = "1.0.100", default-features = false } aquamarine = { version = "0.6.0", default-features = false } as_variant = { version = "1.3.0", default-features = false } assert-json-diff = { version = "2.0.2", default-features = false } assert_matches = { version = "1.5.0", default-features = false } assert_matches2 = { version = "0.1.2", default-features = false } async_cell = { version = "0.2.3", default-features = false } async-compat = { version = "0.2.5", default-features = false } async-once-cell = { version = "0.5.4", default-features = false } async-rx = { version = "0.2.0", default-features = false } # Bumping this to 0.3.6 produces a test failure because the semantic between the # versions changed subtly: https://github.com/matrix-org/matrix-rust-sdk/issues/4599 async-stream = { version = "0.3.6", default-features = false } async-trait = { version = "0.1.89", default-features = false } base64 = { version = "0.22.1", default-features = false, features = ["std"] } bitflags = { version = "2.10.0", default-features = false } byteorder = { version = "1.5.0", default-features = false, features = ["std"] } cfg-if = { version = "1.0.4", default-features = false } clap = { version = "4.5.53", default-features = false, features = ["std", "help", "usage"] } chrono = { version = "0.4.42", default-features = false, features = ["clock", "std", "oldtime", "wasmbind"] } dirs = { version = "6.0.0", default-features = false } eyeball = { version = "0.8.8", default-features = false, features = ["tracing"] } eyeball-im = { version = "0.8.0", default-features = false, features = ["tracing"] } eyeball-im-util = { version = "0.10.0", default-features = false } futures-core = { version = "0.3.31", default-features = false, features = ["std"] } futures-executor = { version = "0.3.31", default-features = false, features = ["std"] } futures-util = { version = "0.3.31", default-features = false, features = ["std"] } getrandom = { version = "0.4.2", default-features = false } gloo-timers = { version = "0.3.0", default-features = false } gloo-utils = { version = "0.2.0", default-features = false, features = ["serde"] } growable-bloom-filter = { version = "2.1.1", default-features = false } hkdf = { version = "0.12.4", default-features = false } hmac = { version = "0.12.1", default-features = false } http = { version = "1.3.1", default-features = false } imbl = { version = "6.1.0", default-features = false } indexed_db_futures = { version = "0.7.0", package = "matrix_indexed_db_futures", default-features = false } indexmap = { version = "2.12.1", default-features = false } insta = { version = "1.44.1", features = ["json", "redactions"] } itertools = { version = "0.14.0", default-features = false, features = ["use_std"] } js-sys = { version = "0.3.82", default-features = false, features = ["std"] } mime = { version = "0.3.17", default-features = false } oauth2 = { version = "5.0.0", default-features = false, features = ["timing-resistant-secret-traits"] } oauth2-reqwest = { version = "0.1.0-alpha.3", default-features = false } pbkdf2 = { version = "0.12.2", default-features = false } pin-project-lite = { version = "0.2.16", default-features = false } proc-macro2 = { version = "1.0.106", default-features = false } proptest = { version = "1.9.0", default-features = false, features = ["std"] } quote = { version = "1.0.37", default-features = false } rand = { version = "0.10.1", default-features = false, features = ["std", "std_rng", "thread_rng"] } regex = { version = "1.12.2", default-features = false } reqwest = { version = "0.13.1", default-features = false } rmp-serde = { version = "1.3.0", default-features = false } ruma = { git = "https://github.com/ruma/ruma", rev = "7680eebd9586669e1a4e5b1fd1c2c691221369d4", features = [ "client-api-c", "compat-unset-avatar", "compat-upload-signatures", "compat-arbitrary-length-ids", "compat-tag-info", "compat-encrypted-stickers", "compat-lax-room-create-deser", "compat-lax-room-topic-deser", "unstable-msc3230", "unstable-msc3401", "unstable-msc3417", "unstable-msc3488", "unstable-msc3489", "unstable-msc4075", "unstable-msc4140", "unstable-msc4143", "unstable-msc4171", "unstable-msc4278", "unstable-msc4286", "unstable-msc4306", "unstable-msc4308", "unstable-msc4310", ] } sentry = { version = "0.47.0", default-features = false } sentry-tracing = { version = "0.47.0", default-features = false } serde = { version = "1.0.228", default-features = false, features = ["std", "rc", "derive"] } serde_html_form = { version = "0.2.8", default-features = false } serde_json = { version = "1.0.145", default-features = false, features = ["std"] } sha2 = { version = "0.10.9", default-features = false } similar-asserts = { version = "1.7.0", default-features = false } stream_assert = { version = "0.1.1", default-features = false } syn = { version = "2.0.43", default-features = false, features = ["derive", "parsing", "printing", "clone-impls"] } tempfile = { version = "3.23.0", default-features = false } thiserror = { version = "2.0.17", default-features = false } tokio = { version = "1.48.0", default-features = false, features = ["sync"] } tokio-stream = { version = "0.1.17", default-features = false } tracing = { version = "0.1.41", default-features = false, features = ["std"] } tracing-appender = { version = "0.2.3", default-features = false } tracing-core = { version = "0.1.34", default-features = false } tracing-subscriber = { version = "0.3.20", default-features = false, features = ["std", "smallvec", "fmt"] } unicode-normalization = { version = "0.1.25", default-features = false } unicode-segmentation = { version = "1.12.0", default-features = false } uniffi = { version = "0.31.0", default-features = false, features = ["cargo-metadata"] } uniffi_bindgen = { version = "0.31.0", default-features = false, features = ["cargo-metadata"] } url = { version = "2.5.7", default-features = false } uuid = { version = "1.18.1", default-features = false } vergen-gitcl = { version = "1.0.8", default-features = false } vodozemac = { version = "0.10.0", default-features = false, features = ["libolm-compat", "insecure-pk-encryption", "experimental-session-config"] } wasm-bindgen = { version = "0.2.105", default-features = false } wasm-bindgen-test = { version = "0.3.55", default-features = false, features = ["std"] } web-sys = { version = "0.3.82", default-features = false } wiremock = { version = "0.6.5", default-features = false } zeroize = { version = "1.8.2", default-features = false } matrix-sdk = { path = "crates/matrix-sdk", version = "0.16.0", default-features = false } matrix-sdk-base = { path = "crates/matrix-sdk-base", version = "0.16.0" } matrix-sdk-common = { path = "crates/matrix-sdk-common", version = "0.16.0" } matrix-sdk-crypto = { path = "crates/matrix-sdk-crypto", version = "0.16.0" } matrix-sdk-ffi-macros = { path = "bindings/matrix-sdk-ffi-macros", version = "0.7.0" } matrix-sdk-indexeddb = { path = "crates/matrix-sdk-indexeddb", version = "0.16.0", default-features = false } matrix-sdk-qrcode = { path = "crates/matrix-sdk-qrcode", version = "0.16.0" } matrix-sdk-sqlite = { path = "crates/matrix-sdk-sqlite", version = "0.16.0", default-features = false } matrix-sdk-store-encryption = { path = "crates/matrix-sdk-store-encryption", version = "0.16.0" } matrix-sdk-test = { path = "testing/matrix-sdk-test", version = "0.16.0" } matrix-sdk-test-utils = { path = "testing/matrix-sdk-test-utils", version = "0.16.0" } matrix-sdk-ui = { path = "crates/matrix-sdk-ui", version = "0.16.0", default-features = false } matrix-sdk-search = { path = "crates/matrix-sdk-search", version = "0.16.0" } [workspace.lints.rust] rust_2018_idioms = "warn" semicolon_in_expressions_from_macros = "warn" unexpected_cfgs = { level = "warn", check-cfg = [ 'cfg(tarpaulin_include)', # Used by tarpaulin (code coverage) 'cfg(ruma_unstable_exhaustive_types)', # Used by Ruma's EventContent derive macro ] } unused_extern_crates = "warn" unused_import_braces = "warn" unused_qualifications = "warn" trivial_casts = "warn" trivial_numeric_casts = "warn" [workspace.lints.clippy] assigning_clones = "allow" box_default = "allow" cloned_instead_of_copied = "warn" dbg_macro = "warn" inefficient_to_string = "warn" macro_use_imports = "warn" manual_let_else = "warn" mut_mut = "warn" needless_borrow = "warn" nonstandard_macro_braces = "warn" redundant_clone = "warn" str_to_string = "warn" todo = "warn" unnecessary_semicolon = "warn" unused_async = "warn" # Default development profile; default for most Cargo commands, otherwise # selected with `--debug` [profile.dev] # Saves a lot of disk space. If symbols are needed, use the dbg profile. debug = 0 # Profile for debug builds with full optimization and minimal debug symbols. # This should be just enough to have proper backtraces, having way smaller binaries # (10% of the size with full debug symbols profile, like `reldbg`). # This profile differs from `reldbg` in not containing the debug symbols needed for # debugging with LLDB/GDB, trading that for binary size, allowing quick iterations # of building the bindings, installing in a real device, testing your changes, repeat. # It's also different from `dev` in having enough debug symbols to display backtraces. [profile.reldev] inherits = "dev" opt-level = 3 debug = "line-tables-only" strip = "debuginfo" [profile.dev.package] # Optimize quote even in debug mode. Speeds up proc-macros enough to account # for the extra time of optimizing it for a clean build of matrix-sdk-ffi. quote = { opt-level = 2 } sha2 = { opt-level = 2 } # faster runs for insta.rs snapshot testing insta.opt-level = 3 similar.opt-level = 3 # Custom profile with full debugging info, use `--profile dbg` to select [profile.dbg] inherits = "dev" debug = 2 # Custom profile for use in (debug) builds of the binding crates, use # `--profile reldbg` to select [profile.reldbg] inherits = "dbg" opt-level = 3 [profile.dist] # Use release profile as a base inherits = "release" # Strip the minimal debug info, while still allowing us to have proper backtraces, but it will affect debuggers strip = "debuginfo" # Use link time optimizations lto = true # Use binary size optimization, since this is intended for distributed copies of the SDK opt-level = "s" [profile.profiling] inherits = "release" # LTO is too slow to compile. lto = false # Get symbol names for profiling purposes. debug = true [profile.bench] inherits = "release" lto = false [patch.crates-io] async-compat = { git = "https://github.com/element-hq/async-compat", rev = "5a27c8b290f1f1dcfc0c4ec22c464e38528aa591" } const_panic = { git = "https://github.com/jplatte/const_panic", rev = "e0b317a9a7bde2d48a7d15b6a60d70e4a41d3b5f" } # Needed to fix rotation log issue on Android (https://github.com/tokio-rs/tracing/issues/2937) tracing = { git = "https://github.com/tokio-rs/tracing.git", rev = "20f5b3d8ba057ca9c4ae00ad30dda3dce8a71c05" } tracing-core = { git = "https://github.com/tokio-rs/tracing.git", rev = "20f5b3d8ba057ca9c4ae00ad30dda3dce8a71c05" } tracing-subscriber = { git = "https://github.com/tokio-rs/tracing.git", rev = "20f5b3d8ba057ca9c4ae00ad30dda3dce8a71c05" } tracing-appender = { git = "https://github.com/tokio-rs/tracing.git", rev = "20f5b3d8ba057ca9c4ae00ad30dda3dce8a71c05" }