Files

342 lines
11 KiB
TOML
Raw Permalink Normal View History

2025-11-01 22:21:04 +01:00
[workspace.package]
edition = "2021"
rust-version = "1.93.0"
2025-11-01 22:21:04 +01:00
license = "AGPL-3.0-only"
repository = "https://github.com/dani-garcia/vaultwarden"
publish = false
2025-04-09 21:21:10 +02:00
[workspace]
members = ["macros"]
2018-02-10 01:00:55 +01:00
[package]
2021-04-27 23:18:32 +02:00
name = "vaultwarden"
2018-08-21 21:21:54 +01:00
version = "1.0.0"
2018-02-10 01:00:55 +01:00
authors = ["Daniel García <dani-garcia@users.noreply.github.com>"]
readme = "README.md"
build = "build.rs"
2025-11-01 22:21:04 +01:00
resolver = "2"
repository.workspace = true
edition.workspace = true
rust-version.workspace = true
license.workspace = true
publish.workspace = true
[features]
2025-10-29 21:04:30 +01:00
default = [
# "sqlite" or "sqlite_system",
2025-10-29 21:04:30 +01:00
# "mysql",
# "postgresql",
]
# Empty to keep compatibility, prefer to set USE_SYSLOG=true
enable_syslog = []
# Please enable at least one of these DB backends.
2025-04-05 17:58:32 +02:00
mysql = ["diesel/mysql", "diesel_migrations/mysql"]
postgresql = ["diesel/postgres", "diesel_migrations/postgres"]
sqlite_system = ["diesel/sqlite", "diesel_migrations/sqlite"]
sqlite = ["sqlite_system", "libsqlite3-sys/bundled"] # Alternative to the above, statically linked SQLite into the binary instead of dynamically.
2020-09-25 23:23:13 +02:00
# Enable to use a vendored and statically linked openssl
vendored_openssl = ["openssl/vendored"]
2022-03-20 18:51:24 +01:00
# Enable MiMalloc memory allocator to replace the default malloc
# This can improve performance for Alpine builds
2024-08-23 22:06:11 +02:00
enable_mimalloc = ["dep:mimalloc"]
2026-05-15 11:30:31 -07:00
s3 = ["opendal/services-s3", "dep:aws-config", "dep:aws-credential-types", "dep:aws-smithy-runtime-api", "dep:http", "dep:reqsign-aws-v4", "dep:reqsign-core"]
2025-08-08 23:22:22 +02:00
# 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 = []
2024-10-06 13:49:00 +02:00
[target."cfg(unix)".dependencies]
2022-02-07 22:26:22 +01:00
# Logging
2024-12-05 22:10:59 +01:00
syslog = "7.0.0"
2018-02-10 01:00:55 +01:00
[dependencies]
macros = { path = "./macros" }
2022-02-07 22:26:22 +01:00
# Logging
2025-12-19 17:38:13 +01:00
log = "0.4.29"
2024-12-15 23:13:29 +01:00
fern = { version = "0.7.1", features = ["syslog-7", "reopen-1"] }
2025-12-19 17:38:13 +01:00
tracing = { version = "0.1.44", features = ["log"] } # Needed to have lettre and webauthn-rs trace logging to work
2022-02-07 22:26:22 +01:00
# A `dotenv` implementation for Rust
dotenvy = { version = "0.15.7", default-features = false }
2021-05-16 15:29:13 +02:00
2022-02-07 22:26:22 +01:00
# Numerical libraries
2024-05-19 20:30:34 +02:00
num-traits = "0.2.19"
2024-02-08 22:16:29 +01:00
num-derive = "0.4.2"
2025-12-29 21:27:12 +00:00
bigdecimal = "0.4.10"
2022-02-07 22:26:22 +01:00
# Web framework
2024-05-25 15:14:19 +02:00
rocket = { version = "0.5.1", features = ["tls", "json"], default-features = false }
rocket_ws = { version ="0.1.1" }
2022-02-07 22:26:22 +01:00
# WebSockets libraries
2025-12-29 21:27:12 +00:00
rmpv = "1.3.1" # MessagePack library
2023-02-08 17:13:14 +01:00
# Concurrent HashMap used for WebSocket messaging and favicons
2024-09-07 11:39:29 +03:00
dashmap = "6.1.0"
2022-02-07 22:26:22 +01:00
# Async futures
2026-02-18 00:17:20 +01:00
futures = "0.3.32"
2026-05-17 00:43:58 +02:00
tokio = { version = "1.52.3", features = ["rt-multi-thread", "fs", "io-util", "parking_lot", "time", "signal", "net"] }
tokio-util = { version = "0.7.18", features = ["compat"]}
2018-02-10 01:00:55 +01:00
# A generic serialization/deserialization framework
2025-10-29 21:04:30 +01:00
serde = { version = "1.0.228", features = ["derive"] }
serde_json = "1.0.149"
2018-02-10 01:00:55 +01:00
# A safe, extensible ORM and Query builder
# Currently pinned diesel to v2.3.3 as newer version break MySQL/MariaDB compatibility
2026-04-30 21:45:45 +02:00
diesel = { version = "2.3.9", features = ["chrono", "r2d2", "numeric"] }
diesel_migrations = "2.3.2"
2019-05-26 23:02:41 +02:00
2025-12-23 16:25:56 +01:00
derive_more = { version = "2.1.1", features = ["from", "into", "as_ref", "deref", "display"] }
diesel-derive-newtype = "2.1.2"
# SQLite, statically bundled unless the `sqlite_system` feature is enabled
libsqlite3-sys = { version = "0.37.0", optional = true }
2020-08-22 16:07:53 -07:00
# Crypto-related libraries
2026-04-11 20:27:07 +02:00
rand = "0.10.1"
ring = "0.17.14"
2026-05-15 11:30:31 -07:00
rustls = { version = "0.23.40", features = ["ring", "std"], default-features = false }
subtle = "2.6.1"
2018-02-10 01:00:55 +01:00
# UUID generation
uuid = { version = "1.23.1", features = ["v4"] }
2018-02-10 01:00:55 +01:00
# Date and time libraries
2026-03-09 18:38:22 +01:00
chrono = { version = "0.4.44", features = ["clock", "serde"], default-features = false }
chrono-tz = "0.10.4"
time = "0.3.47"
2018-02-10 01:00:55 +01:00
2021-04-02 20:16:49 -07:00
# Job scheduler
2025-10-29 21:04:30 +01:00
job_scheduler_ng = "2.4.0"
2021-04-02 20:16:49 -07:00
2022-02-07 22:26:22 +01:00
# Data encoding library Hex/Base32/Base64
data-encoding = "2.11.0"
2018-02-10 01:00:55 +01:00
# JWT library
2026-05-17 00:43:58 +02:00
jsonwebtoken = { version = "10.4.0", features = ["use_pem", "rust_crypto"], default-features = false }
2018-02-10 01:00:55 +01:00
2022-02-07 22:26:22 +01:00
# TOTP library
2023-11-15 10:41:14 +01:00
totp-lite = "2.0.1"
2018-11-15 18:34:17 -07:00
# Yubico Library
2026-05-15 11:30:31 -07:00
yubico = { package = "yubico_ng", version = "0.15.0", features = ["online-tokio"], default-features = false }
2018-11-15 18:34:17 -07:00
2022-03-27 17:25:04 +02:00
# WebAuthn libraries
2025-08-09 00:44:28 +02:00
# danger-allow-state-serialisation is needed to save the state in the db
# danger-credential-internals is needed to support U2F to Webauthn migration
2026-04-30 21:45:45 +02:00
webauthn-rs = { version = "0.5.5", features = ["danger-allow-state-serialisation", "danger-credential-internals"] }
webauthn-rs-proto = "0.5.5"
webauthn-rs-core = "0.5.5"
2018-02-10 01:00:55 +01:00
2023-02-08 17:13:14 +01:00
# Handling of URL's for WebAuthn and favicons
url = "2.5.8"
2023-02-08 17:13:14 +01:00
# Email libraries
2026-05-17 00:43:58 +02:00
lettre = { version = "0.11.22", features = ["smtp-transport", "sendmail-transport", "builder", "serde", "hostname", "tracing", "tokio1-rustls", "ring", "rustls-native-certs"], default-features = false }
2025-08-26 21:16:50 +02:00
percent-encoding = "2.3.2" # URL encoding library used for URL's in the emails
2024-08-07 22:46:03 +02:00
email_address = "0.2.9"
2023-02-08 17:13:14 +01:00
# HTML Template library
handlebars = { version = "6.4.0", features = ["dir_source"] }
2019-01-13 01:39:29 +01:00
2023-02-08 17:13:14 +01:00
# HTTP client (Used for favicons, version check, DUO and HIBP API)
2026-05-15 11:30:31 -07:00
reqwest = { version = "0.13.3", features = ["rustls-no-provider", "stream", "json", "form", "deflate", "gzip", "brotli", "zstd", "socks", "cookies", "charset", "http2", "system-proxy"], default-features = false}
2026-05-02 18:56:15 +02:00
hickory-resolver = "0.26.1"
2022-02-07 22:26:22 +01:00
2023-02-08 17:13:14 +01:00
# Favicon extraction libraries
2025-12-19 17:38:13 +01:00
html5gum = "0.8.3"
regex = { version = "1.12.3", features = ["std", "perf", "unicode-perl"], default-features = false }
2025-08-26 21:16:50 +02:00
data-url = "0.3.2"
bytes = "1.11.1"
2026-02-18 00:17:20 +01:00
svg-hush = "0.9.6"
2023-02-08 17:13:14 +01:00
# Cache function results (Used for version check and favicon fetching)
2026-03-23 21:26:11 +01:00
cached = { version = "0.59.0", features = ["async"] }
2022-02-07 22:26:22 +01:00
# Used for custom short lived cookie jar during favicon extraction
2024-04-06 13:55:10 +02:00
cookie = "0.18.1"
2026-02-18 00:17:20 +01:00
cookie_store = "0.22.1"
2019-01-27 15:39:19 +01:00
2023-02-08 17:13:14 +01:00
# Used by U2F, JWT and PostgreSQL
2026-05-17 00:43:58 +02:00
openssl = "0.10.79"
# CLI argument parsing
2022-06-04 19:16:36 +02:00
pico-args = "0.5.0"
# Macro ident concatenation
pastey = "0.2.2"
2025-12-19 17:38:13 +01:00
governor = "0.10.4"
2025-08-08 23:22:22 +02:00
# OIDC for SSO
2026-05-15 11:30:31 -07:00
openidconnect = { version = "4.0.1", default-features = false }
2026-03-23 21:26:11 +01:00
moka = { version = "0.12.15", features = ["future"] }
2025-08-08 23:22:22 +02:00
2022-11-07 17:13:34 +01:00
# Check client versions for specific features.
2026-04-11 20:27:07 +02:00
semver = "1.0.28"
2022-11-07 17:13:34 +01:00
2022-03-20 18:51:24 +01:00
# Allow overriding the default memory allocator
# Mainly used for the musl builds, since the default musl malloc is very slow
2026-04-22 14:29:35 +02:00
mimalloc = { version = "0.1.50", features = ["secure"], default-features = false, optional = true }
2025-04-04 12:18:09 +02:00
2026-03-23 21:26:11 +01:00
which = "8.0.2"
2022-03-20 18:51:24 +01:00
2023-02-28 23:09:51 +01:00
# Argon2 library with support for the PHC format
2024-01-26 20:19:53 +01:00
argon2 = "0.5.3"
2023-02-28 23:09:51 +01:00
# Reading a password from the cli for generating the Argon2id ADMIN_TOKEN
2026-05-17 00:43:58 +02:00
rpassword = "7.5.2"
2023-03-30 17:18:59 +02:00
2024-11-11 20:14:04 +01:00
# Loading a dynamic CSS Stylesheet
grass_compiler = { version = "0.13.4", default-features = false }
# File are accessed through Apache OpenDAL
2026-05-15 11:30:31 -07:00
opendal = { version = "0.56.0", features = ["services-fs"], default-features = false }
# For retrieving AWS credentials, including temporary SSO credentials
2026-04-22 14:29:35 +02:00
aws-config = { version = "1.8.16", features = ["behavior-version-latest", "rt-tokio", "credentials-process", "sso"], default-features = false, optional = true }
2026-03-09 18:38:22 +01:00
aws-credential-types = { version = "1.2.14", optional = true }
aws-smithy-runtime-api = { version = "1.12.0", optional = true }
http = { version = "1.4.0", optional = true }
2026-05-15 11:30:31 -07:00
reqsign-aws-v4 = { version = "3.0.0", optional = true }
reqsign-core = { version = "3.0.0", optional = true }
2022-02-22 20:48:00 +01:00
# Strip debuginfo from the release builds
2025-05-16 18:49:43 +02:00
# The debug symbols are to provide better panic traces
# Also enable fat LTO and use 1 codegen unit for optimizations
2022-02-22 20:48:00 +01:00
[profile.release]
strip = "debuginfo"
lto = "fat"
codegen-units = 1
2025-11-01 22:21:04 +01:00
debug = false
# Optimize for size
[profile.release-micro]
inherits = "release"
strip = "symbols"
2025-11-01 22:21:04 +01:00
opt-level = "z"
panic = "abort"
2024-02-08 22:16:29 +01:00
# 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
2024-02-08 22:16:29 +01:00
2025-11-01 22:21:04 +01:00
# 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
2024-02-08 22:16:29 +01:00
# Linting config
2024-09-23 20:25:32 +02:00
# https://doc.rust-lang.org/rustc/lints/groups.html
2025-04-09 21:21:10 +02:00
[workspace.lints.rust]
2024-02-08 22:16:29 +01:00
# Forbid
unsafe_code = "forbid"
non_ascii_idents = "forbid"
# Deny
2024-09-23 20:25:32 +02:00
deprecated_in_future = "deny"
2025-11-01 22:21:04 +01:00
deprecated_safe = { level = "deny", priority = -1 }
2024-04-06 13:55:10 +02:00
future_incompatible = { level = "deny", priority = -1 }
2024-09-23 20:25:32 +02:00
keyword_idents = { level = "deny", priority = -1 }
let_underscore = { level = "deny", priority = -1 }
2025-11-01 22:21:04 +01:00
nonstandard_style = { level = "deny", priority = -1 }
2024-02-08 22:16:29 +01:00
noop_method_call = "deny"
2024-09-23 20:25:32 +02:00
refining_impl_trait = { level = "deny", priority = -1 }
2024-04-06 13:55:10 +02:00
rust_2018_idioms = { level = "deny", priority = -1 }
rust_2021_compatibility = { level = "deny", priority = -1 }
2024-12-05 22:10:59 +01:00
rust_2024_compatibility = { level = "deny", priority = -1 }
2024-09-23 20:25:32 +02:00
single_use_lifetimes = "deny"
2024-02-08 22:16:29 +01:00
trivial_casts = "deny"
trivial_numeric_casts = "deny"
2024-04-06 13:55:10 +02:00
unused = { level = "deny", priority = -1 }
2024-02-08 22:16:29 +01:00
unused_import_braces = "deny"
unused_lifetimes = "deny"
2024-09-23 20:25:32 +02:00
unused_qualifications = "deny"
variant_size_differences = "deny"
# Allow the following lints since these cause issues with Rust v1.84.0 or newer
2025-11-01 22:21:04 +01:00
# 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"
2024-02-08 22:16:29 +01:00
2024-09-23 20:25:32 +02:00
# https://rust-lang.github.io/rust-clippy/stable/index.html
2025-04-09 21:21:10 +02:00
[workspace.lints.clippy]
2024-09-23 20:25:32 +02:00
# Warn
dbg_macro = "warn"
todo = "warn"
2024-02-08 22:16:29 +01:00
# Ignore/Allow
result_large_err = "allow"
2024-02-08 22:16:29 +01:00
# Deny
2025-11-01 22:21:04 +01:00
branches_sharing_code = "deny"
2024-09-23 20:25:32 +02:00
case_sensitive_file_extension_comparisons = "deny"
2024-02-08 22:16:29 +01:00
cast_lossless = "deny"
clone_on_ref_ptr = "deny"
duration_suboptimal_units = "deny"
2024-02-08 22:16:29 +01:00
equatable_if_let = "deny"
2025-11-01 22:21:04 +01:00
excessive_precision = "deny"
2024-09-23 20:25:32 +02:00
filter_map_next = "deny"
2024-02-08 22:16:29 +01:00
float_cmp_const = "deny"
implicit_clone = "deny"
2024-02-08 22:16:29 +01:00
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"
2025-11-01 22:21:04 +01:00
needless_borrow = "deny"
needless_collect = "deny"
2024-09-23 20:25:32 +02:00
needless_continue = "deny"
2024-02-08 22:16:29 +01:00
needless_lifetimes = "deny"
2024-09-23 20:25:32 +02:00
option_option = "deny"
2025-11-01 22:21:04 +01:00
redundant_clone = "deny"
2026-04-28 19:34:40 +03:00
ref_option = "deny"
2024-02-08 22:16:29 +01:00
string_add_assign = "deny"
unnecessary_join = "deny"
unnecessary_self_imports = "deny"
2024-09-23 20:25:32 +02:00
unnested_or_patterns = "deny"
2024-02-08 22:16:29 +01:00
unused_async = "deny"
2024-09-23 20:25:32 +02:00
unused_self = "deny"
2025-11-01 22:21:04 +01:00
useless_let_if_seq = "deny"
2024-02-08 22:16:29 +01:00
verbose_file_reads = "deny"
zero_sized_map_values = "deny"
2025-04-09 21:21:10 +02:00
[lints]
workspace = true