You can deploy full-stack applications, including front-end static assets and back-end APIs, as well as server-side rendered pages (SSR), to both Cloudflare [Workers](https://developers.cloudflare.com/workers/static-assets/) and [Pages](https://developers.cloudflare.com/pages/). The compatibility matrix below shows which features are available for each, to help you choose whether to build with Workers or Pages. Unless otherwise stated below, what works in Pages works in Workers, and what works in Workers works in Pages. Think something is missing from this list? [Open a pull request](https://github.com/cloudflare/cloudflare-docs/edit/production/src/content/docs/workers/static-assets/compatibility-matrix.mdx) or [create a GitHub issue](https://github.com/cloudflare/cloudflare-docs/issues/new).

We plan to bridge the gaps between Workers and Pages and provide ways to migrate your Pages projects to Workers.

**Legend**\
✅: Supported\
⏳: Coming soon\
🟡: Unsupported, workaround available\
❌: Unsupported

|                                                                                                                                              | Workers                    | Pages                      |
| -------------------------------------------------------------------------------------------------------------------------------------------- | -------------------------- | -------------------------- |
| **Writing, Testing, and Deploying Code**                                                                                                     |                            |                            |
| [Rollbacks](https://developers.cloudflare.com/workers/configuration/versions-and-deployments/rollbacks/)                                     | ✅                          | ✅                          |
| [Gradual Deployments](https://developers.cloudflare.com/workers/configuration/versions-and-deployments/)                                     | ✅                          | ❌                          |
| [Preview URLs](https://developers.cloudflare.com/workers/configuration/previews)                                                             | ✅                          | ✅                          |
| [Testing tools](https://developers.cloudflare.com/workers/testing)                                                                           | ✅                          | ✅                          |
| [Local Development](https://developers.cloudflare.com/workers/local-development/)                                                            | ✅                          | ✅                          |
| [Remote Development (`--remote`)](https://developers.cloudflare.com/workers/wrangler/commands/)                                              | ✅                          | ❌                          |
| [Quick Editor in Dashboard](https://blog.cloudflare.com/improved-quick-edit)                                                                 | ✅                          | ❌                          |
| **Static Assets**                                                                                                                            |                            |                            |
| [Early Hints](https://developers.cloudflare.com/pages/configuration/early-hints/)                                                            | ❌                          | ✅                          |
| [Custom HTTP headers for static assets](https://developers.cloudflare.com/pages/configuration/headers/)                                      | 🟡 [1](#user-content-fn-1) | ✅                          |
| [Middleware](https://developers.cloudflare.com/workers/static-assets/binding/#run_worker_first)                                              | ✅ [2](#user-content-fn-2)  | ✅                          |
| [Redirects](https://developers.cloudflare.com/pages/configuration/redirects/)                                                                | 🟡 [3](#user-content-fn-3) | ✅                          |
| [Smart Placement](https://developers.cloudflare.com/workers/configuration/smart-placement/)                                                  | ✅                          | ✅                          |
| [Serve assets on a path](https://developers.cloudflare.com/workers/static-assets/routing/)                                                   | ✅                          | ❌                          |
| **Observability**                                                                                                                            |                            |                            |
| [Workers Logs](https://developers.cloudflare.com/workers/observability/)                                                                     | ✅                          | ❌                          |
| [Logpush](https://developers.cloudflare.com/workers/observability/logs/logpush/)                                                             | ✅                          | ❌                          |
| [Tail Workers](https://developers.cloudflare.com/workers/observability/logs/tail-workers/)                                                   | ✅                          | ❌                          |
| [Real-time logs](https://developers.cloudflare.com/workers/observability/logs/real-time-logs/)                                               | ✅                          | ✅                          |
| [Source Maps](https://developers.cloudflare.com/workers/observability/source-maps/)                                                          | ✅                          | ❌                          |
| **Runtime APIs & Compute Models**                                                                                                            |                            |                            |
| [Node.js Compatibility Mode](https://developers.cloudflare.com/workers/runtime-apis/nodejs/)                                                 | ✅                          | ✅                          |
| [Durable Objects](https://developers.cloudflare.com/durable-objects/api/)                                                                    | ✅                          | 🟡 [4](#user-content-fn-4) |
| [Cron Triggers](https://developers.cloudflare.com/workers/configuration/cron-triggers/)                                                      | ✅                          | ❌                          |
| **Bindings**                                                                                                                                 |                            |                            |
| [AI](https://developers.cloudflare.com/workers-ai/get-started/workers-wrangler/#2-connect-your-worker-to-workers-ai)                         | ✅                          | ✅                          |
| [Analytics Engine](https://developers.cloudflare.com/analytics/analytics-engine)                                                             | ✅                          | ✅                          |
| [Assets](https://developers.cloudflare.com/workers/static-assets/binding/)                                                                   | ✅                          | ✅                          |
| [Browser Rendering](https://developers.cloudflare.com/browser-rendering)                                                                     | ✅                          | ✅                          |
| [D1](https://developers.cloudflare.com/d1/worker-api/)                                                                                       | ✅                          | ✅                          |
| [Email Workers](https://developers.cloudflare.com/email-routing/email-workers/send-email-workers/)                                           | ✅                          | ❌                          |
| [Environment Variables](https://developers.cloudflare.com/workers/configuration/environment-variables/)                                      | ✅                          | ✅                          |
| [Hyperdrive](https://developers.cloudflare.com/hyperdrive/)                                                                                  | ✅                          | ✅                          |
| [Image Resizing](https://developers.cloudflare.com/images/transform-images/bindings/)                                                        | ✅                          | ❌                          |
| [KV](https://developers.cloudflare.com/kv/)                                                                                                  | ✅                          | ✅                          |
| [mTLS](https://developers.cloudflare.com/workers/runtime-apis/bindings/mtls/)                                                                | ✅                          | ✅                          |
| [Queue Producers](https://developers.cloudflare.com/queues/configuration/configure-queues/#producer-worker-configuration)                    | ✅                          | ✅                          |
| [Queue Consumers](https://developers.cloudflare.com/queues/configuration/configure-queues/#consumer-worker-configuration)                    | ✅                          | ❌                          |
| [R2](https://developers.cloudflare.com/r2/)                                                                                                  | ✅                          | ✅                          |
| [Rate Limiting](https://developers.cloudflare.com/workers/runtime-apis/bindings/rate-limit/)                                                 | ✅                          | ❌                          |
| [Secrets](https://developers.cloudflare.com/workers/configuration/secrets/)                                                                  | ✅                          | ✅                          |
| [Service bindings](https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/)                                        | ✅                          | ✅                          |
| [Vectorize](https://developers.cloudflare.com/vectorize/get-started/intro/#3-bind-your-worker-to-your-index)                                 | ✅                          | ✅                          |
| **Builds (CI/CD)**                                                                                                                           |                            |                            |
| [Monorepos](https://developers.cloudflare.com/workers/ci-cd/builds/advanced-setups/)                                                         | ✅                          | ✅                          |
| [Build Watch Paths](https://developers.cloudflare.com/workers/ci-cd/builds/build-watch-paths/)                                               | ✅                          | ✅                          |
| [Build Caching](https://developers.cloudflare.com/workers/ci-cd/builds/build-caching/)                                                       | ✅                          | ✅                          |
| [Deploy Hooks](https://developers.cloudflare.com/pages/configuration/deploy-hooks/)                                                          | ❌                          | ✅                          |
| [Branch Deploy Controls](https://developers.cloudflare.com/pages/configuration/branch-build-controls/)                                       | ❌                          | ✅                          |
| [Custom Branch Aliases](https://developers.cloudflare.com/pages/how-to/custom-branch-aliases/)                                               | ❌                          | ✅                          |
| **Pages Functions**                                                                                                                          |                            |                            |
| [File-based Routing](https://developers.cloudflare.com/pages/functions/routing/)                                                             | ❌ [5](#user-content-fn-5)  | ✅                          |
| [Pages Plugins](https://developers.cloudflare.com/pages/functions/plugins/)                                                                  | ❌ [6](#user-content-fn-6)  | ✅                          |
| **Domain Configuration**                                                                                                                     |                            |                            |
| [Custom domains](https://developers.cloudflare.com/workers/configuration/routing/custom-domains/#add-a-custom-domain)                        | ✅                          | ✅                          |
| [Custom subdomains](https://developers.cloudflare.com/workers/configuration/routing/custom-domains/#set-up-a-custom-domain-in-the-dashboard) | ✅                          | ✅                          |
| [Custom domains outside Cloudflare zones](https://developers.cloudflare.com/pages/configuration/custom-domains/#add-a-custom-cname-record)   | ❌                          | ✅                          |
| [Non-root routes](https://developers.cloudflare.com/workers/configuration/routing/routes/)                                                   | ✅                          | ❌                          |

## Footnotes

1. Similar to 3, to customize the HTTP headers that are returned by static assets, you can use [Service bindings](https://developers.cloudflare.com/workers/runtime-apis/bindings/service-bindings/) to connect a Worker in front of the Worker with assets. [↩](#user-content-fnref-1)

2. Middleware can be configured via the [`run_worker_first`](https://developers.cloudflare.com/workers/static-assets/binding/#run_worker_first) option, but is charged as a normal Worker invocation. We plan to explore additional related options in the future. [↩](#user-content-fnref-2)

3. You can handle redirects by adding code to your Worker (a [community package](https://npmjs.com/package/redirects-in-workers) is available for `_redirects` support), or you can use [Bulk Redirects](https://developers.cloudflare.com/rules/url-forwarding/bulk-redirects/). [↩](#user-content-fnref-3)

4. To [use Durable Objects with your Cloudflare Pages project](https://developers.cloudflare.com/pages/functions/bindings/#durable-objects), you must create a separate Worker with a Durable Object and then declare a binding to it in both your Production and Preview environments. Using Durable Objects with Workers is simpler and recommended. [↩](#user-content-fnref-4)

5. Workers [supports popular frameworks](https://developers.cloudflare.com/workers/frameworks/), many of which implement file-based routing. [↩](#user-content-fnref-5)

6. Everything that is possible with Pages Functions can also be achieved by adding code to your Worker or by using framework-specific plugins for relevant third party tools. [↩](#user-content-fnref-6)
