| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310 |
- [workspace]
- members = ["macros"]
- [package]
- name = "vaultwarden"
- version = "1.0.0"
- authors = ["Daniel García <[email protected]>"]
- edition = "2021"
- rust-version = "1.87.0"
- resolver = "2"
- repository = "https://github.com/dani-garcia/vaultwarden"
- readme = "README.md"
- license = "AGPL-3.0-only"
- publish = false
- build = "build.rs"
- [features]
- # default = ["sqlite"]
- # Empty to keep compatibility, prefer to set USE_SYSLOG=true
- enable_syslog = []
- mysql = ["diesel/mysql", "diesel_migrations/mysql"]
- postgresql = ["diesel/postgres", "diesel_migrations/postgres"]
- sqlite = ["diesel/sqlite", "diesel_migrations/sqlite", "dep:libsqlite3-sys"]
- # Enable to use a vendored and statically linked openssl
- vendored_openssl = ["openssl/vendored"]
- # Enable MiMalloc memory allocator to replace the default malloc
- # This can improve performance for Alpine builds
- enable_mimalloc = ["dep:mimalloc"]
- # This is a development dependency, and should only be used during development!
- # It enables the usage of the diesel_logger crate, which is able to output the generated queries.
- # You also need to set an env variable `QUERY_LOGGER=1` to fully activate this so you do not have to re-compile
- # if you want to turn off the logging for a specific run.
- query_logger = ["dep:diesel_logger"]
- s3 = ["opendal/services-s3", "dep:aws-config", "dep:aws-credential-types", "dep:aws-smithy-runtime-api", "dep:anyhow", "dep:http", "dep:reqsign"]
- # OIDC specific features
- oidc-accept-rfc3339-timestamps = ["openidconnect/accept-rfc3339-timestamps"]
- oidc-accept-string-booleans = ["openidconnect/accept-string-booleans"]
- # Enable unstable features, requires nightly
- # Currently only used to enable rusts official ip support
- unstable = []
- [target."cfg(unix)".dependencies]
- # Logging
- syslog = "7.0.0"
- [dependencies]
- macros = { path = "./macros" }
- # Logging
- log = "0.4.27"
- fern = { version = "0.7.1", features = ["syslog-7", "reopen-1"] }
- tracing = { version = "0.1.41", features = ["log"] } # Needed to have lettre and webauthn-rs trace logging to work
- # A `dotenv` implementation for Rust
- dotenvy = { version = "0.15.7", default-features = false }
- # Lazy initialization
- once_cell = "1.21.3"
- # Numerical libraries
- num-traits = "0.2.19"
- num-derive = "0.4.2"
- bigdecimal = "0.4.8"
- # Web framework
- rocket = { version = "0.5.1", features = ["tls", "json"], default-features = false }
- rocket_ws = { version ="0.1.1" }
- # WebSockets libraries
- rmpv = "1.3.0" # MessagePack library
- # Concurrent HashMap used for WebSocket messaging and favicons
- dashmap = "6.1.0"
- # Async futures
- futures = "0.3.31"
- tokio = { version = "1.47.1", features = ["rt-multi-thread", "fs", "io-util", "parking_lot", "time", "signal", "net"] }
- tokio-util = { version = "0.7.16", features = ["compat"]}
- # A generic serialization/deserialization framework
- serde = { version = "1.0.219", features = ["derive"] }
- serde_json = "1.0.143"
- # A safe, extensible ORM and Query builder
- diesel = { version = "2.2.12", features = ["chrono", "r2d2", "numeric"] }
- diesel_migrations = "2.2.0"
- diesel_logger = { version = "0.4.0", optional = true }
- derive_more = { version = "2.0.1", features = ["from", "into", "as_ref", "deref", "display"] }
- diesel-derive-newtype = "2.1.2"
- # Bundled/Static SQLite
- libsqlite3-sys = { version = "0.35.0", features = ["bundled"], optional = true }
- # Crypto-related libraries
- rand = "0.9.2"
- ring = "0.17.14"
- subtle = "2.6.1"
- # UUID generation
- uuid = { version = "1.18.0", features = ["v4"] }
- # Date and time libraries
- chrono = { version = "0.4.41", features = ["clock", "serde"], default-features = false }
- chrono-tz = "0.10.4"
- time = "0.3.41"
- # Job scheduler
- job_scheduler_ng = "2.3.0"
- # Data encoding library Hex/Base32/Base64
- data-encoding = "2.9.0"
- # JWT library
- jsonwebtoken = "9.3.1"
- # TOTP library
- totp-lite = "2.0.1"
- # Yubico Library
- yubico = { package = "yubico_ng", version = "0.14.1", features = ["online-tokio"], default-features = false }
- # WebAuthn libraries
- # danger-allow-state-serialisation is needed to save the state in the db
- # danger-credential-internals is needed to support U2F to Webauthn migration
- webauthn-rs = { version = "0.5.2", features = ["danger-allow-state-serialisation", "danger-credential-internals"] }
- webauthn-rs-proto = "0.5.2"
- webauthn-rs-core = "0.5.2"
- # Handling of URL's for WebAuthn and favicons
- url = "2.5.7"
- # Email libraries
- lettre = { version = "0.11.18", features = ["smtp-transport", "sendmail-transport", "builder", "serde", "hostname", "tracing", "tokio1-rustls", "ring", "rustls-native-certs"], default-features = false }
- percent-encoding = "2.3.2" # URL encoding library used for URL's in the emails
- email_address = "0.2.9"
- # HTML Template library
- handlebars = { version = "6.3.2", features = ["dir_source"] }
- # HTTP client (Used for favicons, version check, DUO and HIBP API)
- reqwest = { version = "0.12.23", features = ["rustls-tls", "rustls-tls-native-roots", "stream", "json", "deflate", "gzip", "brotli", "zstd", "socks", "cookies", "charset", "http2", "system-proxy"], default-features = false}
- hickory-resolver = "0.25.2"
- # Favicon extraction libraries
- html5gum = "0.8.0"
- regex = { version = "1.11.2", features = ["std", "perf", "unicode-perl"], default-features = false }
- data-url = "0.3.2"
- bytes = "1.10.1"
- svg-hush = "0.9.5"
- # Cache function results (Used for version check and favicon fetching)
- cached = { version = "0.56.0", features = ["async"] }
- # Used for custom short lived cookie jar during favicon extraction
- cookie = "0.18.1"
- cookie_store = "0.21.1"
- # Used by U2F, JWT and PostgreSQL
- openssl = "0.10.73"
- # CLI argument parsing
- pico-args = "0.5.0"
- # Macro ident concatenation
- pastey = "0.1.1"
- governor = "0.10.1"
- # OIDC for SSO
- openidconnect = { version = "4.0.1", features = ["reqwest", "native-tls"] }
- mini-moka = "0.10.3"
- # Check client versions for specific features.
- semver = "1.0.26"
- # Allow overriding the default memory allocator
- # Mainly used for the musl builds, since the default musl malloc is very slow
- mimalloc = { version = "0.1.48", features = ["secure"], default-features = false, optional = true }
- which = "8.0.0"
- # Argon2 library with support for the PHC format
- argon2 = "0.5.3"
- # Reading a password from the cli for generating the Argon2id ADMIN_TOKEN
- rpassword = "7.4.0"
- # Loading a dynamic CSS Stylesheet
- grass_compiler = { version = "0.13.4", default-features = false }
- # File are accessed through Apache OpenDAL
- opendal = { version = "0.54.0", features = ["services-fs"], default-features = false }
- # For retrieving AWS credentials, including temporary SSO credentials
- anyhow = { version = "1.0.99", optional = true }
- aws-config = { version = "1.8.5", features = ["behavior-version-latest", "rt-tokio", "credentials-process", "sso"], default-features = false, optional = true }
- aws-credential-types = { version = "1.2.5", optional = true }
- aws-smithy-runtime-api = { version = "1.9.0", optional = true }
- http = { version = "1.3.1", optional = true }
- reqsign = { version = "0.16.5", optional = true }
- # Strip debuginfo from the release builds
- # The debug symbols are to provide better panic traces
- # Also enable fat LTO and use 1 codegen unit for optimizations
- [profile.release]
- strip = "debuginfo"
- lto = "fat"
- codegen-units = 1
- # A little bit of a speedup
- [profile.dev]
- split-debuginfo = "unpacked"
- # Always build argon2 using opt-level 3
- # This is a huge speed improvement during testing
- [profile.dev.package.argon2]
- opt-level = 3
- # Optimize for size
- [profile.release-micro]
- inherits = "release"
- opt-level = "z"
- strip = "symbols"
- lto = "fat"
- codegen-units = 1
- panic = "abort"
- # Profile for systems with low resources
- # It will use less resources during build
- [profile.release-low]
- inherits = "release"
- strip = "symbols"
- lto = "thin"
- codegen-units = 16
- # Linting config
- # https://doc.rust-lang.org/rustc/lints/groups.html
- [workspace.lints.rust]
- # Forbid
- unsafe_code = "forbid"
- non_ascii_idents = "forbid"
- # Deny
- deprecated_in_future = "deny"
- future_incompatible = { level = "deny", priority = -1 }
- keyword_idents = { level = "deny", priority = -1 }
- let_underscore = { level = "deny", priority = -1 }
- noop_method_call = "deny"
- refining_impl_trait = { level = "deny", priority = -1 }
- rust_2018_idioms = { level = "deny", priority = -1 }
- rust_2021_compatibility = { level = "deny", priority = -1 }
- rust_2024_compatibility = { level = "deny", priority = -1 }
- edition_2024_expr_fragment_specifier = "allow" # Once changed to Rust 2024 this should be removed and macro's should be validated again
- single_use_lifetimes = "deny"
- trivial_casts = "deny"
- trivial_numeric_casts = "deny"
- unused = { level = "deny", priority = -1 }
- unused_import_braces = "deny"
- unused_lifetimes = "deny"
- unused_qualifications = "deny"
- variant_size_differences = "deny"
- # Allow the following lints since these cause issues with Rust v1.84.0 or newer
- # Building Vaultwarden with Rust v1.85.0 and edition 2024 also works without issues
- if_let_rescope = "allow"
- tail_expr_drop_order = "allow"
- # https://rust-lang.github.io/rust-clippy/stable/index.html
- [workspace.lints.clippy]
- # Warn
- dbg_macro = "warn"
- todo = "warn"
- # Ignore/Allow
- result_large_err = "allow"
- # Deny
- case_sensitive_file_extension_comparisons = "deny"
- cast_lossless = "deny"
- clone_on_ref_ptr = "deny"
- equatable_if_let = "deny"
- filter_map_next = "deny"
- float_cmp_const = "deny"
- implicit_clone = "deny"
- inefficient_to_string = "deny"
- iter_on_empty_collections = "deny"
- iter_on_single_items = "deny"
- linkedlist = "deny"
- macro_use_imports = "deny"
- manual_assert = "deny"
- manual_instant_elapsed = "deny"
- manual_string_new = "deny"
- match_wildcard_for_single_variants = "deny"
- mem_forget = "deny"
- needless_continue = "deny"
- needless_lifetimes = "deny"
- option_option = "deny"
- string_add_assign = "deny"
- unnecessary_join = "deny"
- unnecessary_self_imports = "deny"
- unnested_or_patterns = "deny"
- unused_async = "deny"
- unused_self = "deny"
- verbose_file_reads = "deny"
- zero_sized_map_values = "deny"
- [lints]
- workspace = true
|