TessariDB S3
Get started

Features

The parts of S3 people actually run.

Every operation of the S3 model is dispatched by name. The ones below are implemented end to end; any other is answered NotImplemented rather than routed somewhere it does not belong.

Objects

Put, get, copy, list, with the details intact.

A single PUT takes up to 5 GiB; beyond that, multipart. Every object, whatever its size, is written to data files in 1 MiB blocks with a BLAKE3 hash per block that is checked on every read. None of the bytes ever enter the metadata store.

Listings are in byte-wise UTF-8 order with continuation tokens that the server authenticates, so a paginating client neither skips nor repeats a key. Delimiters roll up common prefixes; encoding-type=url is honoured.

Object operations, as implemented.
OperationWhat it does here
PutObjectUp to 5 GiB, payload hash and declared checksums verified before the write is acknowledged
GetObject · HeadObjectRanges, partNumber, conditional reads, the stored checksum returned
CopyObjectUp to 5 GiB, COPY or REPLACE metadata, copy-source conditions, checksum recomputed
DeleteObject · DeleteObjectsSingle and batch, each key authorised on its own
ListObjectsV2 · ListObjectsByte order, delimiter roll-up, authenticated continuation tokens
GetObjectTaggingAnswers the empty set

Multipart

Large objects, uploaded in parts and committed at once.

CreateMultipartUpload, UploadPart, UploadPartCopy from a range or all of a source, ListParts, ListMultipartUploads, AbortMultipartUpload and CompleteMultipartUpload. The completed object carries the multipart ETag and a full-object or composite checksum, and reads across parts with Range and partNumber.

An upload left open longer than a week is aborted by the reaper, and the parts it held are reclaimed after a grace period you set.

Versioning and Object Lock

Every version kept. The ones under lock kept for good.

A bucket moves from never-versioned to Enabled and between Enabled and Suspended, never back. An enabled bucket keeps every version and a delete adds a marker; reads and deletes by versionId, ListObjectVersions newest first per key with IsLatest, paged by key and version markers.

Object Lock gives a version a retention date in governance or compliance mode, or a legal hold. It is enforced where data is released: the API, lifecycle, healing, rebalancing and the console all go through the same check — so a locked version cannot be removed by a path that forgot to ask.

Lifecycle

Rules that run on every node, once.

Expiration by days or date, expired delete markers, noncurrent versions with a count to keep, and abandoned multipart uploads. Rules are applied by a background pass: each bucket with rules is handed to one node at a time through a queue in TessariDB, and a current object is expired only while it is still the write that was judged.

Notifications

Events into a TessariDB topic, or Kafka, or a webhook.

A bucket's notification configuration names its destination by ARN. The default, arn:tessaridb:sqs:::tessaridb, is a topic in the metadata store itself and needs no setting: a consumer reads it with a topic group. A Kafka topic or a webhook the operator declared is the alternative.

Every change in a configured bucket is recorded in the same commit as the change and delivered as an S3 event record. Refused deliveries are retried with a growing wait and given up to a dead-letter topic after eight tries.

  • s3:ObjectCreated:*: Put, Copy, CompleteMultipartUpload
  • s3:ObjectRemoved:*: Delete, DeleteMarkerCreated
  • s3:LifecycleExpiration:*: Delete, DeleteMarkerCreated
  • prefix and suffix filters; overlapping rules refused

Media renditions

Upload one image. Get the sizes you serve.

A bucket's media rules say which content types under which key prefix get which renditions. Images and poster frames are fitted into the listed sizes, never enlarged, as JPEG, PNG, WebP or AVIF. Videos become MP4 (H.264, AAC) or WebM (VP9, Opus) at 360p to 2160p. Renditions are ordinary objects under <key>.renditions/.

Work is planned into queues in TessariDB and taken by any node's workers; a failed task is tried again after a growing wait and stays listed in the console after five tries.

Control

Quotas, users and credentials that do one thing.

quota

Bucket quotas

Bytes and objects per bucket, set by operators and checked on every write that adds bytes: PutObject, CopyObject, UploadPart, UploadPartCopy, CompleteMultipartUpload.

users

Users and keys

Spaces and users, access keys whose secrets are sealed in the store and shown once, grants per bucket, revocation that reaches every node within five seconds.

one-key

One-key upload credentials

Issued by a user who may write the bucket, they upload exactly one key, expire between 60 seconds and 7 days, and stop working when their issuer loses access.