Asset Goes Here Docs Sign in
ContentsPublishing to a bucket
Connect your tools

Publishing to a bucket

Images, audio and models make a Git repository slow to clone, and a game that loads art at runtime wants it on a CDN anyway. Connect a bucket you own, and publishing uploads accepted files there instead of committing them. Each pull request still carries the provenance file, plus a manifest that maps every asset id to its URL, so the game looks files up by id.

agh only ever writes new files. Each key holds a hash of the file's content, such as sets/card.wolf.art.3f9a1c2e.png, so a new version gets a new URL and caches never serve a stale file. agh never reads, lists or deletes anything in your bucket.

The bucket is where files live long term, not agh. If agh is down, your game keeps loading everything already published.

What goes to the bucket

By default, images, audio, models and other binary files go to the bucket. Strings and text always stay in the repository, where people edit and review them. Setting up a new bucket comes with the Studio and Enterprise plans.

The manifest is assets/agh-assets.json unless you choose another path:

{
  "card.wolf.art": "https://cdn.example.com/sets/card.wolf.art.3f9a1c2e.png",
  "sfx.howl": "https://cdn.example.com/sets/sfx.howl.81d0e44b.ogg"
}

Where files go

Under Settings › Publishing, Where files go has one row for each kind of file (images, audio, models, video, other files, strings and text) and one column for each place: GitHub, Bucket, Roblox and YouTube. Tick every place a kind should go. A dash means that kind can't go there: Roblox takes images, audio and models, YouTube takes only video, and strings and text go only to GitHub.

For kinds that go to the bucket, Manifest picks where their manifest lives:

So you can send files to the bucket with the manifest in GitHub, keep everything in GitHub, or use the bucket with no manifest in GitHub. Reset to default goes back to what agh did before you chose: binary files to the bucket when you have one, otherwise GitHub, with images, audio and models also going to Roblox when it's connected.

On the Publish page, each accepted asset has a picker that starts from these routes. Change it to send that asset somewhere else for this publish only.

Amazon S3

agh assumes a role in your AWS account, so no secret is stored.

1. In agh, open Settings › Publishing, choose Set up on Bucket, and choose Amazon S3. Fill in the bucket, its region, an optional key prefix such as sets/, and the public URL the game reads from, such as your CloudFront address. 2. In the IAM console, create a role with the two policies agh shows, using Copy on each: - Who can use the role lets only agh's publishing role assume it, and only with your project's external ID. agh makes that ID once per project and never changes it, so the role keeps working. You can't choose it: that's what stops anyone else's agh project from writing to your bucket. - What the role can do allows only s3:PutObject under your prefix. 3. Paste the role's ARN, such as arn:aws:iam::123456789012:role/agh-publish, and choose Save. agh then tests the connection.

Cloudflare R2, Backblaze B2 and other S3-compatible storage

Choose S3-compatible, and fill in the service's S3 API address (for R2, https://<account id>.r2.cloudflarestorage.com), the bucket, the public URL, and an access key. Limit the key to this one bucket and to writing objects. agh keeps the secret in AWS Secrets Manager, never on the project record. Leave the secret empty when you save again to keep the one you set.

Google Cloud Storage and Azure Blob Storage are coming.

Test connection

The test writes a small file such as sets/_agh-test.1a2b3c4d.txt, reads it back through the public URL, and tries to delete it. Each step passes or says what to fix. Not being able to delete the test file is fine: agh only needs to write.

To stop, choose Stop publishing to the bucket. Files already in the bucket stay there, and so does the manifest in the repository.

For agents: this page as Markdown is at /docs/buckets.md, and the CLI prints it with agh guide buckets.