Skip to content

SvelteKit

GCP.Website.SvelteKit deploys a SvelteKit app to Cloud Run. Kit’s server runs in the container. Static assets are served first, then the rest goes to your routes.

The build integration ships separately. It only runs at deploy time, so a dev dependency is enough:

Terminal window
pnpm add -D @alchemy.run/frontend-frameworks@latest

Docker has to be running when you deploy. The image is built on your machine.

alchemy.run.ts
import * as Alchemy from "alchemy";
import * as GCP from "@alchemy.run/gcp";
import * as Effect from "effect/Effect";
export const Website = GCP.Website.SvelteKit("Website");
export default Alchemy.Stack(
"MySite",
{ providers: GCP.providers(), state: GCP.state() },
Effect.gen(function* () {
const site = yield* Website;
return { url: site.url };
}),
);

Run alchemy deploy. site.url is the Cloud Run service URL.

alchemy.run.ts
export const Website = GCP.Website.SvelteKit("Website");
export const Website = GCP.Website.SvelteKit("Website", {
env: {
GREETING: "Hello from Cloud Run!",
},
});

Server code reads it from process.env.GREETING.

Your vite.config.ts loads as-is and needs no adapter. Pass kit options with the kit prop:

export const Website = GCP.Website.SvelteKit("Website", {
kit: { paths: { base: "/app" } },
});

Alchemy sets adapter. Don’t set it yourself.

export const Website = GCP.Website.SvelteKit("Website", {
scaling: { minInstanceCount: 1 },
resources: { limits: { cpu: "1", memory: "1Gi" } },
});

One warm instance means no cold start for the first visitor. See Websites for the other settings.

alchemy dev runs the framework’s dev server with hot reload and creates nothing in the cloud. Wrap the site in Alchemy.remote() to deploy it for real during dev.