S3-compatible object storage server — single-binary replacement for MinIO.
Rust · Axum · Svelte 5 · Tailwind CSS v4 · shadcn-svelte
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.
- 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.jsonsidecars - 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
Rangeheader 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
# 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 9000docker run -d \
-p 9000:9000 \
-v $(pwd)/data:/data \
ghcr.io/coollabsio/maxioOr from Docker Hub:
docker run -d \
-p 9000:9000 \
-v $(pwd)/data:/data \
coollabsio/maxioConfigure 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/maxioDocker Compose:
services:
maxio:
image: ghcr.io/coollabsio/maxio
ports:
- "9000:9000"
volumes:
- maxio-data:/data
environment:
- MAXIO_ACCESS_KEY=maxioadmin
- MAXIO_SECRET_KEY=maxioadmindocker compose up -dOpen http://localhost:9000/ui/ in your browser. Default credentials: maxioadmin / maxioadmin
| 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) |
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-bucketexport 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-bucketMultipart upload,presigned URLs,CopyObject- CORS,
Range headers - Versioning, lifecycle rules
- Multi-user support
- Distributed mode,
erasure coding, replication
See CLAUDE.md for the full development workflow, architecture details, and testing instructions.
![]() Andras Bacsai |
|---|
