Supported frameworks
deploybase detects your framework from the files in your repository and applies its defaults. Anything on this page can be overridden per project, and a framework we have never heard of works too: set the build command and output directory yourself.
The one requirement is shared by all of them. deploybase serves files, so your build has to produce a directory of files. Frameworks that expect a server process at request time need to be configured for static output first, and the notes below say how.
Build defaults
Section titled “Build defaults”| Framework | Build command | Output | Install | Image |
|---|---|---|---|---|
| Next.js | npm run build |
out |
npm install |
node:24-alpine |
| SvelteKit | npm run build |
build |
npm install |
node:24-alpine |
| Astro | npm run build |
dist |
npm install |
node:24-alpine |
| Vite | npm run build |
dist |
npm install |
node:24-alpine |
| Gatsby | npm run build |
public |
npm install |
node:24-alpine |
| Hugo | hugo --minify |
public |
none | ghcr.io/gohugoio/hugo:v0.168.0 |
| Jekyll | bundle exec jekyll build |
_site |
bundle install |
ruby:3.3 |
| Static HTML | none | . |
none, or yours once you set a build command | alpine:3.24, or node:24-alpine with a build command |
| Other | npm run build |
dist |
npm install |
node:24-alpine |
The framework field accepts exactly these values: nextjs, sveltekit, astro, hugo, vite, gatsby, jekyll, static-html, other.
Static HTML is for a repository that is already a website. By default nothing is built and the repository is published as it is. Set a build command and the build runs with Node, npm, pnpm, yarn and bun available, and installs dependencies first when the repository has a package.json. Set the output directory to wherever that command writes. Because the whole working directory is the output, some paths are withheld from every deploy, your .git directory among them.
Other is the generic Node preset. Point the build command at whatever your toolchain runs and the output directory at whatever it writes.
The npm install in the table is shorthand. The install that actually runs depends on your lockfile and package manager: see package managers.
What each framework needs from you
Section titled “What each framework needs from you”| Framework | What to configure |
|---|---|
| Next.js | output: 'export' in next.config.js. No SSR, API routes, middleware or ISR. Full guide |
| SvelteKit | @sveltejs/adapter-static, either fully prerendered or in SPA mode. Full guide |
| Astro | Nothing for a static site. Replace another host’s SSR adapter with @deploybase/adapter-astro (beta) for on-demand pages. Set site for canonical URLs. Full guide |
| Hugo | Set baseURL, and vendor your theme rather than using a Git submodule. Full guide |
| Gatsby | Nothing. gatsby build is static by default |
| Vite | Nothing, for a client-rendered app. A dev-server proxy has no equivalent in production |
| Jekyll | A committed Gemfile.lock. bundle install resolves against it |
Override the defaults
Section titled “Override the defaults”Change the build command and output directory under Configure → Build and Git, or:
curl -X PATCH "https://api.deploybase.eu/api/v1/projects/$PROJECT_ID" \ -H "Authorization: Bearer $DEPLOYBASE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"build_command": "npm run generate", "output_dir": ".output/public"}'The output directory is relative to the repository root, and it is the directory whose contents are published: dist publishes dist/index.html as /index.html.
What a build command may contain
Section titled “What a build command may contain”The build command is a shell command. It runs with sh in the repository root, or in the root directory when you set one, after dependencies are installed. Chaining, pipes, quotes and inline variables all work:
npm run lint && npm run buildNODE_ENV=production npm run buildtsc --noEmit && esbuild src/app.ts --bundle --outfile=public/app.jshugo --minify --baseURL "https://example.com/"Dependencies are already installed when your command starts, so there is no need to begin it with npm ci or npm install.
The command must fit on one line. To run several steps, chain them with && so the build stops at the first one that fails. A longer sequence reads better as a script in package.json or a shell script in the repository, such as sh scripts/build.sh.
The command is checked when you save it. The dashboard, the API and the MCP server refuse a command the build would refuse: one with a line break, a tab or another control character in it.
Secrets belong in environment variables, not in the command. They are encrypted, scoped per environment, and available to the command as ordinary shell variables.
Limits: build command 1024 characters, output directory 255 characters. An output directory cannot be absolute or contain ...
Choose a package manager
Section titled “Choose a package manager”Node projects install with npm, pnpm, yarn or bun, detected from your repository. To pin it:
curl -X PATCH "https://api.deploybase.eu/api/v1/projects/$PROJECT_ID" \ -H "Authorization: Bearer $DEPLOYBASE_API_KEY" \ -H "Content-Type: application/json" \ -d '{"package_manager": "pnpm"}'Your build command does not change. npm run build runs the build script from package.json whichever manager installed the dependencies. Detection order and lockfile handling has the details.
Nothing detected?
Section titled “Nothing detected?”If we cannot identify the framework we say so rather than guessing, and fall back to npm run build into dist/. Set the two fields yourself and the build runs the same as any other.
If your toolchain does not fit any of this, build the site wherever you like and upload the finished directory. The publish step works the same, and so do previews, promotion and rollback.
Live a8b7eb1d built