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.
| Operation | What it does here |
|---|---|
| PutObject | Up to 5 GiB, payload hash and declared checksums verified before the write is acknowledged |
| GetObject · HeadObject | Ranges, partNumber, conditional reads, the stored checksum returned |
| CopyObject | Up to 5 GiB, COPY or REPLACE metadata, copy-source conditions, checksum recomputed |
| DeleteObject · DeleteObjects | Single and batch, each key authorised on its own |
| ListObjectsV2 · ListObjects | Byte order, delimiter roll-up, authenticated continuation tokens |
| GetObjectTagging | Answers 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.
- delete markerDeleteObject · IsLatest
- v3PutObject · 2.1 MiB
- v2PutObject · 2.0 MiBlocked · retain until 2027-01-01
- v1PutObject · 1.8 MiBexpired by lifecycle
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, CompleteMultipartUploads3:ObjectRemoved:*: Delete, DeleteMarkerCreateds3: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.
Bucket quotas
Bytes and objects per bucket, set by operators and checked on every write that adds bytes: PutObject, CopyObject, UploadPart, UploadPartCopy, CompleteMultipartUpload.
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 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.