RustFS GA Release: Rust-Based MinIO Alternative Reaches Production Readiness

RustFS, a Rust-written S3-compatible distributed object storage, hits GA with 32.5K GitHub stars, offering MinIO migration paths including on-demand data migration, versioning, erasure coding, and storage pool scaling, plus a Docker quick-start for production evaluation.

JavaGuide
JavaGuide
JavaGuide
RustFS GA Release: Rust-Based MinIO Alternative Reaches Production Readiness

RustFS GA Release: Production-Ready MinIO Alternative

RustFS, an open-source distributed object storage written in Rust, has reached General Availability (GA) after a year of development, accumulating 32.5K GitHub stars. Licensed under Apache-2.0, it provides S3 API compatibility, allowing existing S3 SDK-based applications to switch with minimal code changes.

Migrating from MinIO: Interface Compatibility and Data Migration

The author's AI interview project uses RustFS via the AWS S3 SDK, configuring endpointOverride to point to RustFS. Standard operations like putObject and getObjectAsBytes work without RustFS-specific interfaces. For migration, the official compatibility matrix lists support for multipart upload, presigned URLs, and reading MinIO unencrypted objects, bucket metadata, and IAM configurations (preview). Encrypted objects depend on the original key management.

For large datasets, RustFS offers on-demand migration: associate a MinIO source bucket with RustFS; reads fetch from MinIO if not local, then write locally (background refill for large objects). Subsequent reads are served by RustFS. Writes must be directed solely to RustFS during migration, as fetched objects do not track source updates. ListObjectsV2 source merging must be enabled for complete file listings. Historical versions and SSE-C encrypted objects require separate migration plans.

Production-Grade Features: Versioning, Object Lock, and Lifecycle

RustFS provides bucket versioning to recover overwritten or deleted files. Enabling versioning on a bucket (or via Settings > Data Protection) creates new version IDs on each upload. Recovery involves downloading the desired version from the object's version list and re-uploading it as the latest. Deletes without a version ID create a delete marker, preserving prior versions. Lifecycle rules can expire objects under prefixes like logs/ after 30 days, executed asynchronously by a background scanner. Object lock and bucket replication are also available, requiring versioning on both source and destination buckets.

Scaling and Fault Tolerance: Erasure Coding and Storage Pools

RustFS uses Reed-Solomon erasure coding (e.g., 4 data + 2 parity blocks) to distribute objects across disks. Capacity expansion is done by adding storage pools via RUSTFS_VOLUMES on each node, preserving existing pool order, then restarting services. New pools receive new writes; existing data stays in old pools unless a rebalance operation is run. The console shows pool usage and rebalance progress.

Quick Start: Single-Node Docker Evaluation

A single-node Docker deployment allows rapid testing:

docker volume create rustfs-demo-data

docker run -d \
  --name rustfs-demo \
  -p 127.0.0.1:9000:9000 \
  -p 127.0.0.1:9001:9001 \
  -v rustfs-demo-data:/data \
  -e RUSTFS_ACCESS_KEY='replace-with-your-test-access-key' \
  -e RUSTFS_SECRET_KEY='replace-with-your-test-secret-key' \
  -e RUSTFS_CONSOLE_ENABLE=true \
  rustfs/rustfs:latest /data

Health check with curl --fail http://127.0.0.1:9000/health. Access the console at http://localhost:9001/rustfs/console/ (port 9001) and S3 API at http://localhost:9000 (port 9000). The latest tag is for evaluation; production should use a fixed GA release tag.

Test workflow: create bucket rustfs-demo with versioning, upload a file, overwrite it, verify both versions in the console, delete and recover via version ID. Troubleshoot with docker logs rustfs-demo. For host directory mounts, ensure container user 10001:10001 has read/write permissions.

Recommendation

For new projects, start with attachment upload/download. For existing MinIO deployments, plan migration based on interface usage, data volume, and permission models. Validate a real upload-download-recovery cycle before full cutover. Project repository: https://github.com/rustfs/rustfs .

Original Source

Signed-in readers can open the original source through BestHub's protected redirect.

Sign in to view source
Republication Notice

This article has been distilled and summarized from source material, then republished for learning and reference. If you believe it infringes your rights, please contactadmin@besthub.devand we will review it promptly.

data migrationDockerminiodistributed storageerasure-codingObject StoragerustfsS3 API
JavaGuide
Written by

JavaGuide

Backend tech guide and AI engineering practice covering fundamentals, databases, distributed systems, high concurrency, system design, plus AI agents and large-model engineering.

0 followers
Reader feedback

How this landed with the community

Sign in to like

Rate this article

Was this worth your time?

Sign in to rate
Discussion

0 Comments

Thoughtful readers leave field notes, pushback, and hard-won operational detail here.