From 04a4a5fe2a8e61978fb43df47a641e409ad0247c Mon Sep 17 00:00:00 2001 From: Katie Schilling <8411213+katieschilling@users.noreply.github.com> Date: Mon, 6 Apr 2026 13:24:47 -0600 Subject: [PATCH 1/5] docs: document anonymous public access via fly.storage.tigris.dev AI tools were telling users that fly.storage.tigris.dev does not support anonymous access for public buckets. The docs explain how to create public buckets but never state that public bucket objects are accessible without authentication. Add explicit documentation about anonymous public access URLs to the shared storage-create partial, the deep-dive page, and the Laravel guide. Assisted-by: Claude Opus 4.6 via Claude Code --- deep-dive/tigris.html.markerb | 2 +- .../the-basics/laravel-tigris-file-storage.html.markerb | 8 +++++++- partials/tigris/_tigris-storage-create.erb | 2 ++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/deep-dive/tigris.html.markerb b/deep-dive/tigris.html.markerb index b34e311605..6799725f40 100644 --- a/deep-dive/tigris.html.markerb +++ b/deep-dive/tigris.html.markerb @@ -10,6 +10,6 @@ order: 6 [Tigris](https://fly.io/docs/tigris/) is a globally distributed object storage service. It essentially requires no configuration, and seamlessly handles multi-regions. If you upload an audio file to a host in Virginia, you can access it from Amsterdam. Even better: subsequent accesses from regions other than the primary region are served locally. -Unlike relational databases, there may be reasons why you want to make your object store available via the internet. In this demo, the object store starts out private, but you can make it [public](/docs/tigris/#public-buckets) if you want. +Unlike relational databases, there may be reasons why you want to make your object store available via the internet. In this demo, the object store starts out private, but you can make it [public](/docs/tigris/#public-buckets) if you want. Public buckets serve objects without authentication at `https://bucket-name.fly.storage.tigris.dev/key-name`. And if you happen to have an existing S3 object store, check out [shadow buckets](/docs/tigris/#migrating-to-tigris-with-shadow-buckets), which enable you to incrementally migrate your data. diff --git a/laravel/the-basics/laravel-tigris-file-storage.html.markerb b/laravel/the-basics/laravel-tigris-file-storage.html.markerb index e550c57f37..bfbd7970d4 100644 --- a/laravel/the-basics/laravel-tigris-file-storage.html.markerb +++ b/laravel/the-basics/laravel-tigris-file-storage.html.markerb @@ -100,4 +100,10 @@ Now that we have our Tigris Bucket, let's connect it with our Laravel app. Storage::disk('s3')->put('example.txt', 'Contents'); } ``` - Calling the function above should upload a new file in your bucket. \ No newline at end of file + Calling the function above should upload a new file in your bucket. + +## Serving public files + +If your bucket is [public](/docs/tigris/#public-buckets), uploaded objects are accessible without authentication at `https://bucket-name.fly.storage.tigris.dev/key-name`. You can use this URL directly in your Blade templates for images, CSS, JavaScript, and other assets. No credentials or pre-signed URLs are needed. + +See the [Tigris Public Bucket docs](https://www.tigrisdata.com/docs/buckets/public-bucket/) for details on all available public domains and custom domain setup. \ No newline at end of file diff --git a/partials/tigris/_tigris-storage-create.erb b/partials/tigris/_tigris-storage-create.erb index 7644a78467..89cd5ade77 100644 --- a/partials/tigris/_tigris-storage-create.erb +++ b/partials/tigris/_tigris-storage-create.erb @@ -28,4 +28,6 @@ You can also make a public bucket private. fly storage update mybucket --private ``` +Objects in a public bucket can be accessed by anyone without authentication at `https://mybucket.fly.storage.tigris.dev/key-name`. No credentials or pre-signed URLs are needed. Public buckets are also served at dedicated Tigris domains. See the [Tigris Public Bucket docs](https://www.tigrisdata.com/docs/buckets/public-bucket/) for details on all available domains and custom domain setup. + Currently, buckets must be public or private. ACL settings will be ignored by the Tigris API. \ No newline at end of file From f659b68d33cfea08d66c0fdb451b36109ffd24ee Mon Sep 17 00:00:00 2001 From: Katie Schilling <8411213+katieschilling@users.noreply.github.com> Date: Mon, 6 Apr 2026 13:30:03 -0600 Subject: [PATCH 2/5] docs: use t3.tigrisfiles.io for public bucket URLs Update public access documentation to use the dedicated public content domain (t3.tigrisfiles.io) instead of fly.storage.tigris.dev, per the recent public bucket domains announcement. List all three public domains in the shared partial. Assisted-by: Claude Opus 4.6 via Claude Code --- deep-dive/tigris.html.markerb | 2 +- .../the-basics/laravel-tigris-file-storage.html.markerb | 2 +- partials/tigris/_tigris-storage-create.erb | 8 +++++++- 3 files changed, 9 insertions(+), 3 deletions(-) diff --git a/deep-dive/tigris.html.markerb b/deep-dive/tigris.html.markerb index 6799725f40..4be913c415 100644 --- a/deep-dive/tigris.html.markerb +++ b/deep-dive/tigris.html.markerb @@ -10,6 +10,6 @@ order: 6 [Tigris](https://fly.io/docs/tigris/) is a globally distributed object storage service. It essentially requires no configuration, and seamlessly handles multi-regions. If you upload an audio file to a host in Virginia, you can access it from Amsterdam. Even better: subsequent accesses from regions other than the primary region are served locally. -Unlike relational databases, there may be reasons why you want to make your object store available via the internet. In this demo, the object store starts out private, but you can make it [public](/docs/tigris/#public-buckets) if you want. Public buckets serve objects without authentication at `https://bucket-name.fly.storage.tigris.dev/key-name`. +Unlike relational databases, there may be reasons why you want to make your object store available via the internet. In this demo, the object store starts out private, but you can make it [public](/docs/tigris/#public-buckets) if you want. Public buckets serve objects without authentication at `https://bucket-name.t3.tigrisfiles.io/key-name`. And if you happen to have an existing S3 object store, check out [shadow buckets](/docs/tigris/#migrating-to-tigris-with-shadow-buckets), which enable you to incrementally migrate your data. diff --git a/laravel/the-basics/laravel-tigris-file-storage.html.markerb b/laravel/the-basics/laravel-tigris-file-storage.html.markerb index bfbd7970d4..1367a62fb3 100644 --- a/laravel/the-basics/laravel-tigris-file-storage.html.markerb +++ b/laravel/the-basics/laravel-tigris-file-storage.html.markerb @@ -104,6 +104,6 @@ Now that we have our Tigris Bucket, let's connect it with our Laravel app. ## Serving public files -If your bucket is [public](/docs/tigris/#public-buckets), uploaded objects are accessible without authentication at `https://bucket-name.fly.storage.tigris.dev/key-name`. You can use this URL directly in your Blade templates for images, CSS, JavaScript, and other assets. No credentials or pre-signed URLs are needed. +If your bucket is [public](/docs/tigris/#public-buckets), uploaded objects are accessible without authentication at `https://bucket-name.t3.tigrisfiles.io/key-name`. You can use this URL directly in your Blade templates for images, CSS, JavaScript, and other assets. No credentials or pre-signed URLs are needed. See the [Tigris Public Bucket docs](https://www.tigrisdata.com/docs/buckets/public-bucket/) for details on all available public domains and custom domain setup. \ No newline at end of file diff --git a/partials/tigris/_tigris-storage-create.erb b/partials/tigris/_tigris-storage-create.erb index 89cd5ade77..a5835518b5 100644 --- a/partials/tigris/_tigris-storage-create.erb +++ b/partials/tigris/_tigris-storage-create.erb @@ -28,6 +28,12 @@ You can also make a public bucket private. fly storage update mybucket --private ``` -Objects in a public bucket can be accessed by anyone without authentication at `https://mybucket.fly.storage.tigris.dev/key-name`. No credentials or pre-signed URLs are needed. Public buckets are also served at dedicated Tigris domains. See the [Tigris Public Bucket docs](https://www.tigrisdata.com/docs/buckets/public-bucket/) for details on all available domains and custom domain setup. +Objects in a public bucket can be accessed by anyone without authentication. Public content is served from dedicated domains using the bucket name as a subdomain: + +* `https://mybucket.t3.tigrisfiles.io/key-name` (primary) +* `https://mybucket.t3.tigrisbucket.io/key-name` +* `https://mybucket.t3.tigrisblob.io/key-name` + +No credentials or pre-signed URLs are needed. For production use, we recommend setting up a [custom domain](https://www.tigrisdata.com/docs/buckets/custom-domain/). See the [Tigris Public Bucket docs](https://www.tigrisdata.com/docs/buckets/public-bucket/) for full details. Currently, buckets must be public or private. ACL settings will be ignored by the Tigris API. \ No newline at end of file From 3157f82546c31b6763673ac9eafbf8d45996de06 Mon Sep 17 00:00:00 2001 From: Katie Schilling <8411213+katieschilling@users.noreply.github.com> Date: Mon, 6 Apr 2026 13:38:53 -0600 Subject: [PATCH 3/5] docs: add flyctl custom domain setup for Tigris public buckets Add the flyctl command and CNAME instructions for setting up a custom domain alongside the public access documentation. Custom domains point to BUCKET.t3.tigrisbucket.io per Tigris docs. Assisted-by: Claude Opus 4.6 via Claude Code --- .../the-basics/laravel-tigris-file-storage.html.markerb | 2 +- partials/tigris/_tigris-storage-create.erb | 8 +++++++- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/laravel/the-basics/laravel-tigris-file-storage.html.markerb b/laravel/the-basics/laravel-tigris-file-storage.html.markerb index 1367a62fb3..930799c2e7 100644 --- a/laravel/the-basics/laravel-tigris-file-storage.html.markerb +++ b/laravel/the-basics/laravel-tigris-file-storage.html.markerb @@ -106,4 +106,4 @@ Now that we have our Tigris Bucket, let's connect it with our Laravel app. If your bucket is [public](/docs/tigris/#public-buckets), uploaded objects are accessible without authentication at `https://bucket-name.t3.tigrisfiles.io/key-name`. You can use this URL directly in your Blade templates for images, CSS, JavaScript, and other assets. No credentials or pre-signed URLs are needed. -See the [Tigris Public Bucket docs](https://www.tigrisdata.com/docs/buckets/public-bucket/) for details on all available public domains and custom domain setup. \ No newline at end of file +For production use, we recommend setting up a [custom domain](https://www.tigrisdata.com/docs/buckets/custom-domain/) so your public URLs stay stable. See the [Tigris Public Bucket docs](https://www.tigrisdata.com/docs/buckets/public-bucket/) for details on all available public domains. \ No newline at end of file diff --git a/partials/tigris/_tigris-storage-create.erb b/partials/tigris/_tigris-storage-create.erb index a5835518b5..fda7a8edf4 100644 --- a/partials/tigris/_tigris-storage-create.erb +++ b/partials/tigris/_tigris-storage-create.erb @@ -34,6 +34,12 @@ Objects in a public bucket can be accessed by anyone without authentication. Pub * `https://mybucket.t3.tigrisbucket.io/key-name` * `https://mybucket.t3.tigrisblob.io/key-name` -No credentials or pre-signed URLs are needed. For production use, we recommend setting up a [custom domain](https://www.tigrisdata.com/docs/buckets/custom-domain/). See the [Tigris Public Bucket docs](https://www.tigrisdata.com/docs/buckets/public-bucket/) for full details. +No credentials or pre-signed URLs are needed. For production use, we recommend setting up a custom domain so your public URLs stay stable: + +```cmd +flyctl storage update mybucket --custom-domain assets.example.com +``` + +Then create a CNAME record for `assets.example.com` pointing to `mybucket.t3.tigrisbucket.io`. See the [Tigris Custom Domain docs](https://www.tigrisdata.com/docs/buckets/custom-domain/) for full setup instructions and the [Tigris Public Bucket docs](https://www.tigrisdata.com/docs/buckets/public-bucket/) for details on all available public domains. Currently, buckets must be public or private. ACL settings will be ignored by the Tigris API. \ No newline at end of file From e797f36c5733050464f491430014b2f9e786edf4 Mon Sep 17 00:00:00 2001 From: Katie Schilling <8411213+katieschilling@users.noreply.github.com> Date: Mon, 6 Apr 2026 13:45:08 -0600 Subject: [PATCH 4/5] docs: note fly.storage.tigris.dev public access for existing accounts Existing Fly.io accounts can still use fly.storage.tigris.dev for anonymous public access, but this is not available for new accounts. Clarify this across all Tigris docs pages to avoid confusing existing users while directing new users to the dedicated public content domains. Assisted-by: Claude Opus 4.6 via Claude Code --- deep-dive/tigris.html.markerb | 2 +- laravel/the-basics/laravel-tigris-file-storage.html.markerb | 2 +- partials/tigris/_tigris-storage-create.erb | 4 +++- 3 files changed, 5 insertions(+), 3 deletions(-) diff --git a/deep-dive/tigris.html.markerb b/deep-dive/tigris.html.markerb index 4be913c415..f39efb8dff 100644 --- a/deep-dive/tigris.html.markerb +++ b/deep-dive/tigris.html.markerb @@ -10,6 +10,6 @@ order: 6 [Tigris](https://fly.io/docs/tigris/) is a globally distributed object storage service. It essentially requires no configuration, and seamlessly handles multi-regions. If you upload an audio file to a host in Virginia, you can access it from Amsterdam. Even better: subsequent accesses from regions other than the primary region are served locally. -Unlike relational databases, there may be reasons why you want to make your object store available via the internet. In this demo, the object store starts out private, but you can make it [public](/docs/tigris/#public-buckets) if you want. Public buckets serve objects without authentication at `https://bucket-name.t3.tigrisfiles.io/key-name`. +Unlike relational databases, there may be reasons why you want to make your object store available via the internet. In this demo, the object store starts out private, but you can make it [public](/docs/tigris/#public-buckets) if you want. Public buckets serve objects without authentication at `https://bucket-name.t3.tigrisfiles.io/key-name`. Existing accounts can also use `bucket-name.fly.storage.tigris.dev` for public access. And if you happen to have an existing S3 object store, check out [shadow buckets](/docs/tigris/#migrating-to-tigris-with-shadow-buckets), which enable you to incrementally migrate your data. diff --git a/laravel/the-basics/laravel-tigris-file-storage.html.markerb b/laravel/the-basics/laravel-tigris-file-storage.html.markerb index 930799c2e7..d22e0bf520 100644 --- a/laravel/the-basics/laravel-tigris-file-storage.html.markerb +++ b/laravel/the-basics/laravel-tigris-file-storage.html.markerb @@ -104,6 +104,6 @@ Now that we have our Tigris Bucket, let's connect it with our Laravel app. ## Serving public files -If your bucket is [public](/docs/tigris/#public-buckets), uploaded objects are accessible without authentication at `https://bucket-name.t3.tigrisfiles.io/key-name`. You can use this URL directly in your Blade templates for images, CSS, JavaScript, and other assets. No credentials or pre-signed URLs are needed. +If your bucket is [public](/docs/tigris/#public-buckets), uploaded objects are accessible without authentication at `https://bucket-name.t3.tigrisfiles.io/key-name`. You can use this URL directly in your Blade templates for images, CSS, JavaScript, and other assets. No credentials or pre-signed URLs are needed. Existing Fly.io accounts can also use `bucket-name.fly.storage.tigris.dev` for public access, but this is not available for new accounts. For production use, we recommend setting up a [custom domain](https://www.tigrisdata.com/docs/buckets/custom-domain/) so your public URLs stay stable. See the [Tigris Public Bucket docs](https://www.tigrisdata.com/docs/buckets/public-bucket/) for details on all available public domains. \ No newline at end of file diff --git a/partials/tigris/_tigris-storage-create.erb b/partials/tigris/_tigris-storage-create.erb index fda7a8edf4..f227fe6f9b 100644 --- a/partials/tigris/_tigris-storage-create.erb +++ b/partials/tigris/_tigris-storage-create.erb @@ -34,7 +34,9 @@ Objects in a public bucket can be accessed by anyone without authentication. Pub * `https://mybucket.t3.tigrisbucket.io/key-name` * `https://mybucket.t3.tigrisblob.io/key-name` -No credentials or pre-signed URLs are needed. For production use, we recommend setting up a custom domain so your public URLs stay stable: +No credentials or pre-signed URLs are needed. Existing Fly.io accounts can also access public content at `mybucket.fly.storage.tigris.dev`, but this is not available for new accounts. + +For production use, we recommend setting up a custom domain so your public URLs stay stable: ```cmd flyctl storage update mybucket --custom-domain assets.example.com From 97c229092cb1209187c91c9dc0079fd00dc58948 Mon Sep 17 00:00:00 2001 From: Katie Schilling <8411213+katieschilling@users.noreply.github.com> Date: Mon, 6 Apr 2026 13:58:16 -0600 Subject: [PATCH 5/5] docs: remove existing-account fly.storage.tigris.dev mentions Keep the Fly docs simple by only documenting the dedicated public content domains. Existing-account details are covered in the Tigris docs instead. Assisted-by: Claude Opus 4.6 via Claude Code --- deep-dive/tigris.html.markerb | 2 +- laravel/the-basics/laravel-tigris-file-storage.html.markerb | 2 +- partials/tigris/_tigris-storage-create.erb | 4 +--- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/deep-dive/tigris.html.markerb b/deep-dive/tigris.html.markerb index f39efb8dff..4be913c415 100644 --- a/deep-dive/tigris.html.markerb +++ b/deep-dive/tigris.html.markerb @@ -10,6 +10,6 @@ order: 6 [Tigris](https://fly.io/docs/tigris/) is a globally distributed object storage service. It essentially requires no configuration, and seamlessly handles multi-regions. If you upload an audio file to a host in Virginia, you can access it from Amsterdam. Even better: subsequent accesses from regions other than the primary region are served locally. -Unlike relational databases, there may be reasons why you want to make your object store available via the internet. In this demo, the object store starts out private, but you can make it [public](/docs/tigris/#public-buckets) if you want. Public buckets serve objects without authentication at `https://bucket-name.t3.tigrisfiles.io/key-name`. Existing accounts can also use `bucket-name.fly.storage.tigris.dev` for public access. +Unlike relational databases, there may be reasons why you want to make your object store available via the internet. In this demo, the object store starts out private, but you can make it [public](/docs/tigris/#public-buckets) if you want. Public buckets serve objects without authentication at `https://bucket-name.t3.tigrisfiles.io/key-name`. And if you happen to have an existing S3 object store, check out [shadow buckets](/docs/tigris/#migrating-to-tigris-with-shadow-buckets), which enable you to incrementally migrate your data. diff --git a/laravel/the-basics/laravel-tigris-file-storage.html.markerb b/laravel/the-basics/laravel-tigris-file-storage.html.markerb index d22e0bf520..930799c2e7 100644 --- a/laravel/the-basics/laravel-tigris-file-storage.html.markerb +++ b/laravel/the-basics/laravel-tigris-file-storage.html.markerb @@ -104,6 +104,6 @@ Now that we have our Tigris Bucket, let's connect it with our Laravel app. ## Serving public files -If your bucket is [public](/docs/tigris/#public-buckets), uploaded objects are accessible without authentication at `https://bucket-name.t3.tigrisfiles.io/key-name`. You can use this URL directly in your Blade templates for images, CSS, JavaScript, and other assets. No credentials or pre-signed URLs are needed. Existing Fly.io accounts can also use `bucket-name.fly.storage.tigris.dev` for public access, but this is not available for new accounts. +If your bucket is [public](/docs/tigris/#public-buckets), uploaded objects are accessible without authentication at `https://bucket-name.t3.tigrisfiles.io/key-name`. You can use this URL directly in your Blade templates for images, CSS, JavaScript, and other assets. No credentials or pre-signed URLs are needed. For production use, we recommend setting up a [custom domain](https://www.tigrisdata.com/docs/buckets/custom-domain/) so your public URLs stay stable. See the [Tigris Public Bucket docs](https://www.tigrisdata.com/docs/buckets/public-bucket/) for details on all available public domains. \ No newline at end of file diff --git a/partials/tigris/_tigris-storage-create.erb b/partials/tigris/_tigris-storage-create.erb index f227fe6f9b..fda7a8edf4 100644 --- a/partials/tigris/_tigris-storage-create.erb +++ b/partials/tigris/_tigris-storage-create.erb @@ -34,9 +34,7 @@ Objects in a public bucket can be accessed by anyone without authentication. Pub * `https://mybucket.t3.tigrisbucket.io/key-name` * `https://mybucket.t3.tigrisblob.io/key-name` -No credentials or pre-signed URLs are needed. Existing Fly.io accounts can also access public content at `mybucket.fly.storage.tigris.dev`, but this is not available for new accounts. - -For production use, we recommend setting up a custom domain so your public URLs stay stable: +No credentials or pre-signed URLs are needed. For production use, we recommend setting up a custom domain so your public URLs stay stable: ```cmd flyctl storage update mybucket --custom-domain assets.example.com