[Blog](/blog/.md)

<!-- -->

/

<!-- -->

[Updates](/blog/tags/updates/.md)

# You wanted more lifecycle rules. They're here.

Garren · May 26, 2026 ·

<!-- -->

8 min read

[![Garren](https://github.com/garrensmith.png)](https://www.garrensmith.com)

[Garren](https://www.garrensmith.com)

Founding Engineer

![Ty in a Minecraft sorting room watching hoppers route objects between chests labeled Standard, Infrequent Access, and Glacier](/blog/assets/images/hero-image-ee63259870bb4fb10eba374d784d134c.webp)

Anyone who's spent a weekend in Minecraft knows the moment. You've got eleven double chests labeled "STUFF", you can't find your iron, and you finally cave and build the sorting room. Hoppers feeding chests, item filters routing cobblestone to the bulk room, lava bucket waiting for the rotten flesh you'll never use. Once you have it, you wonder how you lived without it.

Buckets without proper lifecycle rules are the same situation. One giant chest. No hoppers. You're paying to keep your build screenshots from 2022 sitting next to last night's logs.

Last year, [we shipped lifecycle rules](/blog/lifecycle-rules/.md) for Tigris. One rule per bucket, one transition or one expiration. They have been incredibly useful for a lot of users. But we wanted to take it further. Today is that day: **multiple rules per bucket**, **prefix filters**, transitions and expirations mixed however you want.

The hoppers are here.

<!-- -->

## What's actually new[​](#whats-actually-new "Direct link to What's actually new")

Before this update, you got one lifecycle rule per bucket, applied to every object in it. That's enough to do "move everything older than 30 days to Archive," but not much more.

Now:

* A bucket can have **multiple lifecycle rules** — up to ten.
* Each rule can be scoped to a key prefix using `Filter.Prefix`. Omit the filter (or pass `Filter: {}`) to apply the rule to every object in the bucket.
* Transition and expiration rules can be mixed in the same bucket however you want.
* Each rule can have an `ID` (up to 36 characters) so you can name what it does.
* A single rule can include both a transition and an expiration, but only one of each. So `Standard → IA → expire` fits in one rule, while chaining `Standard → IA → Glacier` takes two.

Full reference lives in the docs: [Object Lifecycle Rules](https://www.tigrisdata.com/docs/buckets/object-lifecycle-rules/) and [Object Expiration](https://www.tigrisdata.com/docs/buckets/objects-expiration/).

Here's the new shape of a single rule:

```
{
  "ID": "logs-to-ia",
  "Status": "Enabled",
  "Filter": { "Prefix": "logs/" },
  "Transitions": [{ "Days": 30, "StorageClass": "STANDARD_IA" }]
}
```

![A card-style diagram of one rule: ID and Enabled status at the top, then three rows — FILTER (folder icon, prefix value, omit to apply to every object), TRANSITION (arrow icon, STANDARD\_IA or GLACIER at a Days threshold, no cold-to-warm transitions), and EXPIRATION (X icon, delete at a Days threshold).](data:image/svg+xml;base64,PHN2ZwogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICB2aWV3Qm94PSIwIDAgODgwIDQyMCIKICB3aWR0aD0iODgwIgogIGhlaWdodD0iNDIwIgogIHN0eWxlPSJiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCIKPgogIDxzdHlsZT4KICAgIHRleHQgewogICAgICBmb250LWZhbWlseToKICAgICAgICAiSGFua2VuIEdyb3Rlc2siLAogICAgICAgIHN5c3RlbS11aSwKICAgICAgICAtYXBwbGUtc3lzdGVtLAogICAgICAgICJTZWdvZSBVSSIsCiAgICAgICAgSGVsdmV0aWNhLAogICAgICAgIEFyaWFsLAogICAgICAgIHNhbnMtc2VyaWY7CiAgICB9CiAgICAudGl0bGUgewogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZpbGw6ICNjOGQ2ZGU7CiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICB9CiAgICAuc3VidGl0bGUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGZpbGw6ICM4ZmEzYjA7CiAgICB9CiAgICAuZmllbGQtbGFiZWwgewogICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIGZpbGw6ICM4ZmEzYjA7CiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjEyZW07CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICB9CiAgICAudmFsdWUgewogICAgICBmb250LWZhbWlseTogIkZpcmEgQ29kZSBWRiIsIHVpLW1vbm9zcGFjZSwgbW9ub3NwYWNlOwogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGZpbGw6ICNjOGQ2ZGU7CiAgICB9CiAgICAuY29uc3RyYWludCB7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgZmlsbDogIzVhNjc3MDsKICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgfQogICAgLnN0YXR1cy1vbiB7CiAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgZmlsbDogIzYyZmViNTsKICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMWVtOwogICAgfQogICAgLmZvb3RlciB7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgZmlsbDogIzhmYTNiMDsKICAgIH0KICAgIC5jYXJkIHsKICAgICAgcng6IDEyOwogICAgICByeTogMTI7CiAgICAgIGZpbGw6ICMxNDIyMjk7CiAgICAgIHN0cm9rZTogIzYyZmViNTsKICAgICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICB9CiAgICAuZGl2aWRlciB7CiAgICAgIHN0cm9rZTogIzJhMzczMTsKICAgICAgc3Ryb2tlLXdpZHRoOiAxOwogICAgfQogICAgLnN0YXR1cy1kb3QgewogICAgICBmaWxsOiAjNjJmZWI1OwogICAgfQogIDwvc3R5bGU+CgogIDx0ZXh0IHg9IjQ0MCIgeT0iMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGNsYXNzPSJ0aXRsZSI+CiAgICBBbmF0b215IG9mIGEgcnVsZQogIDwvdGV4dD4KICA8dGV4dCB4PSI0NDAiIHk9IjQ4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBjbGFzcz0ic3VidGl0bGUiPgogICAgT25lIGZpbHRlci4gT25lIHRyYW5zaXRpb24uIE9uZSBleHBpcmF0aW9uLiBVcCB0byB0ZW4gb2YgdGhlc2UgcGVyCiAgICBidWNrZXQuCiAgPC90ZXh0PgoKICA8IS0tIENhcmQ6IHk9NzQgdG8geT0zOTQsIHg9NjAgdG8geD04MjAgLS0+CiAgPHJlY3QgeD0iNjAiIHk9Ijc0IiB3aWR0aD0iNzYwIiBoZWlnaHQ9IjMyMCIgY2xhc3M9ImNhcmQiIC8+CgogIDwhLS0gSGVhZGVyIHJvdyAtLT4KICA8dGV4dCB4PSI4MiIgeT0iMTAwIiBjbGFzcz0iZmllbGQtbGFiZWwiPlJVTEU8L3RleHQ+CiAgPHRleHQgeD0iODIiIHk9IjEyNCIgY2xhc3M9InZhbHVlIj4ibG9ncy10aWVyZWQtcmV0ZW50aW9uIjwvdGV4dD4KCiAgPGNpcmNsZSBjeD0iNzgwIiBjeT0iMTAwIiByPSI2IiBjbGFzcz0ic3RhdHVzLWRvdCIgLz4KICA8dGV4dCB4PSI3NjYiIHk9IjEwNCIgdGV4dC1hbmNob3I9ImVuZCIgY2xhc3M9InN0YXR1cy1vbiI+RU5BQkxFRDwvdGV4dD4KCiAgPGxpbmUgeDE9IjgwIiB5MT0iMTQ0IiB4Mj0iODAwIiB5Mj0iMTQ0IiBjbGFzcz0iZGl2aWRlciIgLz4KCiAgPCEtLSBGaWx0ZXIgcm93OiAxNDgtMjE2IC0tPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDgyLCAxNjIpIj4KICAgIDwhLS0gZm9sZGVyIGljb24gLS0+CiAgICA8cGF0aAogICAgICBkPSJNIDAgNCBMIDEwIDQgTCAxMyAwIEwgMzAgMCBMIDMwIDIyIEwgMCAyMiBaIgogICAgICBmaWxsPSIjNWJhNGNmIgogICAgICBvcGFjaXR5PSIwLjg1IgogICAgLz4KICA8L2c+CiAgPHRleHQgeD0iMTMwIiB5PSIxNzIiIGNsYXNzPSJmaWVsZC1sYWJlbCI+RklMVEVSPC90ZXh0PgogIDx0ZXh0IHg9IjEzMCIgeT0iMTk0IiBjbGFzcz0idmFsdWUiPgogICAgPHRzcGFuIGZpbGw9IiM1YmE0Y2YiPnByZWZpeDwvdHNwYW4+OiAibG9ncy8iCiAgPC90ZXh0PgogIDx0ZXh0IHg9IjEzMCIgeT0iMjEyIiBjbGFzcz0iY29uc3RyYWludCI+CiAgICBPbWl0IHRoZSBmaWx0ZXIgdG8gYXBwbHkgdGhlIHJ1bGUgdG8gZXZlcnkgb2JqZWN0IGluIHRoZSBidWNrZXQuCiAgPC90ZXh0PgoKICA8bGluZSB4MT0iODAiIHkxPSIyMjIiIHgyPSI4MDAiIHkyPSIyMjIiIGNsYXNzPSJkaXZpZGVyIiAvPgoKICA8IS0tIFRyYW5zaXRpb24gcm93OiAyMjYtMzEyIC0tPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDgyLCAyNDQpIj4KICAgIDwhLS0gY2hldnJvbiBhcnJvdyBpY29uIC0tPgogICAgPHBhdGgKICAgICAgZD0iTSAwIDggTCAyMCA4IEwgMjAgMCBMIDM0IDEyIEwgMjAgMjQgTCAyMCAxNiBMIDAgMTYgWiIKICAgICAgZmlsbD0iIzYyZmViNSIKICAgICAgb3BhY2l0eT0iMC45IgogICAgLz4KICA8L2c+CiAgPHRleHQgeD0iMTMwIiB5PSIyNTQiIGNsYXNzPSJmaWVsZC1sYWJlbCI+VFJBTlNJVElPTjwvdGV4dD4KICA8dGV4dCB4PSIxMzAiIHk9IjI3NiIgY2xhc3M9InZhbHVlIj4KICAgIDx0c3BhbiBmaWxsPSIjNjJmZWI1Ij5TVEFOREFSRF9JQTwvdHNwYW4+IGF0IGRheQogICAgPHRzcGFuIGZpbGw9IiNjZjhlNWIiPjMwPC90c3Bhbj4KICA8L3RleHQ+CiAgPHRleHQgeD0iMTMwIiB5PSIyOTQiIGNsYXNzPSJjb25zdHJhaW50Ij4KICAgIE9uZSBwZXIgcnVsZS4gU3RvcmFnZUNsYXNzOiBTVEFOREFSRF9JQSBvciBHTEFDSUVSLgogIDwvdGV4dD4KICA8dGV4dCB4PSIxMzAiIHk9IjMxMCIgY2xhc3M9ImNvbnN0cmFpbnQiPgogICAgQ29sZCB0aWVycyBkb24ndCBnbyBiYWNrIHRvIHdhcm0uCiAgPC90ZXh0PgoKICA8bGluZSB4MT0iODAiIHkxPSIzMTgiIHgyPSI4MDAiIHkyPSIzMTgiIGNsYXNzPSJkaXZpZGVyIiAvPgoKICA8IS0tIEV4cGlyYXRpb24gcm93OiAzMjItMzc2IC0tPgogIDxnIHRyYW5zZm9ybT0idHJhbnNsYXRlKDgyLCAzMzYpIj4KICAgIDwhLS0gY3Jvc3NlZCBjaXJjbGUgLS0+CiAgICA8Y2lyY2xlIGN4PSIxNCIgY3k9IjE0IiByPSIxNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSIjY2Y4ZTViIiBzdHJva2Utd2lkdGg9IjIiIC8+CiAgICA8bGluZSB4MT0iNiIgeTE9IjYiIHgyPSIyMiIgeTI9IjIyIiBzdHJva2U9IiNjZjhlNWIiIHN0cm9rZS13aWR0aD0iMi41IiAvPgogICAgPGxpbmUgeDE9IjIyIiB5MT0iNiIgeDI9IjYiIHkyPSIyMiIgc3Ryb2tlPSIjY2Y4ZTViIiBzdHJva2Utd2lkdGg9IjIuNSIgLz4KICA8L2c+CiAgPHRleHQgeD0iMTMwIiB5PSIzNDgiIGNsYXNzPSJmaWVsZC1sYWJlbCI+RVhQSVJBVElPTjwvdGV4dD4KICA8dGV4dCB4PSIxMzAiIHk9IjM3MCIgY2xhc3M9InZhbHVlIj4KICAgIGRlbGV0ZSBhdCBkYXkgPHRzcGFuIGZpbGw9IiNjZjhlNWIiPjU0MDwvdHNwYW4+CiAgPC90ZXh0PgoKICA8IS0tIEZvb3RlciBiZWxvdyB0aGUgY2FyZCAtLT4KICA8dGV4dCB4PSI0NDAiIHk9IjQxNCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgY2xhc3M9ImZvb3RlciI+CiAgICBTY2hlZHVsZXIgcGlja3MgcnVsZXMgdXAgd2l0aGluIG1pbnV0ZXM7IGZpcnN0IGFjdGlvbiBpcyBvbiB0aGUgb2xkZXN0CiAgICBtYXRjaGluZyBvYmplY3QuCiAgPC90ZXh0Pgo8L3N2Zz4K)

That's the building block. Let's build three sorting rooms.

## Sorting room 1: Logs with retention tiers[​](#sorting-room-1-logs-with-retention-tiers "Direct link to Sorting room 1: Logs with retention tiers")

Imagine your service writes structured logs to `logs/` in a bucket. Engineers grep them every day for the first month. Quarterly audits pull from them for a year. After that, nobody touches them. Compliance still says you keep them for 18 months and then they go away.

Before, you'd need a cron job to do this. Or three buckets. Or a lot of luck.

Now you write one rule that does both: a transition and an expiration on the same prefix.

```
{
  "Rules": [
    {
      "ID": "logs-tiered-retention",
      "Status": "Enabled",
      "Filter": { "Prefix": "logs/" },
      "Transitions": [{ "Days": 30, "StorageClass": "STANDARD_IA" }],
      "Expiration": { "Days": 540 }
    }
  ]
}
```

The rule moves anything under `logs/` to Infrequent Access after 30 days, then deletes it after 540. Logs older than a month live in cheaper storage. Logs older than 18 months don't live anywhere.

Exactly what [the previous post](/blog/lifecycle-rules/.md) promised: slowly punting things down the tier list before they're eventually deleted. Same savings shape too — older logs at IA cost a fraction of fresh logs at Standard, and at day 540 they cost nothing.

## Sorting room 2: One bucket, three workloads[​](#sorting-room-2-one-bucket-three-workloads "Direct link to Sorting room 2: One bucket, three workloads")

Now picture a SaaS app that stores three kinds of objects in one bucket:

* `uploads/` — user-generated content. These are forever.
* `thumbnails/` — automatically generated from uploads. Regenerable, so they should expire.
* `exports/` — one-time CSV downloads. Once the user has the file, it's dead weight.

Three workloads, three lifecycles, one bucket. With prefix filtering you write two rules and you're done:

```
{
  "Rules": [
    {
      "ID": "thumbnails-expire",
      "Status": "Enabled",
      "Filter": { "Prefix": "thumbnails/" },
      "Expiration": { "Days": 30 }
    },
    {
      "ID": "exports-expire",
      "Status": "Enabled",
      "Filter": { "Prefix": "exports/" },
      "Expiration": { "Days": 7 }
    }
  ]
}
```

Uploads don't need a rule. They live forever, which is the whole point.

Before this change, you had two options for this kind of thing: run a deletion script and hope it stays correct, or split your bucket into three. Both were bad. Now it's two JSON objects in a config file.

## Sorting room 3: An ML training pipeline[​](#sorting-room-3-an-ml-training-pipeline "Direct link to Sorting room 3: An ML training pipeline")

If you're training models on Tigris, your bucket probably looks something like this:

* `datasets/raw/` — your source data. Used hard during a training run, barely after.
* `checkpoints/` — model snapshots from each run. Hot during training, cold once the run is done.
* `artifacts/intermediate/` — embeddings, tokenized batches, debug outputs. You generate them, you regenerate them, and you mostly throw them away.

This is where multi-rule lifecycle earns its keep. One bucket holds three prefixes, each on its own policy:

```
{
  "Rules": [
    {
      "ID": "raw-archive",
      "Status": "Enabled",
      "Filter": { "Prefix": "datasets/raw/" },
      "Transitions": [{ "Days": 14, "StorageClass": "GLACIER" }]
    },
    {
      "ID": "checkpoints-cool",
      "Status": "Enabled",
      "Filter": { "Prefix": "checkpoints/" },
      "Transitions": [{ "Days": 7, "StorageClass": "STANDARD_IA" }]
    },
    {
      "ID": "intermediate-expire",
      "Status": "Enabled",
      "Filter": { "Prefix": "artifacts/intermediate/" },
      "Expiration": { "Days": 3 }
    }
  ]
}
```

Raw datasets get archived two weeks after a training run. Checkpoints cool down to Infrequent Access after a week. Intermediate artifacts get deleted after three days.

Zero egress on a globally distributed, multi-cloud bucket helps here. Archiving training data on other clouds is a decision you think twice about because thawing it back out costs you. On Tigris, it's storage that costs less.

[Pt 1's savings example](/blog/lifecycle-rules/.md): a 120 TB bucket dropped from $2,450 to $833 a month after 92 TB moved to Archive. About two thirds off the original bill. Raw datasets dwarf checkpoints and intermediate artifacts in most training pipelines, so the bulk of the savings on Tigris comes from the `GLACIER` transition on `datasets/raw/` — the corpus that drives most of the storage bill in training workloads.

## How rules are evaluated[​](#how-rules-are-evaluated "Direct link to How rules are evaluated")

Multi-rule lifecycle on Tigris doesn't have a coordination layer in front of the workers. Each rule runs on its own worker, walking the bucket oldest-first. If two rules match the same object, whichever worker picks it up first does the work.

You can't transition from a colder tier to a warmer one. Once an object lands in `GLACIER`, no rule can pull it back to `STANDARD_IA`. When two transitions race, the one that fires first is the only one that matters — the other has nothing to do by the time it arrives.

When a transition and an expiration fire on the same object at roughly the same moment, [pt 1's global replication](/blog/lifecycle-rules/.md) settles it the same way it settles any other concurrent metadata update: by timestamp. Multi-rule reuses the architecture pt 1 walked through.

![A state diagram showing three storage tiers (Standard, Infrequent Access, Glacier) in a row, with green forward transition arrows between them. Orange expiration arrows from each tier converge on a Deleted node below. A dashed red arc curves over the tier row from Glacier back toward Standard, struck through with an X and labeled \&quot;NO PATH BACK,\&quot; showing that backwards transitions are blocked.](data:image/svg+xml;base64,PHN2ZwogIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIKICB2aWV3Qm94PSIwIDAgOTAwIDQ2MCIKICB3aWR0aD0iOTAwIgogIGhlaWdodD0iNDYwIgogIHN0eWxlPSJiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCIKPgogIDxzdHlsZT4KICAgIHRleHQgewogICAgICBmb250LWZhbWlseToKICAgICAgICAiSGFua2VuIEdyb3Rlc2siLAogICAgICAgIHN5c3RlbS11aSwKICAgICAgICAtYXBwbGUtc3lzdGVtLAogICAgICAgICJTZWdvZSBVSSIsCiAgICAgICAgSGVsdmV0aWNhLAogICAgICAgIEFyaWFsLAogICAgICAgIHNhbnMtc2VyaWY7CiAgICB9CiAgICAudGl0bGUgewogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZpbGw6ICNjOGQ2ZGU7CiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICB9CiAgICAuc3VidGl0bGUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGZpbGw6ICM4ZmEzYjA7CiAgICB9CiAgICAudGllci1uYW1lIHsKICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICBmb250LXdlaWdodDogNzAwOwogICAgICBmaWxsOiAjYzhkNmRlOwogICAgfQogICAgLnRpZXItY29kZSB7CiAgICAgIGZvbnQtZmFtaWx5OiAiRmlyYSBDb2RlIFZGIiwgdWktbW9ub3NwYWNlLCBtb25vc3BhY2U7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgZmlsbDogIzhmYTNiMDsKICAgIH0KICAgIC5hcnJvdy1sYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgZmlsbDogIzYyZmViNTsKICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDhlbTsKICAgIH0KICAgIC5leHBpcmUtbGFiZWwgewogICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgIGZpbGw6ICNjZjhlNWI7CiAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICB9CiAgICAuYmxvY2tlZC1sYWJlbCB7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgZmlsbDogI2NmNWI1YjsKICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMWVtOwogICAgfQogICAgLmZvb3RlciB7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgZmlsbDogIzhmYTNiMDsKICAgIH0KICAgIC50aWVyLXN0YW5kYXJkIHsKICAgICAgcng6IDEwOwogICAgICByeTogMTA7CiAgICAgIGZpbGw6IHJnYmEoMjA3LCAxNDIsIDkxLCAwLjEyKTsKICAgICAgc3Ryb2tlOiAjY2Y4ZTViOwogICAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgIH0KICAgIC50aWVyLWlhIHsKICAgICAgcng6IDEwOwogICAgICByeTogMTA7CiAgICAgIGZpbGw6IHJnYmEoOTEsIDE2NCwgMjA3LCAwLjEyKTsKICAgICAgc3Ryb2tlOiAjNWJhNGNmOwogICAgICBzdHJva2Utd2lkdGg6IDEuNTsKICAgIH0KICAgIC50aWVyLWdsYWNpZXIgewogICAgICByeDogMTA7CiAgICAgIHJ5OiAxMDsKICAgICAgZmlsbDogcmdiYSg3NSwgMTEwLCAxNDUsIDAuMik7CiAgICAgIHN0cm9rZTogIzZkOTZiZDsKICAgICAgc3Ryb2tlLXdpZHRoOiAxLjU7CiAgICB9CiAgICAudGllci1kZWxldGVkIHsKICAgICAgcng6IDEwOwogICAgICByeTogMTA7CiAgICAgIGZpbGw6IHRyYW5zcGFyZW50OwogICAgICBzdHJva2U6ICM0YTU1NjA7CiAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgICBzdHJva2UtZGFzaGFycmF5OiA1IDQ7CiAgICB9CiAgICAuYXJyb3ctZm9yd2FyZCB7CiAgICAgIHN0cm9rZTogIzYyZmViNTsKICAgICAgc3Ryb2tlLXdpZHRoOiAyLjU7CiAgICAgIGZpbGw6IG5vbmU7CiAgICB9CiAgICAuYXJyb3ctZXhwaXJlIHsKICAgICAgc3Ryb2tlOiAjY2Y4ZTViOwogICAgICBzdHJva2Utd2lkdGg6IDI7CiAgICAgIGZpbGw6IG5vbmU7CiAgICAgIHN0cm9rZS1vcGFjaXR5OiAwLjc1OwogICAgfQogICAgLmFyYy1ibG9ja2VkIHsKICAgICAgc3Ryb2tlOiAjY2Y1YjViOwogICAgICBzdHJva2Utd2lkdGg6IDIuNTsKICAgICAgZmlsbDogbm9uZTsKICAgICAgc3Ryb2tlLWRhc2hhcnJheTogNyA1OwogICAgICBzdHJva2Utb3BhY2l0eTogMC44NTsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGVmcz4KICAgIDxtYXJrZXIKICAgICAgaWQ9ImFoLWZ3ZCIKICAgICAgbWFya2VyV2lkdGg9IjkiCiAgICAgIG1hcmtlckhlaWdodD0iNyIKICAgICAgcmVmWD0iOSIKICAgICAgcmVmWT0iMy41IgogICAgICBvcmllbnQ9ImF1dG8iCiAgICA+CiAgICAgIDxwb2x5Z29uIHBvaW50cz0iMCAwLCA5IDMuNSwgMCA3IiBmaWxsPSIjNjJmZWI1IiAvPgogICAgPC9tYXJrZXI+CiAgICA8bWFya2VyCiAgICAgIGlkPSJhaC1leHAiCiAgICAgIG1hcmtlcldpZHRoPSI4IgogICAgICBtYXJrZXJIZWlnaHQ9IjYiCiAgICAgIHJlZlg9IjgiCiAgICAgIHJlZlk9IjMiCiAgICAgIG9yaWVudD0iYXV0byIKICAgID4KICAgICAgPHBvbHlnb24gcG9pbnRzPSIwIDAsIDggMywgMCA2IiBmaWxsPSIjY2Y4ZTViIiBmaWxsLW9wYWNpdHk9IjAuOSIgLz4KICAgIDwvbWFya2VyPgogIDwvZGVmcz4KCiAgPHRleHQgeD0iNDUwIiB5PSIyOCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgY2xhc3M9InRpdGxlIj4KICAgIFdoZXJlIG9iamVjdHMgY2FuIG1vdmUKICA8L3RleHQ+CiAgPHRleHQgeD0iNDUwIiB5PSI0OCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgY2xhc3M9InN1YnRpdGxlIj4KICAgIFRyYW5zaXRpb25zIHB1c2ggb2JqZWN0cyB0byBjb2xkZXIgdGllcnMuIEV4cGlyYXRpb25zIGRlbGV0ZSB0aGVtLgogICAgQmFja3dhcmRzIGlzIGJsb2NrZWQuCiAgPC90ZXh0PgoKICA8IS0tIEJsb2NrZWQgYXJjIOKAlCBjdXJ2ZXMgYWJvdmUgdGhlIHRpZXIgcm93IGZyb20gR2xhY2llciBiYWNrIHRvIFN0YW5kYXJkIC0tPgogIDxwYXRoCiAgICBkPSJNIDY1MCAxODUgQyA2MDAgNTAsIDMwMCA1MCwgMjUwIDE4NSIKICAgIGNsYXNzPSJhcmMtYmxvY2tlZCIKICAvPgogIDwhLS0gU3RyaWtlLXRocm91Z2ggWCBhdCB0aGUgcGVhayBvZiB0aGUgYXJjIC0tPgogIDxsaW5lCiAgICB4MT0iNDM4IgogICAgeTE9Ijc2IgogICAgeDI9IjQ2MiIKICAgIHkyPSIxMDAiCiAgICBzdHJva2U9IiNjZjViNWIiCiAgICBzdHJva2Utd2lkdGg9IjMiCiAgLz4KICA8bGluZQogICAgeDE9IjQ2MiIKICAgIHkxPSI3NiIKICAgIHgyPSI0MzgiCiAgICB5Mj0iMTAwIgogICAgc3Ryb2tlPSIjY2Y1YjViIgogICAgc3Ryb2tlLXdpZHRoPSIzIgogIC8+CiAgPHRleHQgeD0iNDUwIiB5PSIxMjgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGNsYXNzPSJibG9ja2VkLWxhYmVsIj4KICAgIE5PIFBBVEggQkFDSwogIDwvdGV4dD4KCiAgPCEtLSBUaWVyIHJlY3RhbmdsZXMgLS0+CiAgPHJlY3QgeD0iNDAiIHk9IjE4NSIgd2lkdGg9IjIxMCIgaGVpZ2h0PSI4MiIgY2xhc3M9InRpZXItc3RhbmRhcmQiIC8+CiAgPHRleHQgeD0iMTQ1IiB5PSIyMTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGNsYXNzPSJ0aWVyLW5hbWUiPlN0YW5kYXJkPC90ZXh0PgogIDx0ZXh0IHg9IjE0NSIgeT0iMjM4IiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBjbGFzcz0idGllci1jb2RlIj4KICAgIChkZWZhdWx0IHRpZXIpCiAgPC90ZXh0PgoKICA8cmVjdCB4PSIzNDUiIHk9IjE4NSIgd2lkdGg9IjIxMCIgaGVpZ2h0PSI4MiIgY2xhc3M9InRpZXItaWEiIC8+CiAgPHRleHQgeD0iNDUwIiB5PSIyMTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGNsYXNzPSJ0aWVyLW5hbWUiPgogICAgSW5mcmVxdWVudCBBY2Nlc3MKICA8L3RleHQ+CiAgPHRleHQgeD0iNDUwIiB5PSIyMzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGNsYXNzPSJ0aWVyLWNvZGUiPgogICAgU3RvcmFnZUNsYXNzOiBTVEFOREFSRF9JQQogIDwvdGV4dD4KCiAgPHJlY3QgeD0iNjUwIiB5PSIxODUiIHdpZHRoPSIyMTAiIGhlaWdodD0iODIiIGNsYXNzPSJ0aWVyLWdsYWNpZXIiIC8+CiAgPHRleHQgeD0iNzU1IiB5PSIyMTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGNsYXNzPSJ0aWVyLW5hbWUiPkdsYWNpZXI8L3RleHQ+CiAgPHRleHQgeD0iNzU1IiB5PSIyMzgiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGNsYXNzPSJ0aWVyLWNvZGUiPgogICAgU3RvcmFnZUNsYXNzOiBHTEFDSUVSCiAgPC90ZXh0PgoKICA8IS0tIEZvcndhcmQgdHJhbnNpdGlvbiBhcnJvd3MgKGVuZCBzaG9ydCBvZiB0aWVyIGVkZ2VzIHRvIGxlYXZlIGJyZWF0aGluZyByb29tKSAtLT4KICA8cGF0aAogICAgZD0iTSAyNTYgMjI2IEwgMzM5IDIyNiIKICAgIGNsYXNzPSJhcnJvdy1mb3J3YXJkIgogICAgbWFya2VyLWVuZD0idXJsKCNhaC1md2QpIgogIC8+CiAgPHRleHQgeD0iMjk3IiB5PSIyMTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGNsYXNzPSJhcnJvdy1sYWJlbCI+CiAgICBUUkFOU0lUSU9OCiAgPC90ZXh0PgoKICA8cGF0aAogICAgZD0iTSA1NjEgMjI2IEwgNjQ0IDIyNiIKICAgIGNsYXNzPSJhcnJvdy1mb3J3YXJkIgogICAgbWFya2VyLWVuZD0idXJsKCNhaC1md2QpIgogIC8+CiAgPHRleHQgeD0iNjAyIiB5PSIyMTYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGNsYXNzPSJhcnJvdy1sYWJlbCI+CiAgICBUUkFOU0lUSU9OCiAgPC90ZXh0PgoKICA8IS0tIEV4cGlyYXRpb24gYXJyb3dzIGZyb20gZWFjaCB0aWVyIGdvaW5nIGRvd24gdG8gRGVsZXRlZCAtLT4KICA8cGF0aAogICAgZD0iTSAxNDUgMjczIEMgMTQ1IDMxNSwgNDEwIDMyNSwgNDMwIDM1MCIKICAgIGNsYXNzPSJhcnJvdy1leHBpcmUiCiAgICBtYXJrZXItZW5kPSJ1cmwoI2FoLWV4cCkiCiAgLz4KICA8cGF0aAogICAgZD0iTSA0NTAgMjczIEwgNDUwIDM1MCIKICAgIGNsYXNzPSJhcnJvdy1leHBpcmUiCiAgICBtYXJrZXItZW5kPSJ1cmwoI2FoLWV4cCkiCiAgLz4KICA8cGF0aAogICAgZD0iTSA3NTUgMjczIEMgNzU1IDMxNSwgNDkwIDMyNSwgNDcwIDM1MCIKICAgIGNsYXNzPSJhcnJvdy1leHBpcmUiCiAgICBtYXJrZXItZW5kPSJ1cmwoI2FoLWV4cCkiCiAgLz4KICA8dGV4dCB4PSI1MTQiIHk9IjMyMCIgY2xhc3M9ImV4cGlyZS1sYWJlbCI+RVhQSVJBVElPTjwvdGV4dD4KCiAgPCEtLSBEZWxldGVkIG5vZGUgLS0+CiAgPHJlY3QgeD0iMzcwIiB5PSIzNTYiIHdpZHRoPSIxNjAiIGhlaWdodD0iNTYiIGNsYXNzPSJ0aWVyLWRlbGV0ZWQiIC8+CiAgPHRleHQgeD0iNDUwIiB5PSIzODEiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGNsYXNzPSJ0aWVyLW5hbWUiIGZpbGw9IiM4ZmEzYjAiPgogICAgRGVsZXRlZAogIDwvdGV4dD4KICA8dGV4dCB4PSI0NTAiIHk9IjQwMCIgdGV4dC1hbmNob3I9Im1pZGRsZSIgY2xhc3M9InRpZXItY29kZSI+CiAgICAoZ29uZSkKICA8L3RleHQ+CgogIDwhLS0gRm9vdGVyIC0tPgogIDx0ZXh0IHg9IjQ1MCIgeT0iNDQyIiB0ZXh0LWFuY2hvcj0ibWlkZGxlIiBjbGFzcz0iZm9vdGVyIj4KICAgIEVhY2ggcnVsZSBkZWZpbmVzIG9uZSB0cmFuc2l0aW9uIChvbmUgZ3JlZW4gYXJyb3cpIHBsdXMgb25lIGV4cGlyYXRpb24KICAgIChvbmUgb3JhbmdlIGFycm93KS4KICA8L3RleHQ+Cjwvc3ZnPgo=)

## A note on what's not here yet[​](#a-note-on-whats-not-here-yet "Direct link to A note on what's not here yet")

Filtering is by key prefix only. Not by object tags. If you've used S3 lifecycle rules in anger, you've probably reached for tag-based filters at some point. "Expire everything tagged `temp`." "Transition objects tagged `cold`." We don't have that yet. Prefix filtering covers most of what people reach for, but if tag filtering is the missing piece for you, tell us in [our Discord](https://community.tigrisdata.com/). That feedback shapes what we build next.

## How to turn it on[​](#how-to-turn-it-on "Direct link to How to turn it on")

Same one-liner as before. The JSON file holds more rules now — up to ten per bucket. That cap is arbitrary; we can raise it if you need more.

```
aws s3api put-bucket-lifecycle-configuration \
  --bucket my-bucket \
  --lifecycle-configuration file://lifecycle.json
```

If your bucket already has data in it, the new rules apply on the next scan, oldest-first — no backfill flag, no migration. Expect the first action within a few minutes, or up to fifteen or twenty if the scheduler just finished a sweep.

If you'd rather click than write JSON, the [Tigris Dashboard](https://console.storage.dev/) has the same controls. The full configuration reference is in the docs: [Object Lifecycle Rules](https://www.tigrisdata.com/docs/buckets/object-lifecycle-rules/) covers transitions, [Object Expiration](https://www.tigrisdata.com/docs/buckets/objects-expiration/) covers deletion, and [Storage Tiers](https://www.tigrisdata.com/docs/objects/tiers/) explains what `STANDARD_IA`, `GLACIER`, and `GLACIER_IA` actually mean.

## Wrapping up[​](#wrapping-up "Direct link to Wrapping up")

Every Minecraft player eventually builds the sorting room because the alternative is chaos. Buckets are no different. Lifecycle rules stop you paying to store the bits that aren't earning their keep.

We've got more on the way: tag-based filtering, and a few things we're not quite ready to talk about yet. Keep your eyes peeled.

Set and forget object storage

Filter by prefix,<br />more hoppers in your bucket;<br />old bytes drift away.

[Get started today!](https://www.tigrisdata.com/docs/get-started/)

**Tags:**

* [Updates](/blog/tags/updates/.md)
* [object storage](/blog/tags/object-storage/.md)
* [s3](/blog/tags/s-3/.md)
* [feature](/blog/tags/feature/.md)
* [lifecycle](/blog/tags/lifecycle/.md)
