You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							337 lines
						
					
					
						
							10 KiB
						
					
					
				
			
		
		
		
			
			
			
		
		
	
	
							337 lines
						
					
					
						
							10 KiB
						
					
					
				| [workspace.package] | |
| edition = "2021" | |
| rust-version = "1.88.0" | |
| license = "AGPL-3.0-only" | |
| repository = "https://github.com/dani-garcia/vaultwarden" | |
| publish = false | |
| 
 | |
| [workspace] | |
| members = ["macros"] | |
| 
 | |
| [package] | |
| name = "vaultwarden" | |
| version = "1.0.0" | |
| authors = ["Daniel García <dani-garcia@users.noreply.github.com>"] | |
| readme = "README.md" | |
| build = "build.rs" | |
| resolver = "2" | |
| repository.workspace = true | |
| edition.workspace = true | |
| rust-version.workspace = true | |
| license.workspace = true | |
| publish.workspace = true | |
| 
 | |
| [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 } | |
| 
 | |
| # 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 | |
| debug = false | |
| 
 | |
| # Optimize for size | |
| [profile.release-micro] | |
| inherits = "release" | |
| strip = "symbols" | |
| opt-level = "z" | |
| 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 | |
| 
 | |
| # Used for profiling and debugging like valgrind or heaptrack | |
| # Inherits release to be sure all optimizations have been done | |
| [profile.dbg] | |
| inherits = "release" | |
| strip = "none" | |
| split-debuginfo = "off" | |
| debug = "full" | |
| 
 | |
| # A little bit of a speedup for generic building | |
| [profile.dev] | |
| split-debuginfo = "unpacked" | |
| debug = "line-tables-only" | |
| 
 | |
| # Used for CI builds to improve compile time | |
| [profile.ci] | |
| inherits = "dev" | |
| debug = false | |
| debug-assertions = false | |
| strip = "symbols" | |
| panic = "abort" | |
| 
 | |
| # Always build argon2 using opt-level 3 | |
| # This is a huge speed improvement during testing | |
| [profile.dev.package.argon2] | |
| opt-level = 3 | |
| 
 | |
| # 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" | |
| deprecated_safe = { level = "deny", priority = -1 } | |
| future_incompatible = { level = "deny", priority = -1 } | |
| keyword_idents = { level = "deny", priority = -1 } | |
| let_underscore = { level = "deny", priority = -1 } | |
| nonstandard_style = { 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 } | |
| 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 with edition 2024 also works without issues | |
| edition_2024_expr_fragment_specifier = "allow" # Once changed to Rust 2024 this should be removed and macro's should be validated again | |
| 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 | |
| branches_sharing_code = "deny" | |
| case_sensitive_file_extension_comparisons = "deny" | |
| cast_lossless = "deny" | |
| clone_on_ref_ptr = "deny" | |
| equatable_if_let = "deny" | |
| excessive_precision = "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_borrow = "deny" | |
| needless_collect = "deny" | |
| needless_continue = "deny" | |
| needless_lifetimes = "deny" | |
| option_option = "deny" | |
| redundant_clone = "deny" | |
| string_add_assign = "deny" | |
| unnecessary_join = "deny" | |
| unnecessary_self_imports = "deny" | |
| unnested_or_patterns = "deny" | |
| unused_async = "deny" | |
| unused_self = "deny" | |
| useless_let_if_seq = "deny" | |
| verbose_file_reads = "deny" | |
| zero_sized_map_values = "deny" | |
| 
 | |
| [lints] | |
| workspace = true
 | |
| 
 |