Skip to main content
Connect a GitHub repository to an and Unkey builds and deploys it on every push. By the end of this guide you have a , an app connected to the repository, and a production live on a unkey.app domain. To deploy an image you built yourself instead, see Deploy a container image.
You need a Compute plan before you can deploy. If you don’t have one yet, the dashboard asks you to pick one the first time you try (the dialog is titled Choose a Compute plan). Only a workspace admin can do that. See Compute plans for what each plan includes.
1

Create a project

Open Projects in the dashboard and choose Create project. Enter a Project Name, and Unkey fills in a Slug from it. You’ll use the slug to refer to the project in the API and the CLI. You can change it, as long as it’s unique in your workspace and isn’t default.
Create New Project dialog with a project name and the slug generated from it
The dashboard then opens the new-app flow. To add an app to a project later, open the project and choose Create app.
2

Pick the repository

On Deploy a new app, pick GitHub repository.
Deploy a new app card offering GitHub repository or Container image, next to the steps Select a source, Choose your app, and Configure and deploy
If GitHub isn’t connected to your workspace yet, choose Connect GitHub instead. It sends you to GitHub to install the Unkey GitHub App on an account or organization and choose repositories, then brings you back. The installation belongs to the workspace, so you only do this once.Click a repository to create the app, named after the repository (with -2, -3, and so on if the project already has an app by that name). The account menu above the list switches between GitHub accounts and organizations, and Add GitHub account at the bottom adds another. If a repository is missing from a listed account, choose Can’t find it? Add repositories on GitHub.
Import a GitHub repository card with an account filter, a search field, and a list of repositories
3

Check app configuration

The default configuration is enough to build and run most repositories without changes:
  • Branch: the repository’s default branch.
  • Build: with no Dockerfile set, Unkey detects your language and toolchain and builds the image. See Build settings.
  • Scaling: 0.25 vCPU, 256 MiB of memory, and one instance in us-east-1. See Runtime settings.
  • Environment variables: mark secrets as sensitive to make them write-only. See Environment variables.
Build and scaling settings you save here apply to both the production and preview , and auto deploy is enabled for both by default. Your container must listen on the port in the PORT environment variable, which is 8080 by default. The port can be changed for each environment individually later by navigating to App settings > Environments, selecting the environment, and clicking Configure on the Runtime card.If you go back and pick a different repository, Unkey connects it to the same app. Leaving before you deploy asks you to discard the app.
4

Deploy

Choose Deploy. The dashboard deploys the head of the branch to production and opens the deployment page, where the build log streams. The deployment moves through pending, starting, building, deploying, network (shown as Assigning Domains), and finalizing to ready. If another deployment in the workspace is running, it waits its turn.
Deployment page for a ready production deployment showing its commit, resources, instances, domains, and network
At ready the app is live. For project payments, app api, and workspace acme, production answers on payments-api-acme.unkey.app (or payments-acme.unkey.app if the app slug is default). The deployment page also lists domains for the environment, the branch, and the exact commit.If the deployment ends failed, the page shows the failed step and an error code. Deployments lists the codes and how to fix them.
5

Push again

From now on GitHub tells Unkey about every push.
  • A push to the default branch creates a production deployment. When it reaches ready, it becomes the live deployment and the production domains move to it.
  • A push to any other branch creates a preview deployment with its own branch domain, so every branch has a URL you can share.
  • A pull request from a fork waits in awaiting_approval until a project member approves it, because it runs code from outside your repository.
Your auto deploy settings and watch paths determine which pushes get built, and a push that isn’t built is recorded as skipped with the reason.

Next steps

Production and preview

Promote, roll back, and what happens to older deployments.

Deployments

Every status, the build queue, and the failure codes.

Instances and autoscaling

Change CPU, memory, replicas, and health checks.

GitHub integration

Fork approval, watch paths, and what Unkey writes back to GitHub.

Add API key authentication later

When you want the gateway in front of this app to check API keys before requests reach it, create a keyspace and keys in API Management, then attach a key-auth policy to the environment. Nothing in this guide depends on it.
Last modified on November 11, 2026