Object storage
Storage you can read back
€4.90 per terabyte per month. Egress is free — not discounted, not capped at some multiple of stored data, free. Pull your own data as often as you like.
What the S3 API gets you here
Genuinely compatible
Multipart, versioning, object lock, presigned URLs, lifecycle rules, SSE-C and SSE-KMS. The compatibility matrix lists what we do not implement — it is a short list.
See the matrix
Erasure coded across three sites
12+4 across three independent facilities in a region. Lose a whole site and reads continue without a failover step.
Fast on big objects
Parallel multipart at 40 Gbit/s per account by default. A 5 TB restore takes about 18 minutes, not an afternoon.
Object lock that holds
Compliance-mode WORM with a governance override that is logged and dual-authorised. Even we cannot shorten a compliance retention.
Replication you can reason about
Cross-region replication with a published RPO, plus a backlog metric so you know how far behind a destination is.
Metrics that are not an upsell
Per-bucket request, latency and error metrics in Prometheus format, retained for 13 months, included.
The egress question
How free egress is not a trick
We buy transit and peer at fourteen exchanges. Bandwidth at our scale costs a fraction of a cent per gigabyte, and charging nine cents for it was always a business model rather than a cost recovery.
- No egress charge, no request charge, no early-delete fee
- Fair-use ceiling is 3× stored volume per month — above that we call you, we do not invoice you
- Median customer pulls 1.4× their stored volume monthly
- Largest account moved 2.1 PB out last month and paid €0
It is the same tools you already use
aws configure set default.s3.max_concurrent_requests 64
aws s3 sync ./archive s3://cold-archive \
--endpoint-url https://s3.eu-central.main.13381338.xyz \
--storage-class STANDARDrclone config create basalt s3 \
provider=Other \
endpoint=https://s3.eu-central.main.13381338.xyz \
chunk_size=64M upload_concurrency=32
rclone copy /mnt/raw basalt:research --transfers 24 --progressimport boto3
s3 = boto3.client(
's3',
endpoint_url='https://s3.eu-central.main.13381338.xyz',
config=boto3.session.Config(max_pool_connections=64),
)
s3.upload_file('model.safetensors', 'weights', 'v3/model.safetensors')resource "basalt_bucket" "weights" {
name = "weights"
region = "eu-central"
versioning = true
lifecycle_rule {
id = "expire-old-versions"
enabled = true
noncurrent_version_expiration { days = 90 }
}
}