Skip to content
GitHubXDiscordRSS

Nuxt

This guide shows how to initialize and deploy a Nuxt 3 application to Cloudflare using Alchemy.

Start by creating a new Nuxt project with Alchemy:

Terminal window
bunx alchemy create my-nuxt-app --template=nuxt
cd my-nuxt-app

Authenticate once with your Cloudflare account:

Terminal window
bun alchemy login

Run the deploy script generated by the template:

Terminal window
bun run deploy

You’ll get the live URL of your Nuxt site:

Terminal window
{
url: "https://website.<your-account>.workers.dev"
}

Work locally using the dev script:

Terminal window
bun run dev

Clean up all Cloudflare resources created by this stack:

Terminal window
bun run destroy

Alchemy requires a locally set password to encrypt Secrets that are stored in state. Be sure to change this.

ALCHEMY_PASSWORD=change-me
/// <reference types="@types/node" />
import alchemy from "alchemy";
import { Nuxt } from "alchemy/cloudflare";
const app = await alchemy("my-nuxt-app");
export const worker = await Nuxt("website");
console.log({
url: worker.url,
});
await app.finalize();
// Auto-generated Cloudflare binding types.
// @see https://alchemy.run/concepts/bindings/#type-safe-bindings
import type { worker } from "../alchemy.run.ts";
export type CloudflareEnv = typeof worker.Env;
declare global {
type Env = CloudflareEnv;
}
declare module "cloudflare:workers" {
namespace Cloudflare {
export interface Env extends CloudflareEnv {}
}
}

The CLI updated the tsconfig.json to include alchemy.run.ts and register @cloudflare/workers-types + types/env.d.ts globally:

{
"extends": "@nuxtjs/module-builder/tsconfig.json",
"include": ["**/*", "alchemy.run.ts"],
"exclude": ["dist"],
"compilerOptions": {
"types": ["@cloudflare/workers-types", "./types/env.d.ts"]
}
}

Use the cloudflare-module preset and nitro-cloudflare-dev module to build for Cloudflare in production and development:

import alchemy from "alchemy/cloudflare/nuxt";
import { defineNuxtConfig } from "nuxt/config";
export default defineNuxtConfig({
devtools: { enabled: true },
nitro: {
preset: "cloudflare-module",
cloudflare: alchemy(),
prerender: {
routes: ["/"],
autoSubfolderIndex: false,
},
},
modules: ["nitro-cloudflare-dev"],
});

If you run nuxt dev without first running Alchemy, you will get an error from nitroCloudflareDev(). This is because Alchemy needs to be run first to create the local environment. We recommend running alchemy dev, which runs nuxt dev automatically.