Guides

Deploy apps

Import a repo, configure service types, ship from git push or Promote, and go live per environment.

How deployment works

  1. Connect a GitHub repo to a Bytstack project.
  2. Configure service type, build/start commands, root directory, and Variables.
  3. Deploy — Bytstack clones, installs, builds, then publishes a container (web/worker/cron) or static assets.
  4. Release — traffic switches to the new deployment (rolling update for web).

Statuses: queued → cloning → building → publishing → releasing → live.

With deployment environments enabled, each environment (production, staging, …) has its own services. Use the project switcher (?environment=) so deploys and Variables target the right stage.

Service types

TypeUse forBuildRuntimePublic URL
WebAPIs, SSR (Next.js, Remix), Node serversOptionalContainer + ingressYes
StaticSPAs (Vite, CRA, Vue, Angular)RequiredCDN / object storageYes
WorkerBackground jobs, queue consumersOptionalContainer (no HTTP)No
CronScheduled tasksOptionalCronJobNo

Rule of thumb: client-side SPA with npm run build → Static. Long-running Node HTTP process → Web.

Framework detection

On import, Bytstack reads the repo-root package.json and suggests defaults:

FrameworkTypeBuildStart / publish
Next.js, Nuxt, RemixWebnpm run buildnpm start
Express / Fastify / NestWeboptionalnpm start
Vite / CRA / Vue / Angular / Gatsby / Astro (static)Staticnpm run builddist, build, or public

For monorepos, set Root directory to the app folder (e.g. apps/web). Optionally set path filters so only relevant changes trigger deploys.

Supported Node majors: 18, 20, 22 (default 20, or clamped from engines.node).

Configuration checklist

SettingNotes
BranchPer-environment; deployed on push when auto-deploy is on; default often matches the env slug (staging) or main for production
Root directorySubfolder with package.json
Build commandAfter install; required for static
Start commandWeb & worker containers (npm start, node dist/index.js, …)
Publish directoryStatic output folder

Web services must listen on 0.0.0.0 and the injected PORT. Prefer npm start / production servers over npm run dev in production.

Git-track vs Promote

PathBehavior
Git-trackEach environment watches its own branch with autoDeploy. Push to staging updates the staging column only.
PromoteAfter soak, Promote copies the image digest (or rebuilds static at the same SHA) into the next environment — not a git merge.

When you add Staging, turn auto-deploy off on Production so accidental pushes to main do not skip soak. Details: Deployment environments.

Auto deploy

With the GitHub App installed, pushes to the configured branch for that service’s environment trigger a new deployment. Disable auto-deploy on the service for manual releases or Promote-only production.

Rollback

Open Deployments, pick a previous successful version, and roll back. No rebuild — the prior artifact stays available (within retain limits).

Logs

  • Build logs — install/compile output for the deploy
  • Runtime logs — live tail from web/worker/cron pods

Available in the dashboard and via bytstack logs.