Unkey Deploy is in public beta. To try it, open the product switcher in the
top-left of the dashboard and select Deploy. During beta, deployed
resources are free. We’re eager for feedback, so let us know what you think
on Discord, X, or
email support@unkey.com.
unkey deploy command ships a pre-built Docker image to Unkey infrastructure. Unlike the GitHub integration, the CLI does not build your image — you build it yourself (locally or in CI), push it to a registry Unkey can pull from, and unkey deploy creates the deployment and streams status until it is ready.
Use the CLI when you want to own the build step: custom CI pipelines, monorepo build systems, pre-release images from a tag, or deploying without connecting a GitHub repository.
Prerequisites
- The Unkey CLI installed and authenticated (
unkey auth login). - A project created in your workspace.
- A Docker image pushed to a registry Unkey can pull from (for example, a public
ghcr.io,docker.io, orquay.ioimage).
We currently don’t support private registries on the platform, this will come in a future release.
Quick start
- Creates a deployment for
my-project/defaultusing the image you supplied. - Monitors the deployment status in your terminal with a live spinner.
- Prints the deployment ID and assigned domains once the deployment is Ready.
Usage
registry/repository:tag or registry/repository@sha256:…. The image must already exist in the registry before you run the command.
Flags
| Flag | Description | Default |
|---|---|---|
--project | Project slug. Required. | — |
--app | App slug within the project. | default |
--env | Environment slug to deploy to. | preview |
--root-key | Root key for authentication. Required. | — |
--api-base-url | API base URL override (local testing only). | — |
Git auto-detection
If you rununkey deploy inside a Git working tree, the CLI auto-fills --branch and --commit from the current repository. Set the flags explicitly if you want to override what it detects (for example, when deploying from a CI runner with a detached HEAD).
Dirty working trees are recorded with a (dirty) marker in the source info but still deploy.
Deploy from GitHub Actions
A typical CI flow builds the image, pushes it to a registry, then callsunkey deploy:
UNKEY_ROOT_KEY) with permission to deploy to the target project.
What happens after you run the command
The deployment follows the same lifecycle as a GitHub-triggered deployment, with one difference: the Building image step is skipped because Unkey uses the image you supplied as-is.- Deployment record created with status Pending.
- Image pulled from the registry.
- Containers scheduled across your configured regions.
- Health checks run (if configured in app settings).
- Domains assigned and routes updated.
- Status moves to Ready.
Troubleshoot
| Symptom | Likely cause |
|---|---|
docker image is required | You called unkey deploy without a positional image argument. |
--project is required | Pass --project or set UNKEY_PROJECT. |
--root-key is required | Pass --root-key or set UNKEY_ROOT_KEY. |
| Deployment fails during image pull | The registry is private or the image tag does not exist. Verify the image is pullable publicly. |
| Deployment reaches Ready but returns 5xx | Check runtime logs in the dashboard — usually a crash on startup or a missing environment variable. |
Next steps
CLI vs GitHub integration
When to pick the CLI over the GitHub integration
Deployment lifecycle
How deployments progress from create to serving traffic
App settings
Configure regions, health checks, and variables
CLI overview
Install the CLI and authenticate

