Skip to content

Fly.Bucket reference

Source: src/Fly/Bucket.ts

A Fly.Bucket is Tigris S3-compatible object storage, billed through Fly. It is an org-scoped GraphQL add-on (AddOnType tigris).

Alchemy generates a unique name unless you pass one.

const data = yield* Fly.Bucket("Data");

Pass name when you need a stable Tigris bucket name.

const data = yield* Fly.Bucket("Data", {
name: "my-bucket",
});

Org defaults to the current token. Pass orgSlug to pin it.

const data = yield* Fly.Bucket("Data", {
orgSlug: "my-org",
});

Buckets are private by default. public: true serves objects without credentials.

const assets = yield* Fly.Bucket("Assets", {
public: true,
});

domainName sets website.domain_name on the add-on. Point a CNAME at {name}.t3.tigrisbucket.io.

const assets = yield* Fly.Bucket("Assets", {
public: true,
domainName: "assets.example.com",
});

Tigris speaks the S3 API. Bind PutObject / GetObject (and the other S3 object ops) in Service init. Alchemy injects the Tigris endpoint and credentials; you never read AWS_* yourself.

import * as HttpServerResponse from "effect/unstable/http/HttpServerResponse";
export default class Api extends Fly.Service<Api>()(
"Api",
{ app: Site, main: import.meta.url, port: 3000 },
Effect.gen(function* () {
const putObject = yield* Fly.PutObject(Data);
const getObject = yield* Fly.GetObject(Data);
return {
fetch: Effect.gen(function* () {
yield* putObject({
Key: "hello.txt",
Body: "hello",
ContentType: "text/plain",
});
const obj = yield* getObject({ Key: "hello.txt" });
return HttpServerResponse.json({ ok: obj.ETag !== undefined });
}),
};
}).pipe(Effect.provide([Fly.PutObjectHttp, Fly.GetObjectHttp])),
) {}

You can also set each key yourself with Secret.

yield* Fly.Secret("BucketName", {
app: Site,
name: "BUCKET_NAME",
value: Data.bucketName,
});

Source: src/Fly/DeleteObject.ts

Runtime binding for Tigris DeleteObject over the S3 API.

Bind this operation to a Bucket in Service init. Provide DeleteObjectHttp.

const deleteObject = yield* Fly.DeleteObject(Data);
yield* deleteObject({ Key: "hello.txt" });

Source: src/Fly/DeleteObjectHttp.ts Kind: Layer · Provides: Fly.DeleteObject

HTTP implementation of DeleteObject. Calls distilled S3 deleteObject against the Tigris endpoint with the bucket’s credentials.

Source: src/Fly/GetObject.ts

Runtime binding for Tigris GetObject over the S3 API.

Bind this operation to a Bucket in Service init. Provide GetObjectHttp.

const getObject = yield* Fly.GetObject(Data);
const text = yield* getObject({ Key: "hello.txt" }).pipe(
Effect.flatMap((result) =>
Stream.mkString(Stream.decodeText(result.Body!)),
),
);

Source: src/Fly/GetObjectHttp.ts Kind: Layer · Provides: Fly.GetObject

HTTP implementation of GetObject. Calls distilled S3 getObject against the Tigris endpoint with the bucket’s credentials.

Source: src/Fly/HeadObject.ts

Runtime binding for Tigris HeadObject over the S3 API.

Bind this operation to a Bucket in Service init. Provide HeadObjectHttp.

const headObject = yield* Fly.HeadObject(Data);
const head = yield* headObject({ Key: "hello.txt" });

Source: src/Fly/HeadObjectHttp.ts Kind: Layer · Provides: Fly.HeadObject

HTTP implementation of HeadObject. Calls distilled S3 headObject against the Tigris endpoint with the bucket’s credentials.

Source: src/Fly/ListObjectsV2.ts

Runtime binding for Tigris ListObjectsV2 over the S3 API.

Bind this operation to a Bucket in Service init. Provide ListObjectsV2Http.

const listObjects = yield* Fly.ListObjectsV2(Data);
const result = yield* listObjects({ Prefix: "jobs/", MaxKeys: 100 });

Source: src/Fly/ListObjectsV2Http.ts Kind: Layer · Provides: Fly.ListObjectsV2

HTTP implementation of ListObjectsV2. Calls distilled S3 listObjectsV2 against the Tigris endpoint with the bucket’s credentials.

Source: src/Fly/PutObject.ts

Runtime binding for Tigris PutObject over the S3 API.

Bind this operation to a Bucket in Service init. The Tigris bucket name, endpoint, and credentials are injected automatically. Provide PutObjectHttp.

const putObject = yield* Fly.PutObject(Data);
yield* putObject({
Key: "hello.txt",
Body: "Hello, world!",
ContentType: "text/plain",
});

Source: src/Fly/PutObjectHttp.ts Kind: Layer · Provides: Fly.PutObject

HTTP implementation of PutObject. Calls distilled S3 putObject against the Tigris endpoint with the bucket’s credentials.