Documentation

Slate

S3-compatible object storage in a single binary.

Slate stores files and blobs behind an S3-compatible HTTP API. Point your existing S3 tooling at it and objects land on disks you control, with no cloud account in the loop.

Objects live in buckets. Each bucket can keep versions and enforce its own access policy, so different applications can share one server safely.

#Installation

Slate ships as one static binary. Place it on your host and start it:

# download and start
$ curl -sSL get.rainyvless.space/install | sh
$ slate serve --data /var/lib/slate
→ listening on :9000 · s3 api ready
By default Slate binds to 127.0.0.1:9000. Put it behind your own reverse proxy to expose it over TLS.

#Quickstart

# create a bucket
$ slate mb photos

# upload an object
$ curl -T cat.jpg :9000/v1/photos/cat.jpg
→ stored · etag 9f2b1c

# download it
$ curl :9000/v1/photos/cat.jpg -o cat.jpg

#Configuration

Configure with flags, environment variables, or a small YAML file. Flags take precedence.

# slate.yaml
data:    /var/lib/slate
listen:  127.0.0.1:9000
log:     info
versioning:
  enabled: true

#API reference

Routes follow the S3 object model under /v1/<bucket>. Requests without a valid signature return 401.

Method & pathDescription
PUT /v1/{bucket}/{key}Upload an object.
GET /v1/{bucket}/{key}Download an object.
DELETE /v1/{bucket}/{key}Delete an object (keeps prior versions).
GET /v1/{bucket}List objects in a bucket.
GET /healthLiveness probe. Returns 200 when storage is ready.

#CLI

The slate binary is both the server and the client.

CommandDescription
slate serveStart the storage server.
slate mb <bucket>Make a bucket.
slate ls <bucket>List objects.
slate statusShow storage health and usage.