Skip to main content
A static site’s build settings tell Sevalla how to turn the repository into the files it publishes: which Node.js version to install, which command builds the site, and which folder holds the result. The dashboard calls them the Build strategy. Changes apply from the next deployment.

Build settings

Sevalla doesn’t read engines in package.json, .nvmrc or netlify.toml: everything comes from these settings.

Update the build settings

1

Open the build strategy

In the sidebar, click Static sites, then click the site. Click the Settings tab and, under Build, click Update build strategy. The Deployments tab has the same Update build strategy button.
2

Change the settings

Update the fields, then click Update build strategy.
3

Deploy the site

Click the Deployments tab, click Deploy now, then click Deploy.
The Build strategy section shows the new values, and the new deployment’s log starts with a Deployment details table that lists the branch, commit, Node version, install command, build command, root folder and out folder it used. You can’t change the settings while a production deployment runs.
The Build strategy section of a static site's Settings tab with the build command, Node version, root directory, publish directory, index file and error fileThe Build strategy section of a static site's Settings tab with the build command, Node version, root directory, publish directory, index file and error file

How a build runs

Each deployment runs in a new, isolated build container. The deployment’s log shows each step:
  1. Fetch the source. Sevalla clones the deployment’s branch with its submodules and checks out the deployment’s commit (Fetching source code from github..., then Source code fetched successfully). It downloads Git LFS objects unless Git LFS is off.
  2. Enter the root directory, if one is set.
  3. Install Node.js with nvm (Set node version to: 22, then Node version set successfully).
  4. Install dependencies with the package manager your lockfile names (Packages installed successfully). See Package managers.
  5. Run the build command in bash, with node_modules/.bin on the PATH (Running build command: npm run build, then Build command succeeded). A command that exits with an error fails the deployment.
  6. Check the publish directory. It must exist and hold at most 1 GB.
  7. Read _redirects and _headers from the publish directory, or else the root directory. See Redirects and Custom headers.
  8. Upload and publish. Sevalla uploads the files that changed since earlier deployments, then switches the site to the new deployment (Static site has been deployed successfully).
With Build site before publishing off, Sevalla skips steps 3 to 5.

Build environment

Build time counts toward the company’s 600 free build minutes a month.

Node versions

Sites created before the major-version options can also show 16.20.0, 18.16.0 or 20.2.0, which the API still accepts. The build command, and an install command, require a Node version.

Package managers

Sevalla picks the package manager from the lockfile in the root directory, checking in this order: Commit your lockfile so every build installs the same versions. To run your own install command instead, set install_command with Update static site. Sevalla installs Yarn, pnpm and Bun globally before it runs it, so any of them works.

Framework detection

When you create a static site from a private repository, Sevalla reads package.json at the root of the repository on the chosen branch. If it recognizes the framework, it turns the build on, fills in the build command and publish directory, sets the Node version to Latest LTS and shows Framework detected with the framework’s name. It checks in this order and uses the first match: With a yarn.lock file, the commands are yarn build and yarn generate. Sevalla doesn’t detect frameworks for public repositories, and it reads only the package.json at the repository root: for a site in a subfolder, fill in the fields yourself.

Settings for common static site generators

These are each tool’s usual defaults. Check your project’s configuration if you changed its output folder.

Hugo and generators outside Node.js

The build container has no Hugo, Jekyll or Python. For Hugo, install it as an npm package so the build can run it:
package.json
Then set the build command to npm run build and the publish directory to public. Hugo themes added as Git submodules work: Sevalla clones submodules with the repository. For a generator you can’t install with npm, build the site yourself and commit the output, or deploy it as an application.

Publish files without a build

When the repository already holds the finished site, turn off Build site before publishing. Sevalla publishes the publish directory (or the root directory, if the publish directory is empty) as it is in the repository.

Build a site in a subfolder

For a monorepo, set the Root directory to the site’s folder, for example apps/docs. The install and the build run there, Sevalla looks for the lockfile there, and the publish directory is relative to it: dist, not apps/docs/dist. To deploy only when the site’s files change, add the deploy path apps/docs/** (deploy paths are relative to the repository root).

What gets published

Every file in the publish directory, except:
  • Anything inside .git or node_modules folders.
  • Files and folders whose name starts with .env, and .DS_Store files.
  • The _redirects and _headers files. Sevalla reads them instead of serving them.
Sevalla compresses text files (HTML, CSS, JavaScript, JSON, XML, SVG, TXT and TTF fonts) and serves Markdown files (.md, .markdown) as text/markdown.

API and CLI