# 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. [workspace] members = [ "rustfs", # Core file system implementation "crates/appauth", # Application authentication and authorization "crates/audit", # Audit target management system with multi-target fan-out "crates/checksums", # client checksums "crates/common", # Shared utilities and data structures "crates/config", # Configuration management "crates/credentials", # Credential management system "crates/crypto", # Cryptography and security features "crates/ecstore", # Erasure coding storage implementation "crates/e2e_test", # End-to-end test suite "crates/filemeta", # File metadata management "crates/heal", # Erasure set and object healing "crates/iam", # Identity and Access Management "crates/keystone", # OpenStack Keystone integration "crates/kms", # Key Management Service "crates/lock", # Distributed locking implementation "crates/madmin", # Management dashboard and admin API interface "crates/notify", # Notification system for events "crates/obs", # Observability utilities "crates/object-capacity", # Capacity scan and refresh core "crates/policy", # Policy management "crates/protocols", # Protocol implementations (FTPS, SFTP, etc.) "crates/protos", # Protocol buffer definitions "crates/rio", # Rust I/O utilities and abstractions "crates/concurrency", # Concurrency management for RustFS - timeout, locking, backpressure, and I/O scheduling "crates/s3-common", # Common utilities and data structures for S3 compatibility "crates/s3select-api", # S3 Select API interface "crates/s3select-query", # S3 Select query engine "crates/scanner", # Scanner for data integrity checks and health monitoring "crates/signer", # client signer "crates/targets", # Target-specific configurations and utilities "crates/trusted-proxies", # Trusted proxies management "crates/utils", # Utility functions and helpers "crates/workers", # Worker thread pools and task scheduling "crates/io-metrics", # Zero-copy metrics collection for performance analysis "crates/io-core", # Zero-copy core reader and writer implementations "crates/zip", # ZIP file handling and compression ] resolver = "3" [workspace.package] edition = "2024" license = "Apache-2.0" repository = "https://github.com/rustfs/rustfs" rust-version = "1.93.0" version = "1.0.0-beta.1" homepage = "https://rustfs.com" description = "RustFS is a high-performance distributed object storage software built using Rust, one of the most popular languages worldwide. " keywords = ["RustFS", "Minio", "object-storage", "filesystem", "s3"] categories = ["web-programming", "development-tools", "filesystem", "network-programming"] authors = ["RustFS Team"] [workspace.lints.rust] unsafe_code = "deny" [workspace.lints.clippy] all = "warn" needless_collect = "warn" redundant_clone = "warn" [workspace.dependencies] # RustFS Internal Crates rustfs = { path = "./rustfs", version = "1.0.0-beta.1" } rustfs-heal = { path = "crates/heal", version = "1.0.0-beta.1" } rustfs-appauth = { path = "crates/appauth", version = "1.0.0-beta.1" } rustfs-audit = { path = "crates/audit", version = "1.0.0-beta.1" } rustfs-checksums = { path = "crates/checksums", version = "1.0.0-beta.1" } rustfs-common = { path = "crates/common", version = "1.0.0-beta.1" } rustfs-config = { path = "./crates/config", version = "1.0.0-beta.1" } rustfs-concurrency = { path = "./crates/concurrency", version = "1.0.0-beta.1" } rustfs-credentials = { path = "crates/credentials", version = "1.0.0-beta.1" } rustfs-crypto = { path = "crates/crypto", version = "1.0.0-beta.1" } rustfs-ecstore = { path = "crates/ecstore", version = "1.0.0-beta.1" } rustfs-filemeta = { path = "crates/filemeta", version = "1.0.0-beta.1" } rustfs-iam = { path = "crates/iam", version = "1.0.0-beta.1" } rustfs-keystone = { path = "crates/keystone", version = "1.0.0-beta.1" } rustfs-kms = { path = "crates/kms", version = "1.0.0-beta.1" } rustfs-lock = { path = "crates/lock", version = "1.0.0-beta.1" } rustfs-madmin = { path = "crates/madmin", version = "1.0.0-beta.1" } rustfs-notify = { path = "crates/notify", version = "1.0.0-beta.1" } rustfs-io-metrics = { path = "crates/io-metrics", version = "1.0.0-beta.1" } rustfs-io-core = { path = "crates/io-core", version = "1.0.0-beta.1" } rustfs-object-capacity = { path = "crates/object-capacity", version = "1.0.0-beta.1" } rustfs-obs = { path = "crates/obs", version = "1.0.0-beta.1" } rustfs-policy = { path = "crates/policy", version = "1.0.0-beta.1" } rustfs-protos = { path = "crates/protos", version = "1.0.0-beta.1" } rustfs-protocols = { path = "crates/protocols", version = "1.0.0-beta.1" } rustfs-rio = { path = "crates/rio", version = "1.0.0-beta.1" } rustfs-s3-common = { path = "crates/s3-common", version = "1.0.0-beta.1" } rustfs-s3select-api = { path = "crates/s3select-api", version = "1.0.0-beta.1" } rustfs-s3select-query = { path = "crates/s3select-query", version = "1.0.0-beta.1" } rustfs-scanner = { path = "crates/scanner", version = "1.0.0-beta.1" } rustfs-signer = { path = "crates/signer", version = "1.0.0-beta.1" } rustfs-trusted-proxies = { path = "crates/trusted-proxies", version = "1.0.0-beta.1" } rustfs-targets = { path = "crates/targets", version = "1.0.0-beta.1" } rustfs-utils = { path = "crates/utils", version = "1.0.0-beta.1" } rustfs-workers = { path = "crates/workers", version = "1.0.0-beta.1" } rustfs-zip = { path = "./crates/zip", version = "1.0.0-beta.1" } # Async Runtime and Networking async-channel = "2.5.0" async-compression = { version = "0.4.42" } async-recursion = "1.1.1" async-trait = "0.1.89" async-nats = "0.47.0" axum = "0.8.9" futures = "0.3.32" futures-core = "0.3.32" futures-util = "0.3.32" pollster = "0.4.0" pulsar = { version = "6.7.2", default-features = false, features = ["tokio-rustls-runtime"] } hyper = { version = "1.9.0", features = ["http2", "http1", "server"] } hyper-rustls = { version = "0.27.9", default-features = false, features = ["native-tokio", "http1", "tls12", "logging", "http2", "aws-lc-rs", "webpki-roots"] } hyper-util = { version = "0.1.20", features = ["tokio", "server-auto", "server-graceful", "tracing"] } http = "1.4.0" http-body = "1.0.1" http-body-util = "0.1.3" reqwest = { version = "0.13.3", default-features = false, features = ["rustls", "charset", "http2", "system-proxy", "stream", "json", "blocking", "query", "form"] } rustfs-kafka-async = { version = "1.2.0" } socket2 = { version = "0.6.3", features = ["all"] } tokio = { version = "1.52.2", features = ["fs", "rt-multi-thread"] } tokio-rustls = { version = "0.26.4", default-features = false, features = ["logging", "tls12", "aws-lc-rs"] } tokio-stream = { version = "0.1.18" } tokio-test = "0.4.5" tokio-util = { version = "0.7.18", features = ["io", "compat"] } tonic = { version = "0.14.5", features = ["gzip"] } tonic-prost = { version = "0.14.5" } tonic-prost-build = { version = "0.14.5" } tower = { version = "0.5.3", features = ["timeout"] } tower-http = { version = "0.6.8", features = ["cors"] } # Serialization and Data Formats bytes = { version = "1.11.1", features = ["serde"] } bytesize = "2.3.1" byteorder = "1.5.0" flatbuffers = "25.12.19" form_urlencoded = "1.2.2" prost = "0.14.3" quick-xml = "0.39.3" rmp = { version = "0.8.15" } rmp-serde = { version = "1.3.1" } serde = { version = "1.0.228", features = ["derive"] } serde_json = { version = "1.0.149", features = ["raw_value"] } serde_urlencoded = "0.7.1" # Cryptography and Security aes-gcm = { version = "0.11.0-rc.3", features = ["rand_core"] } argon2 = { version = "0.6.0-rc.8" } blake2 = "0.11.0-rc.6" chacha20poly1305 = { version = "0.11.0-rc.3" } crc-fast = "1.9.0" hmac = { version = "0.13.0" } jsonwebtoken = { version = "10.3.0", features = ["aws_lc_rs"] } openidconnect = { version = "4.0", default-features = false } pbkdf2 = "0.13.0" rsa = { version = "0.10.0-rc.18" } rustls = { version = "0.23.40", default-features = false, features = ["aws-lc-rs", "logging", "tls12", "prefer-post-quantum", "std"] } rustls-pki-types = "1.14.1" sha1 = "0.11.0" sha2 = "0.11.0" subtle = "2.6" zeroize = { version = "1.8.2", features = ["derive"] } # Time and Date chrono = { version = "0.4.44", features = ["serde"] } humantime = "2.3.0" jiff = { version = "0.2.24", features = ["serde"] } time = { version = "0.3.47", features = ["std", "parsing", "formatting", "macros", "serde"] } # Utilities and Tools anyhow = "1.0.102" arc-swap = "1.9.1" astral-tokio-tar = "0.6.1" atoi = "2.0.0" atomic_enum = "0.3.0" aws-config = { version = "1.8.16" } aws-credential-types = { version = "1.2.14" } aws-sdk-s3 = { version = "1.131.0", default-features = false, features = ["sigv4a", "default-https-client", "rt-tokio"] } aws-smithy-http-client = { version = "1.1.12", default-features = false, features = ["default-client", "rustls-aws-lc"] } aws-smithy-types = { version = "1.4.7" } backtrace = "0.3.76" base64 = "0.22.1" base64-simd = "0.8.0" brotli = "8.0.2" cfg-if = "1.0.4" clap = { version = "4.6.1", features = ["derive", "env"] } const-str = { version = "1.1.0", features = ["std", "proc"] } convert_case = "0.11.0" criterion = { version = "0.8", features = ["html_reports"] } crossbeam-queue = "0.3.12" crossbeam-channel = "0.5.15" crossbeam-deque = "0.8.6" crossbeam-utils = "0.8.21" datafusion = "53.1.0" derive_builder = "0.20.2" enumset = "1.1.10" faster-hex = "0.10.0" flate2 = "1.1.9" glob = "0.3.3" google-cloud-storage = "1.11.0" google-cloud-auth = "1.9.0" hashbrown = { version = "0.17.0", features = ["serde", "rayon"] } hex = "0.4.3" hex-simd = "0.8.0" highway = { version = "1.3.0" } ipnetwork = { version = "0.21.1", features = ["serde"] } lazy_static = "1.5.0" libc = "0.2.186" libsystemd = "0.7.2" local-ip-address = "0.6.12" memmap2 = "0.9.10" lz4 = "1.28.1" matchit = "0.9.2" md-5 = "0.11.0" md5 = "0.8.0" mime_guess = "2.0.5" moka = { version = "0.12.15", features = ["future"] } netif = "0.1.6" num_cpus = { version = "1.17.0" } nvml-wrapper = "0.12.1" object_store = "0.13.2" parking_lot = "0.12.5" path-absolutize = "3.1.1" path-clean = "1.0.1" percent-encoding = "2.3.2" pin-project-lite = "0.2.17" pretty_assertions = "1.4.1" rand = { version = "0.10.1", features = ["serde"] } ratelimit = "0.10.1" rayon = "1.12.0" reed-solomon-erasure = { version = "6.0", default-features = false, features = ["std", "simd-accel"] } reed-solomon-simd = "3.1.0" regex = { version = "1.12.3" } rumqttc = { package = "rumqttc-next", version = "0.30.1", features = ["websocket"] } rustix = { version = "1.1.4", features = ["fs"] } rust-embed = { version = "8.11.0" } rustc-hash = { version = "2.1.2" } s3s = { git = "https://github.com/rustfs/s3s", rev = "a3b16608df35aaeed8fff08b4988d03f4ca9445b", features = ["minio"] } serial_test = "3.4.0" shadow-rs = { version = "2.0.0", default-features = false } siphasher = "1.0.3" smallvec = { version = "1.15.1", features = ["serde"] } smartstring = "1.0.1" snafu = "0.9.0" snap = "1.1.1" starshard = { version = "1.1.0", features = ["rayon", "async", "serde"] } strum = { version = "0.28.0", features = ["derive"] } sysinfo = "0.38.4" temp-env = "0.3.6" tempfile = "3.27.0" test-case = "3.3.1" thiserror = "2.0.18" tracing = { version = "0.1.44" } tracing-appender = "0.2.5" tracing-error = "0.2.1" tracing-opentelemetry = "0.32.1" tracing-subscriber = { version = "0.3.23", features = ["env-filter", "time"] } transform-stream = "0.3.1" url = "2.5.8" urlencoding = "2.1.3" uuid = { version = "1.23.1", features = ["v4", "fast-rng", "macro-diagnostics"] } vaultrs = { version = "0.8.0" } walkdir = "2.5.0" wildmatch = { version = "2.6.1", features = ["serde"] } windows = { version = "0.62.2" } xxhash-rust = { version = "0.8.15", features = ["xxh64", "xxh3"] } zip = "8.6.0" zstd = "0.13.3" # Observability and Metrics metrics = "0.24.5" dial9-tokio-telemetry = "0.3" opentelemetry = { version = "0.31.0" } opentelemetry-appender-tracing = { version = "0.31.1", features = ["experimental_use_tracing_span_context", "experimental_metadata_attributes", "spec_unstable_logs_enabled"] } opentelemetry-otlp = { version = "0.31.1", features = ["gzip-http", "reqwest-rustls"] } opentelemetry_sdk = { version = "0.31.0" } opentelemetry-semantic-conventions = { version = "0.31.0", features = ["semconv_experimental"] } opentelemetry-stdout = { version = "0.31.0" } pyroscope = { version = "2.0.3", features = ["backend-pprof-rs"] } # FTP and SFTP libunftp = { version = "0.23.0", features = ["experimental"] } unftp-core = "0.1.0" suppaftp = { version = "8.0.3", features = ["tokio", "tokio-rustls-aws-lc-rs"] } rcgen = "0.14.7" # WebDAV dav-server = "0.11.0" # Performance Analysis and Memory Profiling mimalloc = "0.1" # Use tikv-jemallocator as memory allocator and enable performance analysis tikv-jemallocator = { version = "0.6", features = ["profiling", "stats", "unprefixed_malloc_on_supported_platforms", "background_threads"] } # Used to control and obtain statistics for jemalloc at runtime tikv-jemalloc-ctl = { version = "0.6", features = ["use_std", "stats", "profiling"] } # Used to generate pprof-compatible memory profiling data and support symbolization and flame graphs jemalloc_pprof = { version = "0.8.2", features = ["symbolize", "flamegraph"] } # Used to generate CPU performance analysis data and flame diagrams # pprof = { version = "0.15.0", features = ["flamegraph", "protobuf-codec"] } # Pyroscope uses a patched pprof, until they merge back upstream, replace all references. Otherwise, two pprof libs with symbol collision. pprof = { package = "pprof-pyroscope-fork", version = "0.1500.3", features = ["flamegraph", "protobuf-codec"] } [workspace.metadata.cargo-shear] ignored = ["rustfs"] [profile.release] opt-level = 3 [profile.production] inherits = "release" lto = "fat" codegen-units = 1 [profile.profiling] inherits = "release" debug = true