Skip to content

coollabsio/maxio

Repository files navigation

MaxIO

S3-compatible object storage server — single-binary replacement for MinIO.

Rust · Axum · Svelte 5 · Tailwind CSS v4 · shadcn-svelte

About the Project

Warning: MaxIO is under active development. Do not use it in production yet.

MaxIO is a lightweight, single-binary S3-compatible object storage server written in Rust. No JVM, no database, no runtime dependencies — just one binary and a data directory. Buckets are directories, objects are files. Back up by copying the data dir.

Features

  • Single Binary — Frontend assets are compiled into the binary via rust-embed. Nothing extra to deploy
  • Pure Filesystem Storage — No database. Buckets are directories, objects are files, metadata in .meta.json sidecars
  • AWS Signature V4 — Compatible with mc, AWS CLI, and any S3 SDK
  • Web Console — Built-in UI at /ui/ for browsing, uploading, and managing objects
  • S3 API Coverage — ListBuckets, CreateBucket, HeadBucket, DeleteBucket, GetBucketLocation, ListObjectsV1/V2, PutObject, GetObject, HeadObject, DeleteObject, DeleteObjects (batch), CopyObject, Multipart Upload
  • Range Requests — HTTP 206 Partial Content support via Range header on GetObject
  • Checksum Verification — CRC32, CRC32C, SHA-1, and SHA-256 checksums on upload with automatic validation and persistent storage
  • Erasure Coding — Optional chunked storage with per-chunk SHA-256 integrity verification and Reed-Solomon parity for automatic recovery from corrupted or missing data

Installation

Build from Source

# Build frontend (required — assets are embedded into the binary)
cd ui && bun run build && cd ..

# Build binary
cargo build --release

# Run
./target/release/maxio --data-dir ./data --port 9000

Docker

docker run -d \
  -p 9000:9000 \
  -v $(pwd)/data:/data \
  ghcr.io/coollabsio/maxio

Or from Docker Hub:

docker run -d \
  -p 9000:9000 \
  -v $(pwd)/data:/data \
  coollabsio/maxio

Configure with environment variables:

docker run -d \
  -p 9000:9000 \
  -v $(pwd)/data:/data \
  -e MAXIO_ACCESS_KEY=myadmin \
  -e MAXIO_SECRET_KEY=mysecret \
  ghcr.io/coollabsio/maxio

Docker Compose:

services:
  maxio:
    image: ghcr.io/coollabsio/maxio
    ports:
      - "9000:9000"
    volumes:
      - maxio-data:/data
    environment:
      - MAXIO_ACCESS_KEY=maxioadmin
      - MAXIO_SECRET_KEY=maxioadmin
docker compose up -d

Open http://localhost:9000/ui/ in your browser. Default credentials: maxioadmin / maxioadmin

Configuration

Variable CLI Flag Default Description
MAXIO_PORT --port 9000 Listen port
MAXIO_ADDRESS --address 0.0.0.0 Bind address
MAXIO_DATA_DIR --data-dir ./data Storage directory
MAXIO_ACCESS_KEY --access-key maxioadmin Access key (aliases: MINIO_ROOT_USER, MINIO_ACCESS_KEY)
MAXIO_SECRET_KEY --secret-key maxioadmin Secret key (aliases: MINIO_ROOT_PASSWORD, MINIO_SECRET_KEY)
MAXIO_REGION --region us-east-1 S3 region (aliases: MINIO_REGION_NAME, MINIO_REGION)
MAXIO_ERASURE_CODING --erasure-coding false Enable erasure coding with per-chunk integrity checksums
MAXIO_CHUNK_SIZE --chunk-size 10485760 (10MB) Chunk size in bytes for erasure coding
MAXIO_PARITY_SHARDS --parity-shards 0 Number of parity shards per object (requires --erasure-coding, 0 = no parity)

Usage

MinIO Client (mc)

mc alias set maxio http://localhost:9000 maxioadmin maxioadmin

mc mb maxio/my-bucket
mc cp file.txt maxio/my-bucket/file.txt
mc ls maxio/my-bucket/
mc cat maxio/my-bucket/file.txt
mc rm maxio/my-bucket/file.txt
mc rb maxio/my-bucket

AWS CLI

export AWS_ACCESS_KEY_ID=maxioadmin
export AWS_SECRET_ACCESS_KEY=maxioadmin

aws --endpoint-url http://localhost:9000 s3 mb s3://my-bucket
aws --endpoint-url http://localhost:9000 s3 cp file.txt s3://my-bucket/file.txt
aws --endpoint-url http://localhost:9000 s3 ls s3://my-bucket/
aws --endpoint-url http://localhost:9000 s3 rm s3://my-bucket/file.txt
aws --endpoint-url http://localhost:9000 s3 rb s3://my-bucket

Roadmap

  • Multipart upload, presigned URLs, CopyObject
  • CORS, Range headers
  • Versioning, lifecycle rules
  • Multi-user support
  • Distributed mode, erasure coding, replication

Contributing

See CLAUDE.md for the full development workflow, architecture details, and testing instructions.

Core Maintainer


Andras Bacsai

License

Apache-2.0