Object storage for data and AI.
Point DuckDB, S3 SDKs, and lakehouse tooling at one encrypted S3 endpoint instead of standing up and operating a separate object store.
GrainFS is a distributed, S3-compatible storage server with zero-config clustering and at-rest encryption on by default. Add nodes while the service stays online.
# start one local storage server
DATA_DIR=./tmp
make bin/grainfs
./bin/grainfs serve --data "$DATA_DIR" --port 9000
# write through the S3 API
echo "hello grainfs" > file.txt
aws --no-sign-request --endpoint-url http://localhost:9000 s3 cp file.txt s3://default/
# read it back through the same S3 endpoint
aws --no-sign-request --endpoint-url http://localhost:9000 s3 ls s3://default/
aws --no-sign-request --endpoint-url http://localhost:9000 s3 cp s3://default/file.txt - # hello grainfs
Point DuckDB, S3 SDKs, and lakehouse tooling at one encrypted S3 endpoint instead of standing up and operating a separate object store.
Serve S3 storage in labs, edge sites, GPU racks, and private networks without bringing in a full storage platform.
Run one encrypted S3 server as a test fixture instead of pointing CI at cloud storage or mocking the S3 API.
Cluster membership, IAM state, protocol credentials, placement metadata, and admin changes commit through the Raft-backed metadata layer.
The cluster derives its erasure-coding profile from topology and stops writes when it cannot meet the required durability target.
Object data, metadata snapshots, WAL records, service-account keys, and protocol secrets use the generation-aware DEK/KEK envelope.
grainfs cluster complete-cutover moves voters to per-node transport identities and drops
the legacy shared cluster key only after readiness checks pass.
The S3 attach path rejects stale, revoked, expired, or mismatched credentials before clients connect.
Nodes refuse to open data directories with mismatched format markers. They fail closed rather than mix storage formats without a flag.
MinIO mc exercises bucket-scoped S3 credentials, and AWS SigV4 signing runs against real
clients on single-node GrainFS.
NoteThe public compatibility tables mark a feature supported only when e2e, conformance, or real-client integration tests cover it. Unit tests alone do not qualify.
Run a local node, exercise the S3 API, then bring GrainFS into production with review, upgrades, and recovery planning.