S3 Storage,
Evolved.
Minimalist, high-speed S3-compatible object storage with robust disk persistence. Engineered in Rust for the modern cloud.
Performance-Optimized by Design.
Advanced features for modern cloud-native applications.
⚡ S3 Native
Native support for AWS CLI, SDKs, and standard tools. Zero learning curve for S3 workflows.
🦀 Rust Core
Built from the ground up for safety and speed. Minimal memory footprint with massive throughput.
💾 Hybrid Persistence
In-memory speed with industrial-grade durability. Async Write-Ahead Logs (WAL) with batching for high throughput.
🔍 Prefix Index
O(log n) list operations using BTreeMap-based indexing. 100x faster than full bucket scans.
🧠 LRU Eviction
Automatic memory management with configurable limits. Least-recently-used objects evicted when limit reached.
📊 Prometheus Metrics
Full observability with latency histograms (p50, p95, p99), request counters, and in-flight tracking.
API Reference.
Fully compliant S3-style endpoints and system diagnostics.
Service Operations
Bucket Operations
Object Operations
System Diagnostics
Multi-SDK Support.
Native integration for your favorite languages.
// aws-sdk-s3
let config = aws_config::from_env()
.endpoint_url("http://localhost:9353")
.load().await;
let client = aws_sdk_s3::Client::new(&config);
client.put_object()
.bucket("my-bucket")
.key("hello.txt")
.body(ByteStream::from_static(b"Hello from Rust!"))
.send().await?;
// AWSSDK.S3
var config = new AmazonS3Config {
ServiceURL = "http://localhost:9353",
ForcePathStyle = true
};
var client = new AmazonS3Client("any", "any", config);
await client.PutObjectAsync(new PutObjectRequest {
BucketName = "my-bucket",
Key = "hello.txt",
ContentBody = "Hello from C#!"
});
// aws-sdk-go-v2
cfg, _ := config.LoadDefaultConfig(ctx,
config.WithEndpointResolverWithOptions(
aws.EndpointResolverWithOptionsFunc(func(s, r string, o ...interface{}) (aws.Endpoint, error) {
return aws.Endpoint{URL: "http://localhost:9353"}, nil
})))
client := s3.NewFromConfig(cfg, func(o *s3.Options) { o.UsePathStyle = true })
client.PutObject(ctx, &s3.PutObjectInput{
Bucket: aws.String("my-bucket"),
Key: aws.String("hello.txt"),
Body: strings.NewReader("Hello from Go!"),
})
Quick Start.
Deploy in milliseconds with Docker.
Pull and Run:
docker pull muratgenc/vaporstore:v0.3.0
docker run -p 9353:9353 muratgenc/vaporstore:v0.3.0
Advanced Configuration:
docker run -p 9353:9353 \
-e VAPORSTORE_PERSISTENCE=true \
-e VAPORSTORE_MAX_MEMORY=536870912 \
-v vaporstore_data:/app/data \
muratgenc/vaporstore:v0.3.0
Test Connection:
export AWS_ACCESS_KEY_ID=any
export AWS_SECRET_ACCESS_KEY=any
aws --endpoint-url http://localhost:9353 s3 mb s3://test-bucket
Environment Variables:
VAPORSTORE_MAX_MEMORY: Memory limit in bytes (0 = unlimited)
VAPORSTORE_PERSISTENCE: Enable disk persistence (true/false)
VAPORSTORE_MAX_OBJECT_SIZE: Max object size (default: 5MB)