---
title: CacheCustom
description: >-
  This allows you to create your own caching strategy, using any of the options
  available in a CachingStrategy object.
api_version: 2026-04
source_url:
  html: 'https://shopify.dev/docs/api/hydrogen/latest/utilities/caching/cachecustom'
  md: >-
    https://shopify.dev/docs/api/hydrogen/latest/utilities/caching/cachecustom.md
---

# CacheCustom

This allows you to create your own caching strategy, using any of the options available in a `CachingStrategy` object.

Learn more about [data fetching in Hydrogen](https://shopify.dev/docs/custom-storefronts/hydrogen/data-fetching/fetch-data).

## cache​Custom(**[overrideOptions](#arguments-propertydetail-overrideoptions)**​)

### Parameters

* **overrideOptions**

  **AllCacheOptions**

  **required**

### Returns

* **AllCacheOptions**

### AllCacheOptions

Override options for a cache strategy.

* maxAge

  The maximum amount of time in seconds that a resource will be considered fresh. See \`max-age\` in the \[MDN docs]\(https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#:\~:text=Response%20Directives-,max%2Dage,-The%20max%2Dage).

  ```ts
  number
  ```

* mode

  The caching mode, generally \`public\`, \`private\`, or \`no-store\`.

  ```ts
  string
  ```

* sMaxAge

  Similar to \`maxAge\` but specific to shared caches. See \`s-maxage\` in the \[MDN docs]\(https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#s-maxage).

  ```ts
  number
  ```

* staleIfError

  Indicate that the cache should serve the stale response if an error occurs while revalidating the cache. See \`stale-if-error\` in the \[MDN docs]\(https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#stale-if-error).

  ```ts
  number
  ```

* staleWhileRevalidate

  Indicate that the cache should serve the stale response in the background while revalidating the cache. See \`stale-while-revalidate\` in the \[MDN docs]\(https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Cache-Control#stale-while-revalidate).

  ```ts
  number
  ```

Examples

### Examples

* #### Example code

  ##### JavaScript

  ```js
  import {CacheCustom} from '@shopify/hydrogen';

  export async function loader({context}) {
    const data = await context.storefront.query(
      `#grahpql
        {
          shop {
            name
            description
          }
        }
      `,
      {
        cache: CacheCustom({
          maxAge: 60 * 60 * 24 * 365,
          staleWhileRevalidate: 60 * 60 * 24 * 7,
        }),
      },
    );

    return data;
  }
  ```

  ##### TypeScript

  ```ts
  import {type LoaderFunctionArgs} from 'react-router';
  import {CacheCustom} from '@shopify/hydrogen';

  export async function loader({context}: LoaderFunctionArgs) {
    const data = await context.storefront.query(
      `#grahpql
        {
          shop {
            name
            description
          }
        }
      `,
      {
        cache: CacheCustom({
          maxAge: 60 * 60 * 24 * 365,
          staleWhileRevalidate: 60 * 60 * 24 * 7,
        }),
      },
    );

    return data;
  }
  ```

***

## Related

[- createStorefrontClient](https://shopify.dev/docs/api/hydrogen/2026-04/utilities/createstorefrontclient)

[- CacheNone](https://shopify.dev/docs/api/hydrogen/2026-04/utilities/caching/cachenone)

[- CacheShort](https://shopify.dev/docs/api/hydrogen/2026-04/utilities/caching/cacheshort)

[- CacheLong](https://shopify.dev/docs/api/hydrogen/2026-04/utilities/caching/cachelong)

***
