---
url: /api/symbols/workbox-swkit/expiration/expirationplugin.md
---

# ExpirationPlugin

Class @vite-pwa/workbox-swkit/expiration

This plugin can be used in a `workbox-strategy` to regularly enforce a
limit on the age and / or the number of cached requests.

It can only be used with `workbox-strategy` instances that have a
[custom `cacheName` property set](/web/tools/workbox/guides/configure-workbox#custom_cache_names_in_strategies).
In other words, it can't be used to expire entries in strategy that uses the
default runtime cache name.

Whenever a cached response is used or updated, this plugin will look
at the associated cache and remove any old or extra responses.

When using `maxAgeSeconds`, responses may be used *once* after expiring
because the expiration clean up will not have occurred until *after* the
cached response has been used. If the response has a "Date" header, then
a light weight expiration check is performed and the response will not be
used immediately.

When using `maxEntries`, the entry least-recently requested will be removed
from the cache first.

## Constructor

```ts
new ExpirationPlugin(config: ExpirationPluginOptions)
```

## Methods

### deleteCacheAndMetadata()

```ts
deleteCacheAndMetadata(): Promise<void>
```

This is a helper method that performs two operations:

* Deletes *all* the underlying Cache instances associated with this plugin
  instance, by calling caches.delete() on your behalf.
* Deletes the metadata from IndexedDB used to keep track of expiration
  details for each Cache instance.

When using cache expiration, calling this method is preferable to calling
`caches.delete()` directly, since this will ensure that the IndexedDB
metadata is also cleanly removed and open IndexedDB instances are deleted.

Note that if you're *not* using cache expiration for a given cache, calling
`caches.delete()` and passing in the cache's name should be sufficient.
There is no Workbox-specific method needed for cleanup in that case.
