# 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/common", # Shared utilities and data structures "crates/config", # Configuration management "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/iam", # Identity and Access Management "crates/lock", # Distributed locking implementation "crates/madmin", # Management dashboard and admin API interface "crates/notify", # Notification system for events "crates/obs", # Observability utilities "crates/policy", # Policy management "crates/protos", # Protocol buffer definitions "crates/rio", # Rust I/O utilities and abstractions "crates/targets", # Target-specific configurations and utilities "crates/s3select-api", # S3 Select API interface "crates/s3select-query", # S3 Select query engine "crates/signer", # client signer "crates/checksums", # client checksums "crates/utils", # Utility functions and helpers "crates/workers", # Worker thread pools and task scheduling "crates/zip", # ZIP file handling and compression "crates/ahm", # Asynchronous Hash Map for concurrent data structures "crates/mcp", # MCP server for S3 operations "crates/kms", # Key Management Service ] resolver = "2" [workspace.package] edition = "2024" license = "Apache-2.0" repository = "https://github.com/rustfs/rustfs" rust-version = "1.85" version = "0.0.5" 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"] [workspace.lints.rust] unsafe_code = "deny" [workspace.lints.clippy] all = "warn" [workspace.dependencies] # RustFS Internal Crates rustfs = { path = "./rustfs", version = "0.0.5" } rustfs-ahm = { path = "crates/ahm", version = "0.0.5" } rustfs-appauth = { path = "crates/appauth", version = "0.0.5" } rustfs-audit = { path = "crates/audit", version = "0.0.5" } rustfs-checksums = { path = "crates/checksums", version = "0.0.5" } rustfs-common = { path = "crates/common", version = "0.0.5" } rustfs-config = { path = "./crates/config", version = "0.0.5" } rustfs-crypto = { path = "crates/crypto", version = "0.0.5" } rustfs-ecstore = { path = "crates/ecstore", version = "0.0.5" } rustfs-filemeta = { path = "crates/filemeta", version = "0.0.5" } rustfs-iam = { path = "crates/iam", version = "0.0.5" } rustfs-kms = { path = "crates/kms", version = "0.0.5" } rustfs-lock = { path = "crates/lock", version = "0.0.5" } rustfs-madmin = { path = "crates/madmin", version = "0.0.5" } rustfs-mcp = { path = "crates/mcp", version = "0.0.5" } rustfs-notify = { path = "crates/notify", version = "0.0.5" } rustfs-obs = { path = "crates/obs", version = "0.0.5" } rustfs-policy = { path = "crates/policy", version = "0.0.5" } rustfs-protos = { path = "crates/protos", version = "0.0.5" } rustfs-rio = { path = "crates/rio", version = "0.0.5" } rustfs-s3select-api = { path = "crates/s3select-api", version = "0.0.5" } rustfs-s3select-query = { path = "crates/s3select-query", version = "0.0.5" } rustfs-signer = { path = "crates/signer", version = "0.0.5" } rustfs-targets = { path = "crates/targets", version = "0.0.5" } rustfs-utils = { path = "crates/utils", version = "0.0.5" } rustfs-workers = { path = "crates/workers", version = "0.0.5" } rustfs-zip = { path = "./crates/zip", version = "0.0.5" } # Async Runtime and Networking async-channel = "2.5.0" async-compression = { version = "0.4.19" } async-recursion = "1.1.1" async-trait = "0.1.89" axum = "0.8.7" axum-extra = "0.12.2" axum-server = { version = "0.8.0", features = ["tls-rustls-no-provider"], default-features = false } futures = "0.3.31" futures-core = "0.3.31" futures-util = "0.3.31" hyper = { version = "1.8.1", features = ["http2", "http1", "server"] } hyper-rustls = { version = "0.27.7", default-features = false, features = ["native-tokio", "http1", "tls12", "logging", "http2", "ring", "webpki-roots"] } hyper-util = { version = "0.1.19", features = ["tokio", "server-auto", "server-graceful"] } http = "1.4.0" http-body = "1.0.1" reqwest = { version = "0.12.25", default-features = false, features = ["rustls-tls-webpki-roots", "charset", "http2", "system-proxy", "stream", "json", "blocking"] } socket2 = "0.6.1" tokio = { version = "1.48.0", features = ["fs", "rt-multi-thread"] } tokio-rustls = { version = "0.26.4", default-features = false, features = ["logging", "tls12", "ring"] } tokio-stream = { version = "0.1.17" } tokio-test = "0.4.4" tokio-util = { version = "0.7.17", features = ["io", "compat"] } tonic = { version = "0.14.2", features = ["gzip"] } tonic-prost = { version = "0.14.2" } tonic-prost-build = { version = "0.14.2" } tower = { version = "0.5.2", features = ["timeout"] } tower-http = { version = "0.6.8", features = ["cors"] } # Serialization and Data Formats bytes = { version = "1.11.0", features = ["serde"] } bytesize = "2.3.1" byteorder = "1.5.0" flatbuffers = "25.9.23" form_urlencoded = "1.2.2" prost = "0.14.1" quick-xml = "0.38.4" rmcp = { version = "0.11.0" } rmp = { version = "0.8.14" } rmp-serde = { version = "1.3.0" } serde = { version = "1.0.228", features = ["derive"] } serde_json = { version = "1.0.145", features = ["raw_value"] } serde_urlencoded = "0.7.1" schemars = "1.1.0" # Cryptography and Security aes-gcm = { version = "0.11.0-rc.2", features = ["rand_core"] } argon2 = { version = "0.6.0-rc.4", features = ["std"] } blake3 = { version = "1.8.2", features = ["rayon", "mmap"] } chacha20poly1305 = { version = "0.11.0-rc.2" } crc-fast = "1.6.0" hmac = { version = "0.13.0-rc.3" } jsonwebtoken = { version = "10.2.0", features = ["rust_crypto"] } pbkdf2 = "0.13.0-rc.5" rsa = { version = "0.10.0-rc.10" } rustls = { version = "0.23.35", features = ["ring", "logging", "std", "tls12"], default-features = false } rustls-pemfile = "2.2.0" rustls-pki-types = "1.13.1" sha1 = "0.11.0-rc.3" sha2 = "0.11.0-rc.3" subtle = "2.6" zeroize = { version = "1.8.2", features = ["derive"] } # Time and Date chrono = { version = "0.4.42", features = ["serde"] } humantime = "2.3.0" time = { version = "0.3.44", features = ["std", "parsing", "formatting", "macros", "serde"] } # Utilities and Tools anyhow = "1.0.100" arc-swap = "1.7.1" astral-tokio-tar = "0.5.6" atoi = "2.0.0" atomic_enum = "0.3.0" aws-config = { version = "1.8.12" } aws-credential-types = { version = "1.2.11" } aws-sdk-s3 = { version = "1.117.0", default-features = false, features = ["sigv4a", "rustls", "rt-tokio"] } aws-smithy-types = { version = "1.3.5" } base64 = "0.22.1" base64-simd = "0.8.0" brotli = "8.0.2" cfg-if = "1.0.4" clap = { version = "4.5.53", features = ["derive", "env"] } const-str = { version = "0.7.1", features = ["std", "proc"] } convert_case = "0.10.0" criterion = { version = "0.8", features = ["html_reports"] } crossbeam-queue = "0.3.12" datafusion = "51.0.0" derive_builder = "0.20.2" enumset = "1.1.10" faster-hex = "0.10.0" flate2 = "1.1.5" flexi_logger = { version = "0.31.7", features = ["trc", "dont_minimize_extra_stacks", "compress", "kv", "json"] } glob = "0.3.3" google-cloud-storage = "1.5.0" google-cloud-auth = "1.3.0" hashbrown = { version = "0.16.1", features = ["serde", "rayon"] } heed = { version = "0.22.0" } 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.178" libsystemd = "0.7.2" local-ip-address = "0.6.7" lz4 = "1.28.1" matchit = "0.9.0" md-5 = "0.11.0-rc.3" md5 = "0.8.0" mime_guess = "2.0.5" moka = { version = "0.12.11", features = ["future"] } netif = "0.1.6" nix = { version = "0.30.1", features = ["fs"] } nu-ansi-term = "0.50.3" num_cpus = { version = "1.17.0" } nvml-wrapper = "0.11.0" object_store = "0.12.4" parking_lot = "0.12.5" path-absolutize = "3.1.1" path-clean = "1.0.1" pin-project-lite = "0.2.16" pretty_assertions = "1.4.1" rand = { version = "0.10.0-rc.5", features = ["serde"] } rayon = "1.11.0" reed-solomon-simd = { version = "3.1.0" } regex = { version = "1.12.2" } rumqttc = { version = "0.25.1" } rust-embed = { version = "8.9.0" } rustc-hash = { version = "2.1.1" } s3s = { version = "0.12.0-rc.5", features = ["minio"], git = "https://github.com/s3s-project/s3s.git", branch = "main" } serial_test = "3.2.0" shadow-rs = { version = "1.4.0", default-features = false } siphasher = "1.0.1" smallvec = { version = "1.15.1", features = ["serde"] } smartstring = "1.0.1" snafu = "0.8.9" snap = "1.1.1" starshard = { version = "0.6.0", features = ["rayon", "async", "serde"] } strum = { version = "0.27.2", features = ["derive"] } sysctl = "0.7.1" sysinfo = "0.37.2" temp-env = "0.3.6" tempfile = "3.23.0" test-case = "3.3.1" thiserror = "2.0.17" tracing = { version = "0.1.43" } tracing-appender = "0.2.4" tracing-error = "0.2.1" tracing-opentelemetry = "0.32.0" tracing-subscriber = { version = "0.3.22", features = ["env-filter", "time"] } transform-stream = "0.3.1" url = "2.5.7" urlencoding = "2.1.3" uuid = { version = "1.19.0", features = ["v4", "fast-rng", "macro-diagnostics"] } vaultrs = { version = "0.7.4" } walkdir = "2.5.0" wildmatch = { version = "2.6.1", features = ["serde"] } winapi = { version = "0.3.9" } xxhash-rust = { version = "0.8.15", features = ["xxh64", "xxh3"] } zip = "6.0.0" zstd = "0.13.3" # Observability and Metrics metrics = "0.24.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.0", 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" } # 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.1", features = ["symbolize", "flamegraph"] } # Used to generate CPU performance analysis data and flame diagrams pprof = { version = "0.15.0", features = ["flamegraph", "protobuf-codec"] } [workspace.metadata.cargo-shear] ignored = ["rustfs", "rustfs-mcp"] [profile.release] opt-level = 3 [profile.production] inherits = "release" lto = "fat" codegen-units = 1 [profile.profiling] inherits = "release" debug = true