# Deploy modes: on push, on release, manual

> Choose whether a push to your repository deploys, only a release tag does, or nothing does until you say so.

Source: https://veldhost.eu/docs/deploy-modes

Last verified: 2026-11-12

Once a site deploys from Git, every push to your repository reaches us through its webhook. The **Deploy trigger** decides what that push does: deploy straight away, deploy only when you tag a release, or never deploy on its own.

## The three modes

**On every push** (the default). A push to your site's branch deploys the live site. If you have a [staging copy](https://veldhost.eu/docs/staging-copy) with a branch set, a push to that branch deploys the staging copy. Pushes to any other branch are ignored.

**On release tags**. Only pushing a tag whose name matches your **Release tag pattern** deploys, and we deploy that tag, not the branch. Branch pushes are acknowledged and ignored, including pushes to your staging branch. A release tag always deploys the live site.

**Manually**. Pushes never deploy. You deploy when you are ready: from the Deploys tab, through the API or an AI assistant, or with a [deploy hook](https://veldhost.eu/docs/deploy-hook-url) call from your CI.

In all three modes the webhook stays connected, and the Deploys tab still shows when the last push arrived. That is how you can tell the webhook works even when a push is ignored on purpose.

## Release tag patterns

The pattern is a simple glob: letters, numbers and `* . - _ /`. A `*` matches any run of characters, `/` included.

- `v*` (the default, and what an empty field becomes) matches `v1.2.3` and `v2`.
- `release/*` matches `release/2026-11`.
- `v2.*` matches `v2.0.1` but not `v3.0.0`.

Deleting a tag never deploys anything, even when its name matches.

## What still deploys your branch

The mode only decides what a **push** does. These always deploy your site's branch, whichever mode you choose:

- **Deploy from Git** in the Git panel, and **Redeploy** on the *Live now* strip.
- A call to the deploy hook with no branch or tag in it ([Trigger a deploy from CI with a deploy hook](https://veldhost.eu/docs/deploy-hook-url)).
- `POST /api/v1/sites/{slug}/deploy` and the `deploy_site` tool, when called without a `ref`.

So in **On release tags** mode, **Deploy from Git** deploys your branch, not your newest tag.

## A push that arrives during a deploy

If a push to the same branch (or a matching tag) arrives while a deploy is still running, it is not lost: we deploy the newest commit as soon as the running deploy finishes.

## Change the mode

1. Open [Sites](https://manage.veldhost.eu/portal/sites) → your site → **Deploys**, then **Git settings** (or open **Deploy from Git**).
2. Under **Deploy trigger**, pick **On every push**, **On release tags** or **Manually**. *Now:* beside the heading shows what is saved.
3. For **On release tags**, fill in the **Release tag pattern**, or leave it empty for `v*`.
4. Press **Save deploy trigger**.

The new mode applies from the next push. The change is recorded in your account's audit log. Switching away from release tags keeps your pattern, so it is still there if you switch back.

You need a role that can change the site's settings ([Roles and permissions](https://veldhost.eu/docs/roles-and-permissions)). The API sets the same thing with `deploy_mode` (`push`, `release` or `manual`) and `release_pattern` on `PATCH /api/v1/sites/{slug}/build`.

## With the CI/CD add-on

The mode decides **when** a deploy starts. With the [CI/CD add-on](https://veldhost.eu/docs/ci-cd-add-on) on, every Git deploy, whatever started it, is built and tested and then waits for your approval before visitors see it.

## Related

- [Deploy from Git](https://veldhost.eu/docs/deploy-from-git)
- [Trigger a deploy from CI with a deploy hook](https://veldhost.eu/docs/deploy-hook-url)
- [Build steps](https://veldhost.eu/docs/build-steps)
- [Approve a release, discard it or roll back](https://veldhost.eu/docs/release-approval-and-rollback)