Skip to content

v0.1.0 — the single-node store

Choose a tag to compare

@incognick incognick released this 12 Jun 05:19
· 113 commits to main since this release
Immutable release. Only release title and notes can be modified.

The first Hamster release: the single-node store.

Dev preview. Single node, no erasure coding yet, and on-disk formats may change between v0 releases. Please don't trust real data to it — but please do kick the tires: the quick start takes about a minute.

What's in v0.1

  • Core S3 API: objects (PUT/GET/HEAD/DELETE with Range), both ListObjects versions, multipart uploads end to end, server-side copies (CopyObject, UploadPartCopy), batch deletes, presigned URLs. Anything outside the surface returns an honest NotImplemented instead of a wrong answer.
  • Full SigV4 authentication: Authorization header, presigned query, UNSIGNED-PAYLOAD, and aws-chunked streaming signatures — implemented in-house on the standard library, conformance-tested against AWS's published examples.
  • Both addressing styles: path-style and virtual-hosted (-domain flag).
  • ETags exactly like S3: MD5, including the composite -N form for multipart — the semantics sync tools verify against.
  • Streaming write path: uploads go to disk through a bounded write buffer; a 1 GiB PUT peaks the server around 12 MB of memory.
  • Durable storage: BadgerDB metadata and synced blobs; every on-disk record is additively versioned protobuf with golden-pinned encodings, so today's data stays readable by every future version.

How it's verified

  • A third-party client compatibility suite runs the real aws CLI, rclone, restic, and s3cmd against every change.
  • A deterministic simulation harness boots the store on a simulated disk with real crash semantics, kills it adversarially across seeded schedules, and checks every recovery against a reference model.

Binaries below are static (CGO_ENABLED=0), version-stamped (hamster version), with SHA-256 checksums in SHA256SUMS. Next up, v0.2: clustering — Raft-replicated metadata and multi-node membership.