---
title: Auto-Deploy
---

Automatically deploy your application when you push code to GitHub.

## How It Works

```
You push to main branch
    ↓
GitHub sends webhook to ZevCloud
    ↓
ZevCloud clones the latest code
    ↓
Nixpacks detects language/framework
    ↓
Docker image built on build server
    ↓
Container deployed to production server
    ↓
Traffic routed to new version
    ↓
Email notification sent
```

## Supported Triggers

| Trigger | When |
|---------|------|
| **Push to branch** | Any push to the configured branch (e.g., `main`) |
| **Manual deploy** | Click "Deploy" in dashboard or `zevcloud deploy` |
| **API trigger** | `POST /v1/services/:id/deployments` |

## Configuration

Auto-deploy is enabled by default when you connect a GitHub repository. Configure in **Service Settings**:

- **Branch** — which branch triggers auto-deploy
- **Root Directory** — if your app is in a monorepo subdirectory
- **Auto-Deploy Toggle** — enable/disable

## Monorepos: Only What Changed Gets Deployed

When several services share one repository (each with its own **Root Directory**), a push only redeploys the services whose folder actually changed:

- A commit touching only `frontend/` redeploys the frontend service — the backend keeps running untouched
- Changes to shared files outside every service's folder (a root `package.json`, lockfile, or `packages/` directory) redeploy **all** services from that repository, since they can affect any build
- If the change set can't be determined reliably (very large pushes, force pushes), all matching services are redeployed to stay safe

No configuration needed — this works automatically from each service's Root Directory.

## Build Settings

Customize the build process:

| Setting | Default | Description |
|---------|---------|-------------|
| Build Pack | Nixpacks (auto) | Auto-detects your language |
| Build Command | Auto-detected | e.g., `npm run build` |
| Install Command | Auto-detected | e.g., `npm ci` |
| Start Command | Auto-detected | e.g., `npm start` |
| Output Directory | Auto-detected | e.g., `.next`, `dist` |

Directories can be written as `dist` or `/dist`; both mean the same folder. Commands can chain steps with `&&` or `||`, but some shell characters aren't allowed. See [Command rules](/guide/web-apps#command-rules).

## Deployment Notifications

Email notifications are sent for:
- ✅ Deployment succeeded
- ❌ Deployment failed (with error summary)

Configure notification preferences in **Settings → Notifications**.
