Deploy apps
Import a repo, configure service types, ship from git push or Promote, and go live per environment.
How deployment works
- Connect a GitHub repo to a Bytstack project.
- Configure service type, build/start commands, root directory, and Variables.
- Deploy — Bytstack clones, installs, builds, then publishes a container (web/worker/cron) or static assets.
- 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
| Type | Use for | Build | Runtime | Public URL |
|---|---|---|---|---|
| Web | APIs, SSR (Next.js, Remix), Node servers | Optional | Container + ingress | Yes |
| Static | SPAs (Vite, CRA, Vue, Angular) | Required | CDN / object storage | Yes |
| Worker | Background jobs, queue consumers | Optional | Container (no HTTP) | No |
| Cron | Scheduled tasks | Optional | CronJob | No |
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:
| Framework | Type | Build | Start / publish |
|---|---|---|---|
| Next.js, Nuxt, Remix | Web | npm run build | npm start |
| Express / Fastify / Nest | Web | optional | npm start |
| Vite / CRA / Vue / Angular / Gatsby / Astro (static) | Static | npm run build | dist, 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
| Setting | Notes |
|---|---|
| Branch | Per-environment; deployed on push when auto-deploy is on; default often matches the env slug (staging) or main for production |
| Root directory | Subfolder with package.json |
| Build command | After install; required for static |
| Start command | Web & worker containers (npm start, node dist/index.js, …) |
| Publish directory | Static 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
| Path | Behavior |
|---|---|
| Git-track | Each environment watches its own branch with autoDeploy. Push to staging updates the staging column only. |
| Promote | After 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.