---
title: "Check for Update Strategy"
description: "Choose the best update detection strategy for your platform."
canonical_url: "https://nuxtseo.com/docs/skew-protection/guides/update-strategies"
last_updated: "2026-09-04T03:07:41.359Z"
---

When you deploy a new version of your Nuxt app we need to notify active users of the new version. By default, Nuxt applies a polling strategy, checking every hour if the build is out of date.

Alternative strategies like Server-Sent Events (SSE), WebSockets, and external providers provide real-time notifications, but have different platform compatibilities and performance trade-offs.

| Strategy                    | Real-time | Platforms             | Server Load       | Client Connections  |
| --------------------------- | --------- | --------------------- | ----------------- | ------------------- |
| **[Polling](#polling)**     | ❌ Delayed | ✅ All                 | ✅ Minimal         | ✅ None              |
| **[SSE](#sse)**             | ✅ Instant | ⚠️ Node.js/Bun/Deno   | ⚠️ Low            | ⚠️ Persistent       |
| **[WebSocket](#websocket)** | ✅ Instant | ⚠️ Cloudflare Durable | ⚠️ Moderate       | ⚠️ Persistent       |
| **[Adapter](#adapter)**     | ✅ Instant | ✅ All (incl. Static)  | ✅ None (external) | ✅ External provider |

## Performance Considerations

SSE and [WebSocket](https://developer.mozilla.org/en-US/docs/Web/API/WebSocket) strategies maintain persistent connections on your server. For **high-traffic applications** (10,000+ concurrent users), using an [Adapter](#adapter) with external providers like Ably or Pusher may be worthwhile.

::note
The module automatically excludes bot traffic from connections when you install `@nuxtjs/robots`. See [Bot Traffic Filtering](/docs/skew-protection/guides/performance#bot-traffic-filtering).
::

See the [Performance Guide](/docs/skew-protection/guides/performance) for more details.

## Platform Defaults

The module automatically selects the best strategy based on your deployment platform, but you can override it in your configuration using
[`updateStrategy`](/docs/skew-protection/api/config#updatestrategy-polling--sse--ws).

| Provider               | updateStrategy                   |
| ---------------------- | -------------------------------- |
| **Node.js**            | `sse`                            |
| **Bun**                | `sse`                            |
| **Deno**               | `sse`                            |
| **Vercel**             | `sse`                            |
| **Cloudflare Workers** | `polling`                        |
| **Cloudflare Durable** | `ws`                             |
| **Netlify**            | `sse`                            |
| **Static/Prerendered** | `polling` or [adapter](#adapter) |

Note: For `ws` strategy, you must enable `nuxt.options.nitro.experimental.websocket`.

## Polling

The default strategy that works on **all platforms**. Uses Nuxt's built-in `experimental.checkOutdatedBuildInterval` to periodically fetch `builds/latest.json`
to determine if a new deployment has occurred.

Update `checkOutdatedBuildInterval` to a quicker polling interval - 1 hour is too slow for most applications.

```ts [nuxt.config.ts]
export default defineNuxtConfig({
  skewProtection: {
    updateStrategy: 'polling'
  },
  experimental: {
    checkOutdatedBuildInterval: 5 * 60 * 1000 // 5 minutes
  }
})
```

## SSE

Real-time updates using **Server-Sent Events**. SSE does keep persistent connections open. Be mindful of this if you have a high-traffic site.
SSE has less overhead than WebSockets.

```ts [nuxt.config.ts]
export default defineNuxtConfig({
  skewProtection: {
    updateStrategy: 'sse'
  }
})
```

## WebSocket

Real-time updates using **WebSockets**. SSE is generally more efficient, but for certain
conditions like using Cloudflare Workers and some proxying services, WebSockets may be the best option.

```ts [Cloudflare Durable Objects]
export default defineNuxtConfig({
  nitro: {
    preset: 'cloudflare-durable',
    experimental: {
      websocket: true
    }
  },
  skewProtection: {
    updateStrategy: 'ws'
  }
})
```

## Adapter

Adapters allow you to use **external WebSocket providers** for real-time update notifications. This is ideal for **static/prerendered sites** or when you want to offload connection management to a third-party service.

Available adapters:

- [Pusher](/docs/skew-protection/providers/external#pusher)
- [Ably](/docs/skew-protection/providers/external#ably)
- [Custom](/docs/skew-protection/providers/external#custom-adapters)

```ts [nuxt.config.ts]
import { pusherAdapter } from 'nuxt-skew-protection/adapters/pusher'

export default defineNuxtConfig({
  skewProtection: {
    updateStrategy: pusherAdapter({
      key: process.env.PUSHER_KEY,
      cluster: process.env.PUSHER_CLUSTER,
      appId: process.env.PUSHER_APP_ID,
      secret: process.env.PUSHER_SECRET,
    })
  }
})
```

See [External Providers](/docs/skew-protection/providers/external) for detailed setup guides.