MinIO
MinIO is a fully S3-compatible object store you can
run on your own hardware. NamiDB treats it as another s3:// backend
behind a custom endpoint — same object_store::aws::AmazonS3 client,
same conditional-write protocol.
If you want a single-file recipe that brings up MinIO and a NamiDB daemon together, see Docker + MinIO. The page below is for using MinIO outside the compose recipe.
URI shape
s3://<bucket>?ns=<namespace>&endpoint=<minio-url>®ion=<region>&allow_http=trueendpoint=points at the MinIO HTTP endpoint (oftenhttp://localhost:9000).region=is required by the S3 client; for MinIO any string works (us-east-1is conventional).allow_http=truelets the client speak HTTP — MinIO doesn’t serve TLS by default.
Credentials come from the standard AWS env vars
(AWS_ACCESS_KEY_ID, AWS_SECRET_ACCESS_KEY).
Stand up MinIO locally
The most direct standalone:
docker run -p 9000:9000 -p 9001:9001 \ -e MINIO_ROOT_USER=minioadmin \ -e MINIO_ROOT_PASSWORD=minioadmin \ minio/minio server /data --console-address ":9001"The console is on http://localhost:9001 (login: minioadmin /
minioadmin). The S3 API is on :9000.
Create a bucket via the mc CLI:
mc alias set local http://localhost:9000 minioadmin minioadminmc mb local/namidbConnect from NamiDB
import osimport namidb
os.environ["AWS_ACCESS_KEY_ID"] = "minioadmin"os.environ["AWS_SECRET_ACCESS_KEY"] = "minioadmin"
client = namidb.Client( "s3://namidb?ns=prod" "&endpoint=http://localhost:9000" "®ion=us-east-1" "&allow_http=true")AWS_ACCESS_KEY_ID=minioadmin AWS_SECRET_ACCESS_KEY=minioadmin \namidb run --store "s3://namidb?ns=prod&endpoint=http://localhost:9000®ion=us-east-1&allow_http=true" \ "CREATE (a:Person {name: 'Alice'})"use std::env;use namidb::storage::{parse_uri, WriterSession};
env::set_var("AWS_ACCESS_KEY_ID", "minioadmin");env::set_var("AWS_SECRET_ACCESS_KEY", "minioadmin");
let uri = "s3://namidb?ns=prod&endpoint=http://localhost:9000®ion=us-east-1&allow_http=true";let (store, paths) = parse_uri(uri)?;let mut writer = WriterSession::open(store, paths).await?;Same shape, every S3-compatible backend
The same URI shape works against any S3-compatible service — Cloudflare
R2, Tigris, and LocalStack all plug in the same way. The only thing
that changes is the endpoint= value (and allow_http=true for
plain-HTTP services like MinIO and LocalStack):
| Service | endpoint= | allow_http=true? |
|---|---|---|
| MinIO (local) | http://localhost:9000 | yes |
| LocalStack | http://localhost:4566 | yes |
| Cloudflare R2 | https://<account>.r2.cloudflarestorage.com + region=auto | no |
| Tigris | https://t3.storage.dev | no |
IAM permissions
NamiDB needs the minimal S3 verb set:
s3:GetObjects3:PutObjects3:DeleteObjects3:ListBucket
No DynamoDB lock table, no separate metadata service.
What’s next
- Docker + MinIO — full local
stack (MinIO +
namidb-server) in one compose file. - Local filesystem — when you’d rather skip the bucket abstraction entirely.
- In-memory — for the zero-config 30-second taste.