Deploy a Sapper Web App Automatically to GitHub Pages using GitHub Actions

Sapper is a framework for building web applications, where every page is a Svelte component.

You may want to setup your GitHub repository to use GitHub Actions to automatically build and deploy your site to GitHub Pages website hosting every time you check in your code. This is great because the build/deploy step happens automatically for you - no need to manually do it yourself! Here’s how to set that up:

  1. Create a new GitHub Repository and copy the Sapper template files to it.
  2. Ensure gh-pages is enabled by going to the repository setting tab and enabling it.
  3. To enable Sapper to live at a subdirectory (, modify the export task in package.json to include --basepath repo-name (replacing repo-name with the name of your GitHub repository). It should look like this:
    "export": "sapper export  --basepath repo-name --legacy",
                              ^^^^^ add this ^^^^^
  4. In src/server.js, right after polka().use(, add a string as the first parameter with the repository name, so it will look like this:
      'repo-name', // Add this line
      compression({ threshold: 0 }),
      sirv('static', { dev }),
    .listen(PORT, err => {
      if (err) console.log('error', err);
  5. Create a GitHub Access Token by going to (scopes: repo access)
  6. Place that GitHub Access Token into the repository “Secrets” by going to the repository settings tab, then clicking the Secrets page. I named mine github_pat (used below)
  7. Create a new file, .github/workflows/main.yml, with the contents below. Replace secrets.github_pat with the name you gave to your GitHub Token in step 5. Replace FOLDER: __sapper__/export/repo-name with the name of your repository (used above in step 3 and 4).
    name: Build and Deploy
          - master
        runs-on: ubuntu-latest
        - name: Checkout
          uses: actions/[email protected]
            persist-credentials: false
        - name: Use Node.js '12.x'
          uses: actions/[email protected]
            node-version: '12.x'
        - run: npm install
        - run: npm run export
        - name: Build and Deploy
          uses: JamesIves/[email protected]/v3
            ACCESS_TOKEN: ${{ secrets.github_pat }}
            BRANCH: gh-pages
            FOLDER: __sapper__/export/repo-name

After this is all setup, any time you commit to the master branch (or whichever branch you configured), the code will get built and deployed to GitHub Pages website hosting. Here is an example repository where you can see this in action. Enjoy!

I periodically write about technology, maps, open data, and other software topics. To get updates about new posts:

See Also