# Copyright 2024 RustFS Team # # Licensed under the Apache License, Version 2.0 (the "License"); # you may not use this file except in compliance with the License. # You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, software # distributed under the License is distributed on an "AS IS" BASIS, # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. # See the License for the specific language governing permissions and # limitations under the License. [package] name = "rustfs" version.workspace = true edition.workspace = true license.workspace = true repository.workspace = true rust-version.workspace = true homepage.workspace = true default-run = "rustfs" description = "RustFS is a high-performance, distributed file system designed for modern cloud-native applications, providing efficient data storage and retrieval with advanced features like S3 Select, IAM, and policy management." keywords.workspace = true categories.workspace = true documentation = "https://docs.rustfs.com/" # See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html [lib] name = "rustfs" path = "src/lib.rs" [[bin]] name = "rustfs" path = "src/main.rs" [features] default = ["ftps", "webdav"] metrics-gpu = ["rustfs-obs/gpu"] ftps = ["rustfs-protocols/ftps"] swift = ["rustfs-protocols/swift"] webdav = ["rustfs-protocols/webdav"] sftp = ["rustfs-protocols/sftp"] license = [] io-scheduler-debug = [] # Enable debug information in I/O scheduler tracing-chunk-debug = [] # Enable per-chunk tracing in data plane (high noise, for debugging only) full = ["metrics-gpu", "ftps", "swift", "webdav", "sftp", "pyroscope"] manual-test-runners = [] rio-v2 = ["rustfs-ecstore/rio-v2"] pyroscope = ["rustfs-obs/pyroscope"] # Tokio runtime telemetry. Requires `--cfg tokio_unstable`; use `make build-profiling`. dial9 = ["rustfs-obs/dial9"] hotpath = [ "dep:hotpath", "hotpath/hotpath", "rustfs-ecstore/hotpath", "rustfs-filemeta/hotpath", "rustfs-rio/hotpath", ] [lints] workspace = true [dependencies] hotpath = { workspace = true, optional = true } # RustFS Internal Crates rustfs-heal = { workspace = true } rustfs-audit = { workspace = true } rustfs-common = { workspace = true } rustfs-config = { workspace = true, features = ["notify", "server-config-model"] } rustfs-crypto = { workspace = true } rustfs-credentials = { workspace = true } rustfs-ecstore = { workspace = true } rustfs-filemeta.workspace = true rustfs-iam = { workspace = true } rustfs-keystone = { workspace = true } rustfs-kms = { workspace = true } rustfs-lock.workspace = true rustfs-log-analyzer = { workspace = true } rustfs-madmin = { workspace = true } rustfs-notify = { workspace = true } rustfs-obs = { workspace = true } rustfs-policy = { workspace = true } rustfs-protocols = { workspace = true } rustfs-protos = { workspace = true } rustfs-rio = { workspace = true } rustfs-s3-types = { workspace = true } rustfs-s3-ops = { workspace = true } rustfs-security-governance = { workspace = true } rustfs-data-usage = { workspace = true } rustfs-s3select-api = { workspace = true } rustfs-s3select-query = { workspace = true } rustfs-extension-schema = { workspace = true } rustfs-targets = { workspace = true } rustfs-storage-api = { workspace = true } rustfs-tls-runtime = { workspace = true } rustfs-trusted-proxies = { workspace = true } rustfs-utils = { workspace = true, features = ["full"] } rustfs-zip = { workspace = true } rustfs-io-core = { workspace = true } rustfs-io-metrics = { workspace = true } rustfs-object-capacity = { workspace = true } rustfs-object-data-cache = { workspace = true } rustfs-concurrency = { workspace = true } rustfs-scanner = { workspace = true } tempfile = { workspace = true } starshard = { workspace = true, features = ["rayon", "async", "serde"] } # Async Runtime and Networking async-trait = { workspace = true } axum.workspace = true futures.workspace = true futures-lite.workspace = true futures-util.workspace = true hyper = { workspace = true, features = ["http2", "http1", "server"] } hyper-util = { workspace = true, features = ["tokio", "server-auto", "server-graceful", "tracing"] } http.workspace = true http-body.workspace = true http-body-util.workspace = true reqwest = { workspace = true, features = ["json", "stream"] } socket2 = { workspace = true, features = ["all"] } tokio = { workspace = true, features = ["rt-multi-thread", "macros", "net", "signal", "process", "io-util", "fs"] } tokio-rustls = { workspace = true, default-features = false, features = ["logging", "tls12", "aws-lc-rs"] } aws-sdk-s3 = { workspace = true, default-features = false, features = ["sigv4a", "default-https-client", "rt-tokio"] } tokio-stream.workspace = true tokio-util = { workspace = true, features = ["io", "compat"] } tonic = { workspace = true, features = ["gzip", "deflate"] } tower = { workspace = true, features = ["timeout"] } tower-http = { workspace = true, features = ["trace", "compression-full", "cors", "catch-panic", "timeout", "limit", "request-id", "add-extension"] } # Serialization and Data Formats apache-avro = { workspace = true } bytes = { workspace = true, features = ["serde"] } chrono = { workspace = true, features = ["serde"] } flatbuffers.workspace = true rmp-serde.workspace = true quick-xml.workspace = true rustfs-signer.workspace = true serde = { workspace = true, features = ["derive"] } serde_json = { workspace = true, features = ["raw_value"] } serde_urlencoded = { workspace = true } # Cryptography and Security rustls = { workspace = true, default-features = false, features = ["aws-lc-rs", "logging", "tls12", "prefer-post-quantum", "std"] } rustls-pki-types = { workspace = true } subtle = { workspace = true } jiff = { workspace = true, features = ["serde"] } time = { workspace = true, features = ["parsing", "formatting", "serde", "macros"] } # Utilities and Tools astral-tokio-tar = { workspace = true } atoi = { workspace = true } atomic_enum = { workspace = true } async_zip = { workspace = true, default-features = false, features = ["tokio", "deflate"] } base64 = { workspace = true } hmac = { workspace = true } sha2 = { workspace = true } rsa = { workspace = true, features = ["sha2"] } base64-simd.workspace = true clap = { workspace = true, features = ["derive", "env"] } const-str = { workspace = true, features = ["std", "proc"] } datafusion = { workspace = true, default-features = false, features = ["parquet", "recursive_protection", "sql"] } hex-simd.workspace = true matchit = { workspace = true } md5.workspace = true mime_guess = { workspace = true } percent-encoding = { workspace = true } pin-project-lite.workspace = true parking_lot = { workspace = true } rust-embed = { workspace = true, features = ["interpolate-folder-path"] } s3s = { workspace = true, features = ["minio"] } shadow-rs = { workspace = true, default-features = false, features = ["build", "metadata"] } sysinfo = { workspace = true, features = ["multithread"] } thiserror = { workspace = true } tracing.workspace = true url = { workspace = true } urlencoding = { workspace = true } uuid = { workspace = true, features = ["v4", "fast-rng", "macro-diagnostics"] } zip = { workspace = true } libc = { workspace = true } rand = { workspace = true, features = ["serde"] } regex = { workspace = true } aes-gcm = { workspace = true, features = ["rand_core"] } chacha20poly1305 = { workspace = true } # Observability and Metrics metrics = { workspace = true } opentelemetry = { workspace = true } tracing-opentelemetry = { workspace = true } # Data structures hashbrown = { workspace = true, features = ["serde", "rayon"] } mimalloc = { workspace = true } [target.'cfg(target_os = "linux")'.dependencies] libsystemd.workspace = true [target.'cfg(not(target_os = "windows"))'.dependencies] libmimalloc-sys = { version = "0.1.49", features = ["extended"] } [dev-dependencies] uuid = { workspace = true, features = ["v4", "fast-rng", "macro-diagnostics"] } serial_test = { workspace = true } tempfile = { workspace = true } aws-config = { workspace = true } anyhow = { workspace = true } insta = { workspace = true, features = ["yaml", "json"] } proptest = "1" tokio = { workspace = true, features = ["test-util", "fs", "rt-multi-thread"] } temp-env = { workspace = true, features = ["async_closure"] } tracing-subscriber = { workspace = true, features = ["env-filter", "time"] } metrics-util = { version = "0.20", features = ["debugging"] } opentelemetry_sdk = { workspace = true, features = ["rt-tokio"] } rsa = { workspace = true } rcgen = { workspace = true } rustfs-test-utils.workspace = true # diagnose_e2e fixtures (archives are generated in-test, never checked in) zip = { workspace = true } zstd = { workspace = true } # Enables the shared MockWarmBackend / xl.meta assertion helpers exposed via # the ecstore `api::tier::test_util` facade module (rustfs/backlog#1148 ilm-6). rustfs-ecstore = { workspace = true, features = ["test-util"] } [build-dependencies] http.workspace = true futures.workspace = true s3s = { workspace = true, features = ["minio"] } clap = { workspace = true, features = ["derive", "env"] } hyper-util = { workspace = true, features = [ "tokio", "server-auto", "server-graceful", "tracing", ] } shadow-rs = { workspace = true, default-features = false, features = ["build"] }