# 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" [[bin]] name = "manual-test-dial9" path = "tests/manual/test_dial9.rs" test = false bench = false required-features = ["manual-test-runners"] [features] default = ["direct-io"] metrics-gpu = ["rustfs-metrics/gpu"] ftps = ["rustfs-protocols/ftps"] swift = ["rustfs-protocols/swift"] webdav = ["rustfs-protocols/webdav"] license = [] direct-io = [] # Aligned direct I/O reader support (uses aligned pread, does not set O_DIRECT) 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", "direct-io"] manual-test-runners = [] [lints] workspace = true [dependencies] # RustFS Internal Crates rustfs-heal = { workspace = true } rustfs-appauth = { workspace = true } rustfs-audit = { workspace = true } rustfs-common = { workspace = true } rustfs-config = { workspace = true, features = ["constants", "notify"] } 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-madmin = { workspace = true } rustfs-metrics = { 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-common = { workspace = true } rustfs-s3select-api = { workspace = true } rustfs-s3select-query = { workspace = true } rustfs-targets = { 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-io = { workspace = true } rustfs-object-capacity = { workspace = true } rustfs-concurrency = { workspace = true } rustfs-scanner = { workspace = true } tempfile = { workspace = true } # Async Runtime and Networking async-trait = { workspace = true } axum.workspace = true futures.workspace = true futures-util.workspace = true hyper.workspace = true hyper-util.workspace = true http.workspace = true http-body.workspace = true http-body-util.workspace = true reqwest = { workspace = true } socket2 = { workspace = true } tokio = { workspace = true, features = ["rt-multi-thread", "macros", "net", "signal", "process", "io-util"] } tokio-rustls = { workspace = true } aws-sdk-s3 = { workspace = true } tokio-stream.workspace = true tokio-util.workspace = true tonic = { workspace = true } tower.workspace = true tower-http = { workspace = true, features = ["trace", "compression-full", "cors", "catch-panic", "timeout", "limit", "request-id", "add-extension"] } # Serialization and Data Formats bytes = { workspace = true } flatbuffers.workspace = true rmp-serde.workspace = true rustfs-signer.workspace = true serde.workspace = true serde_json.workspace = true serde_urlencoded = { workspace = true } # Cryptography and Security rustls = { workspace = true } subtle = { workspace = true } jiff = { workspace = true } time = { workspace = true, features = ["parsing", "formatting", "serde"] } # Utilities and Tools astral-tokio-tar = { workspace = true } atoi = { workspace = true } atomic_enum = { workspace = true } base64 = { workspace = true } sha2 = { workspace = true } base64-simd.workspace = true clap = { workspace = true } const-str = { workspace = true } datafusion = { workspace = true } hex-simd.workspace = true matchit = { workspace = true } md5.workspace = true mime_guess = { workspace = true } percent-encoding = { workspace = true } pin-project-lite.workspace = true rust-embed = { workspace = true, features = ["interpolate-folder-path"] } s3s.workspace = true shadow-rs = { workspace = true, features = ["build", "metadata"] } sysinfo = { workspace = true, features = ["multithread"] } thiserror = { workspace = true } tracing.workspace = true url = { workspace = true } urlencoding = { workspace = true } uuid = { workspace = true } zip = { workspace = true } libc = { workspace = true } rand = { workspace = true } aes-gcm = { workspace = true } # Observability and Metrics metrics = { workspace = true } opentelemetry = { workspace = true } tracing-opentelemetry = { workspace = true } # Data structures hashbrown = { workspace = true } [target.'cfg(target_os = "linux")'.dependencies] libsystemd.workspace = true [target.'cfg(not(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64")))'.dependencies] mimalloc = { workspace = true } # Only enable pprof-based profiling on non-Windows targets. [target.'cfg(all(not(target_os = "windows"), not(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64"))))'.dependencies] starshard = { workspace = true } backtrace = { workspace = true } rand = { workspace = true } pprof = { workspace = true } [target.'cfg(all(target_os = "linux", target_env = "gnu", target_arch = "x86_64"))'.dependencies] tikv-jemallocator = { workspace = true } tikv-jemalloc-ctl = { workspace = true } jemalloc_pprof = { workspace = true } pprof = { workspace = true } [dev-dependencies] uuid = { workspace = true, features = ["v4"] } serial_test = { workspace = true } tempfile = { workspace = true } aws-config = { workspace = true } anyhow = { workspace = true } tokio = { workspace = true, features = ["test-util"] } temp-env = { workspace = true, features = ["async_closure"] } [build-dependencies] http.workspace = true futures.workspace = true s3s = { workspace = true } clap = { workspace = true } hyper-util = { workspace = true, features = [ "tokio", "server-auto", "server-graceful", ] } shadow-rs = { workspace = true, features = ["build"] }