Skip to main content

S3

Read and write objects in an S3-compatible bucket from a Telo manifest. Targets AWS S3 today; the same kinds work against any S3-API-compatible backend (MinIO, R2, etc.) given the right endpoint.

Why use this

  • Declarative bucket bindingS3.Bucket carries credentials and endpoint config once; every Get/Put/List references it by name.
  • Stream-friendlyS3.Put accepts byte streams (codecs compose), so large uploads don't buffer in memory.
  • Listing as a first-class operationS3.List returns paginated keys for iteration in Run.Sequence.
  • Provider-agnostic — point S3.Bucket at any S3-API endpoint and the rest of the manifest doesn't change.

Kinds

KindPurpose
S3.BucketDeclare an S3 bucket (endpoint, region, credentials).
S3.PutUpload bytes or a stream to a key.
S3.GetFetch an object's bytes by key.
S3.ListList keys under a prefix.
S3.DeleteRemove an object by key (idempotent).
S3.PresignedUrlMint a time-limited download or upload link for a key (SigV4 query presigning, no network).

Example

kind: Telo.Application
metadata: { name: s3-app, version: 1.0.0 }
imports:
S3: std/s3@latest
---
kind: S3.Bucket
metadata: { name: Uploads }
name: my-uploads
region: us-east-1
---
kind: S3.Put
metadata: { name: SaveReport }
bucket: { kind: S3.Bucket, name: Uploads }
key: reports/today.json
body: !cel "resources.GenerateReport.bytes"

Reference