Cloudflare Docs
Pages
Visit Pages on GitHub
Set theme to dark (⇧+D)

Deploy an Astro site

Astro is an all-in-one web framework for building fast, content-focused websites. By default, Astro builds websites that have zero JavaScript runtime code.

Refer to the Astro Docs to learn more about Astro or for assistance with an Astro project.

In this guide, you will create a new Astro application and deploy it using Cloudflare Pages.

​​ Setting up a new project

Create a new project directory and then initiate Astro’s official setup tool by running:

$ npm create astro@latest
# cd into created project
$ cd <project-name>

Astro will ask you which project type you would like to set up. Your answers will not affect the rest of this tutorial. Select an answer ideal for your project.

​​ 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.

​​ Creating a GitHub repository

Create a new GitHub repository by visiting repo.new. After your repository is set up, push your application to GitHub by running the following commands in your terminal:

# Setup the local repository
$ git init
$ git remote add origin https://github.com/<username>/<repo>
$ git branch -M main
# Commit all initial files
$ git add -A
$ git commit -m "initial commit"
# Send commit to new GitHub repo
$ git push -u origin main

​​ Using Pages Functions

Pages Functions enable you to run server-side code to add dynamic functionality without running a dedicated server.

To get started, create a functions directory at the root of your project. Writing your Functions files in this directory automatically generates a Worker with custom functionality at the predesignated routes. To learn more, refer toPages Functions.

​​ Astro Configuration

You can deploy an Astro Server-side Rendered (SSR) site to Cloudflare Pages using the @astrojs/cloudflare adapter. SSR sites render on Pages Functions and allow for dynamic functionality and customizations.

To enable an SSR site and deploy to Cloudflare Pages, add the @astrojs/cloudflare adapter to your project’s package.json by running:

$ npm run astro add cloudflare

​​ Modes

There are currently two modes supported when using Pages Functions with the @astrojs/cloudflare adapter.

  1. Advanced mode: This mode is used when you want to run your Function in advanced mode. This mode picks up the _worker.js in dist, or a directory mode where Pages will compile the Worker out of a Functions folder in the project root.
  1. Directory mode: This mode is used when you want to run your Function in directory mode. In this mode, the adapter will compile the client-side part of your application the same way, but it will move the Worker into a functions folder in the project root. The adapter will allow you to access your Pages Functions from your functions folder, allowing you to add Pages Plugins and Middleware which can be checked into version control.

To use Directory mode, modify your astro.config.mjs file to add mode: "directory" to the adapter configuration:

export default defineConfig({
output: 'server',
adapter: cloudflare({ mode: "directory" }),
});

​​ Deploying with Cloudflare Pages

Deploy your site to Pages by logging in to the Cloudflare dashboard > Account Home > Pages and selecting Create a project.

You will be asked to authorize access to your GitHub account if you have not already done so. Cloudflare needs this so that it can monitor and deploy your projects from the source. You may narrow access to specific repositories if you prefer; 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 the Set up builds and deployments section, provide the following information:

Configuration optionValue
Production branchmain
Build commandnpm run build
Build directorydist
Environment VariablesNODE_VERSION: 14

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, select Save and Deploy.

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.

​​ Learn more

By completing this guide, you have successfully deployed your Astro site to Cloudflare Pages. To get started with other frameworks, refer to the list of Framework guides.