# How to Manage Tigris Buckets with Fly.io

Tigris is a globally distributed, multi-cloud object storage service with built-in support for the S3 API and no egress fees. Fly.io users can create and manage Tigris buckets natively within Fly.io via the tool, `flyctl`.

## Getting Started[​](#getting-started "Direct link to Getting Started")

If you don't have an account, you can get yourself one [here](https://fly.io/app/sign-up/tigris).

You can then use the `fly storage` command to create and manage Tigris buckets.

## Creating and managing a bucket[​](#creating-and-managing-a-bucket "Direct link to Creating and managing a bucket")

### Creating a bucket associated with a Fly app[​](#creating-a-bucket-associated-with-a-fly-app "Direct link to Creating a bucket associated with a Fly app")

To create a bucket for one of your Fly apps, run the following command in the directory where your Fly app is located:

```
fly storage create
```

This will create a bucket and set the required environment variables for you.

```
$ fly storage create

? Choose a name, use the default, or leave blank to generate one: demo-bucket

Your  project (demo-bucket) is ready. See details and next steps with:



Setting the following secrets on ot-demo:

AWS_ACCESS_KEY_ID

AWS_SECRET_ACCESS_KEY

BUCKET_NAME

AWS_ENDPOINT_URL_S3



Secrets are staged for the first deployment
```

### Creating a bucket not associated with a Fly app[​](#creating-a-bucket-not-associated-with-a-fly-app "Direct link to Creating a bucket not associated with a Fly app")

If you want to create a bucket that is not associated with a Fly app, you can run the same command outside of a Fly app directory.

```
$ fly storage create

? Select Organization: Ovais Tariq (personal)

? Choose a name, use the default, or leave blank to generate one:

Your  project (polished-thunder-5646) is ready. See details and next steps with:



Set one or more of the following secrets on your target app.

AWS_ENDPOINT_URL_S3: https://t3.storage.dev

AWS_ACCESS_KEY_ID: xxxxxxxxxxxxxxxxxxxx

AWS_SECRET_ACCESS_KEY: xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx

BUCKET_NAME: polished-thunder-5646
```

### Creating a public bucket[​](#creating-a-public-bucket "Direct link to Creating a public bucket")

By default, buckets are private. You can create a public bucket by passing the `--public` flag to the `fly storage create` command:

```
fly storage create --public
```

### Accessing objects in a public bucket[​](#accessing-objects-in-a-public-bucket "Direct link to Accessing objects in a public bucket")

Objects in a public bucket can be read by anyone without authentication. Public content is served from dedicated domains using the bucket name as a subdomain:

* `https://bucket-name.t3.tigrisfiles.io/key-name` (primary)
* `https://bucket-name.t3.tigrisbucket.io/key-name`
* `https://bucket-name.t3.tigrisblob.io/key-name`

For example, if you created a public bucket called `my-assets` and uploaded `logo.png`, anyone can access it at:

```
https://my-assets.t3.tigrisfiles.io/logo.png
```

No credentials or signed URLs are needed — the URL works directly in a browser, `curl`, `wget`, `<img>` tags, etc.

For production use, we recommend setting up a [custom domain](/docs/buckets/custom-domain/.md) so your public URLs stay stable. See the [Public Bucket](/docs/buckets/public-bucket/.md) guide for full details.

### Updating bucket public access[​](#updating-bucket-public-access "Direct link to Updating bucket public access")

You can make a private bucket public or a public bucket private by using the `fly storage update` command:

```
fly storage update bucket-name --public
```

Or,

```
fly storage update bucket-name --private
```

### Updating custom domain[​](#updating-custom-domain "Direct link to Updating custom domain")

You can associate a domain or subdomain you own with the bucket.

```
flyctl storage update bucket-name --custom-domain images.example.com
```

For this to work, you need to create a CNAME record for `images.example.com` that points to `bucket-name.t3.tigrisbucket.io`.

### Remove the custom domain[​](#remove-the-custom-domain "Direct link to Remove the custom domain")

To remove a custom domain and certificate from your bucket, run the following command:

```
fly storage update bucket-name --clear-custom-domain
```

## Listing buckets[​](#listing-buckets "Direct link to Listing buckets")

To list all the buckets associated with your Fly account, run the following command:

```
fly storage list
```

## Deleting a bucket[​](#deleting-a-bucket "Direct link to Deleting a bucket")

To delete a bucket, run the following command:

```
fly storage destroy bucket-name
```

## Accessing the Tigris Console[​](#accessing-the-tigris-console "Direct link to Accessing the Tigris Console")

While `flyctl` provides command-line management for your buckets, you can also use the Tigris web console for a visual interface to manage your buckets, access keys, upload objects, view usage, and more.

### Logging in to the Console[​](#logging-in-to-the-console "Direct link to Logging in to the Console")

To access the Tigris console with your Fly-provisioned buckets:

1. Go to [console.storage.dev/signin](https://console.storage.dev/signin)
2. Click the **Fly.io** button to log in
3. This will connect to your Fly organization and show all your buckets

Important: Use the Fly.io Login

You **must** click the **Fly.io** button on the login page to access your Fly-provisioned buckets.

Do not use Google, GitHub, or email login, as those will create a separate native Tigris account that won't have access to your Fly buckets.

### Fly Organizations and Billing[​](#fly-organizations-and-billing "Direct link to Fly Organizations and Billing")

When you use Fly.io to access Tigris:

* **Billing:** Your Tigris usage is billed through Fly.io, not directly through Tigris
* **Team management:** You must manage team members through [Fly Organizations](https://fly.io/dashboard), not through Tigris Organizations
* **Organization access:** The Tigris console will reflect the permissions and access from your Fly Organization
* **All changes to Fly Organizations** are automatically reflected in Tigris access controls

To manage your team:

1. Go to the [Fly Dashboard](https://fly.io/dashboard)
2. Click on `Account` → `Organizations`
3. Select your organization and manage team members under the `Team` section

### Migrating to Native Tigris[​](#migrating-to-native-tigris "Direct link to Migrating to Native Tigris")

If you want to migrate your Fly account to a native Tigris account:

* Contact <help@tigrisdata.com> to initiate the migration
* Your data will not move
* Your access keys will continue to work as normal
* You'll receive a separate Tigris bill instead of billing through Fly.io

## Troubleshooting[​](#troubleshooting "Direct link to Troubleshooting")

### I can't see my buckets in the Tigris console[​](#i-cant-see-my-buckets-in-the-tigris-console "Direct link to I can't see my buckets in the Tigris console")

**Problem:** You log into the Tigris console but see an empty dashboard with no buckets, even though you created them using `fly storage create`.

**Cause:** You're logged into a native Tigris account instead of your Fly.io account. These are completely separate systems.

**Solution:**

1. **Log out** of the Tigris console completely
2. **Go to** [console.storage.dev/signin](https://console.storage.dev/signin)
3. **Click the Fly.io button** (not Google, GitHub, or email)
4. Your Fly-provisioned buckets should now appear

### My buckets appear but are empty[​](#my-buckets-appear-but-are-empty "Direct link to My buckets appear but are empty")

If you can see your buckets but they appear empty or you're missing some buckets:

* **Check your Fly organization:** Ensure you're logged in with the correct Fly account that owns the buckets
* **Verify buckets exist:** Run `fly storage list` from your terminal to confirm
* **Browser issues:** Try clearing your browser cache or using an incognito/private window

### Still need help?[​](#still-need-help "Direct link to Still need help?")

Contact <help@tigrisdata.com> with:

* Your Fly organization name
* The bucket names you're trying to access
* Screenshots of what you're seeing in the console
