on this page

g7Limitations

g7 Limitations

These are the current boundaries of what g7 can do.


The limits below describe the g7 binding and the management API. The S3 API reaches the same buckets through a different path and lifts several of them — where it does, it is called out.


Upload size

100 MiB per PUT. A single put() call (or PUT through the management proxy) cannot exceed 100 MiB.

Over the S3 API the cap applies per multipart part rather than per object, so objects of any size upload as long as each part stays under 100 MiB. The AWS CLI and boto3 split large files into parts on their own.

Every upload declares its length. A PUT carries either a Content-Length or, for an aws-chunked streaming upload, an x-amz-decoded-content-length. A request with neither is answered 411 Length Required. The AWS CLI, boto3 and a browser fetch() of a File or Blob all send one; a hand-rolled chunked upload (curl -T -) does not.


Unsupported features

No multipart upload. Through the binding, objects must be uploaded in a single request; chunked or resumable uploads are not available. The S3 API does support multipart uploads.

No conditional writes. There is no If-None-Match or If-Match semantics on put(). Last write wins.

No object versioning. Overwriting an existing key replaces it permanently. There is no version history or soft-delete.

No list delimiter. list() does not support a delimiter parameter for simulating a directory hierarchy. Use prefix filtering and parse paths in application code.

No custom metadata. Through the binding, objects store a content type (the contentType option on put()) but no arbitrary key-value metadata and no stored Cache-Control; set caching headers when you serve the object. The S3 API stores Cache-Control, Content-Disposition, and x-amz-meta-* headers with the object.

No server-side copy. The binding has no copy or move operation; to copy an object, read it and write it under the new key. The S3 API supports CopyObject within a bucket.

No bucket-level configuration. Versioning, tagging, and object ACLs are not implemented, over either access path.


Access

Buckets are private by default. A Cell binding is the primary access path, but it is not the only one. For access from outside a Cell, three mechanisms exist:

  • Public-read buckets: ribo bucket create <name> --public (or ribo bucket set <name> --public) allows anonymous GET/HEAD on a bucket's objects. Listing and writes are never public.
  • Pre-signed URLs: short-lived signed URLs for a single upload or download, minted via the management API (POST /v1/buckets/:bucket/presign).
  • S3 API: https://g7.tissue.systems accepts SigV4-signed requests with per-bucket credentials, so external tools and standard S3 clients can read and write directly.

See Managing Buckets and the S3 API for details.


See also