[package] name = "vaultwarden" version = "1.0.0" authors = ["Daniel GarcĂ­a "] edition = "2021" rust-version = "1.75.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", "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 = ["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 = ["diesel_logger"] # Enable unstable features, requires nightly # Currently only used to enable rusts official ip support unstable = [] [target."cfg(not(windows))".dependencies] # Logging syslog = "6.1.1" [dependencies] # Logging log = "0.4.21" fern = { version = "0.6.2", features = ["syslog-6", "reopen-1"] } tracing = { version = "0.1.40", 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.19.0" # Numerical libraries num-traits = "0.2.18" num-derive = "0.4.2" bigdecimal = "0.4.3" # Web framework rocket = { version = "0.5.0", features = ["tls", "json"], default-features = false } rocket_ws = { version ="0.1.0" } # WebSockets libraries rmpv = "1.0.2" # MessagePack library # Concurrent HashMap used for WebSocket messaging and favicons dashmap = "5.5.3" # Async futures futures = "0.3.30" tokio = { version = "1.37.0", features = ["rt-multi-thread", "fs", "io-util", "parking_lot", "time", "signal", "net"] } # A generic serialization/deserialization framework serde = { version = "1.0.198", features = ["derive"] } serde_json = "1.0.116" # A safe, extensible ORM and Query builder diesel = { version = "2.1.6", features = ["chrono", "r2d2", "numeric"] } diesel_migrations = "2.1.0" diesel_logger = { version = "0.3.0", optional = true } # Bundled/Static SQLite libsqlite3-sys = { version = "0.28.0", features = ["bundled"], optional = true } # Crypto-related libraries rand = { version = "0.8.5", features = ["small_rng"] } ring = "0.17.8" # UUID generation uuid = { version = "1.8.0", features = ["v4"] } # Date and time libraries chrono = { version = "0.4.38", features = ["clock", "serde"], default-features = false } chrono-tz = "0.9.0" time = "0.3.36" # Job scheduler job_scheduler_ng = "2.0.5" # Data encoding library Hex/Base32/Base64 data-encoding = "2.5.0" # JWT library jsonwebtoken = "9.3.0" # TOTP library totp-lite = "2.0.1" # Yubico Library yubico = { version = "0.11.0", features = ["online-tokio"], default-features = false } # WebAuthn libraries webauthn-rs = "0.3.2" # Handling of URL's for WebAuthn and favicons url = "2.5.0" # Email libraries lettre = { version = "0.11.7", features = ["smtp-transport", "sendmail-transport", "builder", "serde", "tokio1-native-tls", "hostname", "tracing", "tokio1"], default-features = false } percent-encoding = "2.3.1" # URL encoding library used for URL's in the emails email_address = "0.2.4" # HTML Template library handlebars = { version = "5.1.2", features = ["dir_source"] } # HTTP client (Used for favicons, version check, DUO and HIBP API) reqwest = { version = "0.12.4", features = ["native-tls-alpn", "stream", "json", "gzip", "brotli", "socks", "cookies"] } hickory-resolver = "0.24.1" # Favicon extraction libraries html5gum = "0.5.7" regex = { version = "1.10.4", features = ["std", "perf", "unicode-perl"], default-features = false } data-url = "0.3.1" bytes = "1.6.0" # Cache function results (Used for version check and favicon fetching) cached = { version = "0.50.0", features = ["async"] } # Used for custom short lived cookie jar during favicon extraction cookie = "0.18.1" cookie_store = "0.21.0" # Used by U2F, JWT and PostgreSQL openssl = "0.10.64" # CLI argument parsing pico-args = "0.5.0" # Macro ident concatenation paste = "1.0.14" governor = "0.6.3" # Check client versions for specific features. semver = "1.0.22" # Allow overriding the default memory allocator # Mainly used for the musl builds, since the default musl malloc is very slow mimalloc = { version = "0.1.41", features = ["secure"], default-features = false, optional = true } which = "6.0.1" # 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.3.1" # Strip debuginfo from the release builds # The symbols are the 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 [lints.rust] # Forbid unsafe_code = "forbid" non_ascii_idents = "forbid" # Deny future_incompatible = { level = "deny", priority = -1 } noop_method_call = "deny" pointer_structural_match = "deny" rust_2018_idioms = { level = "deny", priority = -1 } rust_2021_compatibility = { level = "deny", priority = -1 } trivial_casts = "deny" trivial_numeric_casts = "deny" unused = { level = "deny", priority = -1 } unused_import_braces = "deny" unused_lifetimes = "deny" deprecated_in_future = "deny" [lints.clippy] # Allow # We need this since Rust v1.76+, since it has some bugs # https://github.com/rust-lang/rust-clippy/issues/12016 blocks_in_conditions = "allow" # Deny cast_lossless = "deny" clone_on_ref_ptr = "deny" equatable_if_let = "deny" float_cmp_const = "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_lifetimes = "deny" string_add_assign = "deny" string_to_string = "deny" unnecessary_join = "deny" unnecessary_self_imports = "deny" unused_async = "deny" verbose_file_reads = "deny" zero_sized_map_values = "deny"