This template bootstraps a SvelteKit app on Cloudflare Workers using a custom Worker entry (src/worker.ts) that wraps SvelteKit’s generated Cloudflare worker. It also includes a Durable Object skeleton, optional D1 database binding, and a scheduled job example.
git clone https://github.com/metasanjaya/svelte-cloudflare.git <folder>
cd <folder>
pnpm i
# or
npm i
pnpm dev
This runs the Vite/Svelte dev server only (good for UI work). Cloudflare bindings (D1, Durable Objects, scheduled events) are not available in this mode.
The custom worker imports ./.svelte-kit/cloudflare/_worker.js, which exists only after a SvelteKit build. For live reloading:
_worker.jspnpm build -- --watch
npx wrangler dev src/worker.ts
One-off dev session (no watch):
pnpm build && npx wrangler dev src/worker.ts
pnpm build
npx wrangler deploy src/worker.ts
src/worker.ts expects the following on env:
MY_DURABLE_OBJECT (Durable Object binding for MyDurableObject)DB (D1 database binding)ASSETS (Fetcher; optional — only if you wire a static asset service)npx wrangler d1 create svelte_cloudflare_db
# note the returned database_id and add it to wrangler.toml
# run migrations (example)
npx wrangler d1 execute svelte_cloudflare_db --file ./migrations/001_init.sql --local
[durable_objects] above.[[migrations]]).env.MY_DURABLE_OBJECT.idFromName(name).The example scheduled handler runs every 5 minutes. Adjust crons in wrangler.toml to your needs.
pnpm dev — Svelte dev server (no Cloudflare runtime)pnpm build — Build SvelteKit and generate ./.svelte-kit/cloudflare/_worker.jspnpm preview — Preview the built client/server locallypnpm check — Type and Svelte diagnosticsTip: for CF dev with auto-rebuild, keep two terminals open as shown above.
src/routes — your Svelte pages/componentssrc/worker.ts — custom Cloudflare worker entry that delegates to SvelteKit’s generated worker and adds your own logic (Durable Object, cron, APIs)svelte.config.js, vite.config.ts, tsconfig.json — tooling configpnpm build (or pnpm build -- --watch during dev).@cloudflare/workers-types is installed and tsconfig.json includes "types": ["@cloudflare/workers-types"].npx wrangler login and ensure account_id is set if required for deploy.