Deploy a Svelte site
Svelte is an increasingly popular, open-source framework for building user interfaces and web applications. Unlike most frameworks, Svelte is primarily a compiler that converts your component code into efficient JavaScript that surgically updates the DOM when your application state changes.
In this guide, you will create a new Svelte application and deploy it using Cloudflare Pages.
You will use SvelteKit
, the official Svelte framework for building web applications of all sizes.
Setting up a new project
Use the create-cloudflare
CLI (C3) to set up a new project. C3 will create a new project directory, initiate Svelte’s official setup tool, and provide the option to deploy instantly.
To use create-cloudflare
to create a new Svelte project, run the following command:
To use create-cloudflare to create a new Svelte project, run the following command:
$ npm create cloudflare@latest my-svelte-app -- --framework=svelte
SvelteKit will prompt you for customization choices. For the template option, choose one of the application/project options. The remaining answers will not affect the rest of this guide. Choose the options that suit your project.
create-cloudflare
will then install dependencies, including the Wrangler CLI and the @sveltejs/adapter-cloudflare
adapter, and ask you setup questions.
After you have installed your project dependencies, start your application:
$ npm run dev
Before you continue
All of the framework guides assume you already have a fundamental understanding of Git. If you are new to Git, refer to this summarized Git handbook on how to set up Git on your local machine.
If you clone with SSH, you must generate SSH keys on each computer you use to push or pull from GitHub.
Refer to the GitHub documentation and Git documentation for more information.
Create a GitHub repository
Create a new GitHub repository by visiting repo.new. After creating a new repository, prepare and push your local application to GitHub by running the following commands in your terminal:
$ git init$ git remote add origin https://github.com/<your-gh-username>/<repository-name>$ git add .$ git commit -m "Initial commit"$ git branch -M main$ git push -u origin main
SvelteKit Cloudflare configuration
To use SvelteKit with Cloudflare Pages, you need to add the Cloudflare adapter to your application.
- Install the Cloudflare Adapter by running
npm i --save-dev @sveltejs/adapter-cloudflare
in your terminal. - Include the adapter in
svelte.config.js
:
svelte.config.js- import adapter from '@sveltejs/adapter-auto';+ import adapter from '@sveltejs/adapter-cloudflare';
/** @type {import('@sveltejs/kit').Config} */const config = { kit: { adapter: adapter(), // ... truncated ... }};
export default config;
- (Needed if you are using TypeScript) Include support for environment variables. The
env
object, containing KV namespaces and other storage objects, is passed to SvelteKit via the platform property along with context and caches, meaning you can access it in hooks and endpoints. For example:
src/app.d.tsdeclare namespace App { interface Locals {}
+ interface Platform {+ env: {+ COUNTER: DurableObjectNamespace;+ };+ context: {+ waitUntil(promise: Promise<any>): void;+ };+ caches: CacheStorage & { default: Cache }+ }
interface Session {}
interface Stuff {}}
- Access the added KV or Durable objects (or generally any binding) in your endpoint with
env
:
export async function post({ request, platform }) {const counter = platform.env.COUNTER.idFromName("A");}
Deploy with Cloudflare Pages
Deploy via the create-cloudflare
CLI (C3)
If you use create-cloudflare
(C3) to create your new Svelte project, C3 will install all dependencies needed for your project and prompt you to deploy your project via the CLI. If you deploy, your site will be live and you will be provided with a deployment URL.
Deploy via the Cloudflare dashboard
- Log in to the Cloudflare dashboard and select your account.
- In Account Home, select Workers & Pages > Create application > Pages > Connect to Git.
You will be asked to authorize access to your GitHub account if you have not already done so. Cloudflare needs this authorization to deploy your projects from your GitHub account. You may narrow Cloudflare’s access to specific repositories. However, you will have to manually update this list within your GitHub settings when you want to add more repositories to Cloudflare Pages.
Select the new GitHub repository that you created and, in Set up builds and deployments, provide the following information:
Configuration option | Value |
---|---|
Production branch | main |
Build command | npm run build |
Build directory | .svelte-kit/cloudflare |
Optionally, you can customize the Project name field. It defaults to the GitHub repository’s name, but it does not need to match. The Project name value is assigned as your *.pages.dev
subdomain.
After completing configuration, click the Save and Deploy button.
You will see your first deploy pipeline in progress. Pages installs all dependencies and builds the project as specified.
Cloudflare Pages will automatically rebuild your project and deploy it on every new pushed commit.
Additionally, you will have access to preview deployments, which repeat the build-and-deploy process for pull requests. With these, you can preview changes to your project with a real URL before deploying them to production.
Functions setup
In SvelteKit, functions are written as endpoints. Functions contained in the /functions
directory at the project’s root will not be included in the deployment, which compiles to a single _worker.js
file.
To have the functionality equivalent to Pages Functions onRequests
, you need to write standard request handlers in SvelteKit. For example, the following TypeScript file behaves like an onRequestGet
:
src/routes/random/+server.tsimport type { RequestHandler } from './$types';
export const GET = (({ url }) => { return new Response(String(Math.random()));
}) satisfies RequestHandler;
Learn more
By completing this guide, you have successfully deployed your Svelte site to Cloudflare Pages. To get started with other frameworks, refer to the list of Framework guides.