
Deploying a Nuxt application in 2025 comes down to a choice between three main platforms: Cloudflare, Vercel, and Netlify. Each has its strengths, but for Nuxt developers, the situation has evolved: Cloudflare is merging Pages and Workers into a single platform, and this impacts how we deploy projects.
In this article, we'll analyze each platform from a Vue/Nuxt developer's perspective: how to set it up, how much it costs, and when to choose each option.
Cloudflare is actively merging Pages and Workers into a unified platform. During Developer Week 2025, they made it clear: Workers is the future. Pages will continue to function, but all new features, optimizations, and development are focused on Workers.
What this means in practice:
Cloudflare Workers run on V8 isolates—lightweight, isolated environments that start in milliseconds. These aren't containers like in traditional serverless platforms, so there's no typical cold start.
For Nuxt, this means:
NuxtHub is the official module from the Nuxt team for deploying to Cloudflare. It automates the creation of D1, R2, KV, and the deployment itself.
# Create a project
npx nuxthub init my-app
cd my-app
# Deploy
npx nuxthub deploy
The configuration is minimal:
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxthub/core'],
hub: {
database: true, // D1
kv: true, // KV storage
blob: true // R2 storage
}
})
To deploy to Workers (instead of Pages), add:
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxthub/core'],
hub: {
workers: true // deploy to Workers instead of Pages
}
})
Important: NuxtHub Admin is shutting down on December 31, 2025. The recommendation is to switch to self-hosting with GitHub Actions or Wrangler. The @nuxthub/core module will remain and is under active development.
For a Nuxt Content v3 project on Cloudflare Workers without NuxtHub, all configuration is done in nuxt.config.ts:
// nuxt.config.ts
export default defineNuxtConfig({
modules: ['@nuxt/content'],
compatibilityDate: '2025-01-01',
nitro: {
preset: 'cloudflare_module',
cloudflare: {
deployConfig: true, // auto-generate wrangler config
wrangler: {
d1_databases: [{
binding: 'DB',
database_name: 'my-content-db',
database_id: 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'
}]
}
}
}
})
To deploy:
npx nuxt build
npx wrangler deploy
A separate wrangler.jsonc file is not needed—Nitro will generate it automatically with deployConfig: true.
unenv.Vercel, the creators of Next.js, is the most popular platform in the React ecosystem. Nuxt is supported, but it's not their top priority.
Zero-config—Nuxt is detected automatically:
// nuxt.config.ts — nothing extra needed
export default defineNuxtConfig({
// Vercel will detect the preset automatically
})
Connect your GitHub repository in the Vercel Dashboard, and you're done.
Netlify is a pioneer of the Jamstack, optimized for static sites.
// nuxt.config.ts
export default defineNuxtConfig({
nitro: {
preset: 'netlify'
}
})
Connect your repo and set the build command to nuxt build.
| Cloudflare Workers | Vercel | Netlify | |
|---|---|---|---|
| Edge locations | 300+ | 30+ | 100+ |
| Cold start | ~0ms | ~250ms | ~300ms |
| SSR TTFB | 20-50ms | 50-100ms | 80-150ms |
| SQLite/D1 | ✅ | ❌ | ❌ |
| KV Storage | ✅ | ✅ (Edge Config) | ❌ |
| Blob Storage | ✅ R2 | ✅ Vercel Blob | ✅ |
| WebSockets | ✅ Durable Objects | ❌ | ❌ |
| Nuxt Content v3 | ⭐⭐⭐⭐⭐ | ⭐⭐⭐ | ⭐⭐⭐ |
| Forms | ❌ | ❌ | ✅ |
| Platform | What's Included |
|---|---|
| Cloudflare | 100k requests/day, 5GB D1, 10GB R2 |
| Vercel | 100GB bandwidth, 100 function hours |
| Netlify | 100GB bandwidth, 125k function calls |
| Platform | Estimated Cost |
|---|---|
| Cloudflare | ~$5-15/month |
| Vercel | $20 + $100-200 in overages |
| Netlify | $19 + $100-300 in overages |
Cloudflare wins on price—you pay for requests, not bandwidth.
Cloudflare Workers if:
Vercel if:
Netlify if:
For Nuxt in 2025, the recommendation is Cloudflare Workers + NuxtHub. You get edge SSR with no cold starts, D1 for Nuxt Content, and the best pricing at scale.
Vercel is a great choice for a quick start if you don't want to deal with Cloudflare's setup.