[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"post-deploying-nuxt3-cloudflare-workers":3,"parsed-post-de79638e-57cf-4565-a6d1-ba260f32a146":86,"header-categories":303},{"success":4,"data":5},true,{"id":6,"slug":7,"title":8,"excerpt":9,"content":10,"status":11,"visibility":12,"featuredImage":13,"canonicalUrl":14,"readingTime":15,"viewCount":16,"commentEnabled":4,"publishedAt":17,"scheduledAt":14,"createdAt":18,"updatedAt":19,"seoTitle":20,"seoDescription":9,"seoKeywords":14,"authorId":21,"author":22,"coAuthors":27,"tags":28,"categories":44,"comments":53,"_count":54,"relatedPosts":56},"de79638e-57cf-4565-a6d1-ba260f32a146","deploying-nuxt3-cloudflare-workers","Deploying Nuxt 3 to Cloudflare Workers: The Complete Guide","Deploy your Nuxt 3 app to the edge with Cloudflare Workers — zero cold starts, global distribution, and generous free tier.","## Why Cloudflare Workers?\n\n- **No cold starts** — V8 isolates, not containers\n- **Global by default** — Runs in 300+ locations\n- **Generous free tier** — 100,000 requests\u002Fday free\n- **First-class Nuxt support** — Native preset\n\n## Setup\n\n```bash\n# In your Nuxt project\npnpm add -D wrangler\n```\n\nConfigure the preset:\n\n```typescript\n\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  nitro: {\n    preset: 'cloudflare-pages',\n  },\n})\n```\n\nCreate a wrangler config:\n\n```toml\n# wrangler.toml\nname = \"my-nuxt-app\"\ncompatibility_date = \"2024-01-01\"\npages_build_output_dir = \".output\u002Fpublic\"\n\n[vars]\nNUXT_PUBLIC_SITE_URL = \"https:\u002F\u002Fmyapp.pages.dev\"\n```\n\n## Build and Deploy\n\n```bash\n# Build for Cloudflare\npnpm build\n\n# Preview locally (uses miniflare)\npnpm wrangler pages dev .output\u002Fpublic\n\n# Deploy\npnpm wrangler pages deploy .output\u002Fpublic\n```\n\n## Environment Variables and Secrets\n\n```bash\n# Set secrets (never committed to code)\nwrangler pages secret put DATABASE_URL\nwrangler pages secret put AUTH_SECRET\n```\n\nAccess them in server routes:\n\n```typescript\nexport default defineEventHandler((event) => {\n  const { DATABASE_URL } = event.context.cloudflare.env\n  \u002F\u002F or use process.env.DATABASE_URL (Nuxt handles mapping)\n})\n```\n\n::callout{icon=\"i-lucide-globe\" color=\"success\"}\nYour app is now running on the edge — every request is handled by the nearest Cloudflare data center to your user. Response times drop to single-digit milliseconds for cached content.\n::\n\n## Bindings: D1, R2, KV\n\nCloudflare offers edge-native services:\n\n```toml\n# wrangler.toml\n[[d1_databases]]\nbinding = \"DB\"\ndatabase_name = \"my-db\"\ndatabase_id = \"xxx\"\n\n[[r2_buckets]]\nbinding = \"STORAGE\"\nbucket_name = \"uploads\"\n\n[[kv_namespaces]]\nbinding = \"CACHE\"\nid = \"xxx\"\n```\n\n## CI\u002FCD with GitHub Actions\n\n```yaml\nname: Deploy\non:\n  push:\n    branches: [main]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - uses: pnpm\u002Faction-setup@v2\n      - run: pnpm install\n      - run: pnpm build\n      - uses: cloudflare\u002Fpages-action@v1\n        with:\n          apiToken: ${{ secrets.CF_API_TOKEN }}\n          accountId: ${{ secrets.CF_ACCOUNT_ID }}\n          projectName: my-nuxt-app\n          directory: .output\u002Fpublic\n```\n\nEdge deployment is the future. With Nuxt and Cloudflare, you're already there.\n","published","public","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1461749280684-dccba630e2f6?w=1200&q=80",null,8,2064,"2026-06-13T06:03:35.319Z","2026-07-24T06:03:35.322Z","2026-07-28T17:11:51.278Z","Deploying Nuxt 3 to Cloudflare Workers: The Complete Guide | BitBlog","fddb5d93-7a2c-4d86-a06a-fa32e73a01c6",{"email":23,"bio":24,"id":21,"name":25,"avatarUrl":26},"mbeahessilfieprince@gmail.com","Fullstack Software Developer ","Mbeah Essilfie","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F93322394?v=4",[],[29,34,39],{"id":30,"name":31,"color":32,"description":33},"nuxt","Nuxt","#00dc82","The Intuitive Vue Framework",{"id":35,"name":36,"color":37,"description":38},"devops","DevOps","#ff6c37","Development and Operations",{"id":40,"name":41,"color":42,"description":43},"performance","Performance","#e535ab","Web performance optimization",[45,49],{"id":46,"name":47,"description":48},"devops-cloud","DevOps & Cloud","Infrastructure, deployment, and cloud computing",{"id":50,"name":51,"description":52},"tutorials","Tutorials","Step-by-step learning guides",[],{"comments":55},0,[57,66,76],{"id":58,"slug":59,"title":60,"excerpt":61,"featuredImage":62,"viewCount":63,"readingTime":15,"publishedAt":64,"author":65},"2997028f-4d22-4eb7-9d86-894a54cb559a","building-type-safe-apis-nuxt3-prisma","Building Type-Safe APIs with Nuxt 3 and Prisma","Learn how to build end-to-end type-safe APIs using Nuxt 3 server routes and Prisma ORM for a seamless developer experience.","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1498050108023-c5249f4df085?w=1200&q=80",1922,"2026-07-23T06:02:46.910Z",{"id":21,"name":25,"avatarUrl":26},{"id":67,"slug":68,"title":69,"excerpt":70,"featuredImage":71,"viewCount":72,"readingTime":73,"publishedAt":74,"author":75},"da9e4553-8b0d-411e-b4ec-f9684017e163","mastering-tailwind-css-design-systems","Mastering Tailwind CSS: From Utility Classes to Design Systems","Go beyond basic utility classes and learn how to build cohesive, maintainable design systems with Tailwind CSS.","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1555066931-4365d14bab8c?w=1200&q=80",257,10,"2026-07-21T06:02:49.268Z",{"id":21,"name":25,"avatarUrl":26},{"id":77,"slug":78,"title":79,"excerpt":80,"featuredImage":81,"viewCount":82,"readingTime":83,"publishedAt":84,"author":85},"50add5fc-4026-4267-b917-7f71ea9e35b0","complete-guide-vue3-composables","The Complete Guide to Vue 3 Composables","Understand the power of Vue 3's Composition API through practical, real-world composable patterns that you can use today.","https:\u002F\u002Fimages.unsplash.com\u002Fphoto-1517694712202-14dd9538aa97?w=1200&q=80",990,12,"2026-07-19T06:02:51.753Z",{"id":21,"name":25,"avatarUrl":26},{"data":87,"body":89,"toc":294},{"title":88,"description":88},"",{"type":90,"children":91},"root",[92,101,147,153,166,172,182,187,197,203,211,217,225,230,238,249,255,260,268,274,284,289],{"type":93,"tag":94,"props":95,"children":97},"element","h2",{"id":96},"why-cloudflare-workers",[98],{"type":99,"value":100},"text","Why Cloudflare Workers?",{"type":93,"tag":102,"props":103,"children":104},"ul",{},[105,117,127,137],{"type":93,"tag":106,"props":107,"children":108},"li",{},[109,115],{"type":93,"tag":110,"props":111,"children":112},"strong",{},[113],{"type":99,"value":114},"No cold starts",{"type":99,"value":116}," — V8 isolates, not containers",{"type":93,"tag":106,"props":118,"children":119},{},[120,125],{"type":93,"tag":110,"props":121,"children":122},{},[123],{"type":99,"value":124},"Global by default",{"type":99,"value":126}," — Runs in 300+ locations",{"type":93,"tag":106,"props":128,"children":129},{},[130,135],{"type":93,"tag":110,"props":131,"children":132},{},[133],{"type":99,"value":134},"Generous free tier",{"type":99,"value":136}," — 100,000 requests\u002Fday free",{"type":93,"tag":106,"props":138,"children":139},{},[140,145],{"type":93,"tag":110,"props":141,"children":142},{},[143],{"type":99,"value":144},"First-class Nuxt support",{"type":99,"value":146}," — Native preset",{"type":93,"tag":94,"props":148,"children":150},{"id":149},"setup",[151],{"type":99,"value":152},"Setup",{"type":93,"tag":154,"props":155,"children":160},"pre",{"className":156,"code":157,"language":158,"meta":88,"style":159},"language-bash","# In your Nuxt project\npnpm add -D wrangler\n","bash","undefined",[161],{"type":93,"tag":162,"props":163,"children":164},"code",{"__ignoreMap":88},[165],{"type":99,"value":157},{"type":93,"tag":167,"props":168,"children":169},"p",{},[170],{"type":99,"value":171},"Configure the preset:",{"type":93,"tag":154,"props":173,"children":177},{"className":174,"code":175,"language":176,"meta":88,"style":159},"language-typescript","\u002F\u002F nuxt.config.ts\nexport default defineNuxtConfig({\n  nitro: {\n    preset: 'cloudflare-pages',\n  },\n})\n","typescript",[178],{"type":93,"tag":162,"props":179,"children":180},{"__ignoreMap":88},[181],{"type":99,"value":175},{"type":93,"tag":167,"props":183,"children":184},{},[185],{"type":99,"value":186},"Create a wrangler config:",{"type":93,"tag":154,"props":188,"children":192},{"className":189,"code":190,"language":191,"meta":88,"style":159},"language-toml","# wrangler.toml\nname = \"my-nuxt-app\"\ncompatibility_date = \"2024-01-01\"\npages_build_output_dir = \".output\u002Fpublic\"\n\n[vars]\nNUXT_PUBLIC_SITE_URL = \"https:\u002F\u002Fmyapp.pages.dev\"\n","toml",[193],{"type":93,"tag":162,"props":194,"children":195},{"__ignoreMap":88},[196],{"type":99,"value":190},{"type":93,"tag":94,"props":198,"children":200},{"id":199},"build-and-deploy",[201],{"type":99,"value":202},"Build and Deploy",{"type":93,"tag":154,"props":204,"children":206},{"className":156,"code":205,"language":158,"meta":88,"style":159},"# Build for Cloudflare\npnpm build\n\n# Preview locally (uses miniflare)\npnpm wrangler pages dev .output\u002Fpublic\n\n# Deploy\npnpm wrangler pages deploy .output\u002Fpublic\n",[207],{"type":93,"tag":162,"props":208,"children":209},{"__ignoreMap":88},[210],{"type":99,"value":205},{"type":93,"tag":94,"props":212,"children":214},{"id":213},"environment-variables-and-secrets",[215],{"type":99,"value":216},"Environment Variables and Secrets",{"type":93,"tag":154,"props":218,"children":220},{"className":156,"code":219,"language":158,"meta":88,"style":159},"# Set secrets (never committed to code)\nwrangler pages secret put DATABASE_URL\nwrangler pages secret put AUTH_SECRET\n",[221],{"type":93,"tag":162,"props":222,"children":223},{"__ignoreMap":88},[224],{"type":99,"value":219},{"type":93,"tag":167,"props":226,"children":227},{},[228],{"type":99,"value":229},"Access them in server routes:",{"type":93,"tag":154,"props":231,"children":233},{"className":174,"code":232,"language":176,"meta":88,"style":159},"export default defineEventHandler((event) => {\n  const { DATABASE_URL } = event.context.cloudflare.env\n  \u002F\u002F or use process.env.DATABASE_URL (Nuxt handles mapping)\n})\n",[234],{"type":93,"tag":162,"props":235,"children":236},{"__ignoreMap":88},[237],{"type":99,"value":232},{"type":93,"tag":239,"props":240,"children":243},"callout",{"color":241,"icon":242},"success","i-lucide-globe",[244],{"type":93,"tag":167,"props":245,"children":246},{},[247],{"type":99,"value":248},"Your app is now running on the edge — every request is handled by the nearest Cloudflare data center to your user. Response times drop to single-digit milliseconds for cached content.",{"type":93,"tag":94,"props":250,"children":252},{"id":251},"bindings-d1-r2-kv",[253],{"type":99,"value":254},"Bindings: D1, R2, KV",{"type":93,"tag":167,"props":256,"children":257},{},[258],{"type":99,"value":259},"Cloudflare offers edge-native services:",{"type":93,"tag":154,"props":261,"children":263},{"className":189,"code":262,"language":191,"meta":88,"style":159},"# wrangler.toml\n[[d1_databases]]\nbinding = \"DB\"\ndatabase_name = \"my-db\"\ndatabase_id = \"xxx\"\n\n[[r2_buckets]]\nbinding = \"STORAGE\"\nbucket_name = \"uploads\"\n\n[[kv_namespaces]]\nbinding = \"CACHE\"\nid = \"xxx\"\n",[264],{"type":93,"tag":162,"props":265,"children":266},{"__ignoreMap":88},[267],{"type":99,"value":262},{"type":93,"tag":94,"props":269,"children":271},{"id":270},"cicd-with-github-actions",[272],{"type":99,"value":273},"CI\u002FCD with GitHub Actions",{"type":93,"tag":154,"props":275,"children":279},{"className":276,"code":277,"language":278,"meta":88,"style":159},"language-yaml","name: Deploy\non:\n  push:\n    branches: [main]\n\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions\u002Fcheckout@v4\n      - uses: pnpm\u002Faction-setup@v2\n      - run: pnpm install\n      - run: pnpm build\n      - uses: cloudflare\u002Fpages-action@v1\n        with:\n          apiToken: ${{ secrets.CF_API_TOKEN }}\n          accountId: ${{ secrets.CF_ACCOUNT_ID }}\n          projectName: my-nuxt-app\n          directory: .output\u002Fpublic\n","yaml",[280],{"type":93,"tag":162,"props":281,"children":282},{"__ignoreMap":88},[283],{"type":99,"value":277},{"type":93,"tag":167,"props":285,"children":286},{},[287],{"type":99,"value":288},"Edge deployment is the future. With Nuxt and Cloudflare, you're already there.",{"type":93,"tag":290,"props":291,"children":292},"style",{},[293],{"type":99,"value":88},{"title":88,"searchDepth":295,"depth":295,"links":296},2,[297,298,299,300,301,302],{"id":96,"depth":295,"text":100},{"id":149,"depth":295,"text":152},{"id":199,"depth":295,"text":202},{"id":213,"depth":295,"text":216},{"id":251,"depth":295,"text":254},{"id":270,"depth":295,"text":273},{"success":4,"data":304},{"items":305,"pagination":362},[306,314,322,330,338,343,351,355],{"id":307,"name":308,"description":309,"parentId":14,"createdAt":310,"updatedAt":310,"parent":14,"children":311,"_count":312},"ai-future","AI & The Future","Artificial intelligence and emerging technology","2026-07-24T06:02:45.990Z",[],{"posts":313},1,{"id":315,"name":316,"description":317,"parentId":14,"createdAt":318,"updatedAt":318,"parent":14,"children":319,"_count":320},"tools-productivity","Tools & Productivity","Developer tools and workflow optimization","2026-07-24T06:02:45.712Z",[],{"posts":321},7,{"id":323,"name":324,"description":325,"parentId":14,"createdAt":326,"updatedAt":326,"parent":14,"children":327,"_count":328},"career","Career & Growth","Professional development for developers","2026-07-24T06:02:45.486Z",[],{"posts":329},3,{"id":331,"name":332,"description":333,"parentId":14,"createdAt":334,"updatedAt":334,"parent":14,"children":335,"_count":336},"opinion","Opinion & Analysis","Industry analysis and technical opinions","2026-07-24T06:02:45.272Z",[],{"posts":337},6,{"id":50,"name":51,"description":52,"parentId":14,"createdAt":339,"updatedAt":339,"parent":14,"children":340,"_count":341},"2026-07-24T06:02:44.965Z",[],{"posts":342},21,{"id":344,"name":345,"description":346,"parentId":14,"createdAt":347,"updatedAt":347,"parent":14,"children":348,"_count":349},"software-engineering","Software Engineering","Best practices, patterns, and principles","2026-07-24T06:02:44.689Z",[],{"posts":350},24,{"id":46,"name":47,"description":48,"parentId":14,"createdAt":352,"updatedAt":352,"parent":14,"children":353,"_count":354},"2026-07-24T06:02:44.453Z",[],{"posts":337},{"id":356,"name":357,"description":358,"parentId":14,"createdAt":359,"updatedAt":359,"parent":14,"children":360,"_count":361},"web-development","Web Development","Frontend and backend web development tutorials and guides","2026-07-24T06:02:44.169Z",[],{"posts":350},{"page":313,"limit":15,"total":15,"totalPages":313,"hasNext":363,"hasPrev":363},false]