Z3 logo

Minimalist S3 Server in Zig with No AI Slop.

Small

Extremely small boot footprint, using less than 2MB of memory.

Fast

Blazing-fast performance powered by Zig and Async ZIO.

Clean

Built on a multi-role finite state machine with no AI slop.

Quick Start

Build the binary and run a local S3 endpoint. No dependencies beyond Zig.

bash
# Requires Zig 0.16

# Build a release binary
zig build -Doptimize=ReleaseFast

# Run (listens on http://localhost:9000)
./zig-out/bin/z3

# Run with options
./zig-out/bin/z3 --port=9000 --data-dir=./data --tmp=./tmp
  • Endpoint

    http://localhost:9000

  • Data Directory

    ./data

  • Default Credentials

    z3admin / z3admin

Usage

Point any S3 client at the endpoint. Here it is with the AWS CLI and the boto3 SDK.

AWS CLI

bash
export AWS_ACCESS_KEY_ID=z3admin
export AWS_SECRET_ACCESS_KEY=z3admin

aws --endpoint-url http://localhost:9000 s3 mb s3://mybucket
aws --endpoint-url http://localhost:9000 s3 cp file.txt s3://mybucket/
aws --endpoint-url http://localhost:9000 s3 ls s3://mybucket/ --recursive
aws --endpoint-url http://localhost:9000 s3 cp s3://mybucket/file.txt ./
aws --endpoint-url http://localhost:9000 s3 rm s3://mybucket/file.txt

Python (boto3)

python
import boto3

s3 = boto3.client('s3',
    endpoint_url='http://localhost:9000',
    aws_access_key_id='z3admin',
    aws_secret_access_key='z3admin'
)

s3.create_bucket(Bucket='test')
s3.put_object(Bucket='test', Key='hello.txt', Body=b'world')
print(s3.get_object(Bucket='test', Key='hello.txt')['Body'].read())

Capabilities

A subset of the AWS S3 API, with more on the way. Z3 is in active early development.

Supported Now

  • Buckets — create, list, delete
  • Objects — PUT, GET, HEAD, DELETE
  • ListObjectsV2 (prefix, delimiter, pagination)
  • Multipart uploads for large files
  • Range requests (206 Partial Content)
  • Batch delete & HeadBucket
  • SigV4 auth with admin / writer / reader roles

Under Development

  • Versioning
  • Lifecycle policies
  • Bucket ACLs
  • Pre-signed URLs
  • Object tagging
  • Encryption

TLS is not included — terminate HTTPS with a reverse proxy such as nginx or haproxy.

FAQs