> ## Documentation Index
> Fetch the complete documentation index at: https://unkey-eng-3082-add-portal-config-crud-api-endpoints-v2portal.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Deploy your first app

> Deploy your first application on Unkey from a GitHub repository. Connect your repo, configure build settings, and go live in minutes.

This guide walks you through deploying an application on Unkey for the first time. You'll create a project, connect a GitHub repository, and have a running app with a live URL.

## Prerequisites

* An Unkey account
* A GitHub repository

## Create a project

<Steps>
  <Step title="Start a new project">
    Navigate to your workspace and click **New project**. Enter a project name and slug, then click **Create Project**.

    <Frame caption="Create a new project">
      <img src="https://mintcdn.com/unkey-eng-3082-add-portal-config-crud-api-endpoints-v2portal/1yMhPbUebq6ahYbw/build-and-deploy/github-create-project-light.png?fit=max&auto=format&n=1yMhPbUebq6ahYbw&q=85&s=4a585bd195e4627d15d029fdc7931111" alt="Create project form" className="block dark:hidden" width="1576" height="1324" data-path="build-and-deploy/github-create-project-light.png" />

      <img src="https://mintcdn.com/unkey-eng-3082-add-portal-config-crud-api-endpoints-v2portal/1yMhPbUebq6ahYbw/build-and-deploy/github-create-project-dark.png?fit=max&auto=format&n=1yMhPbUebq6ahYbw&q=85&s=481f351d8da11e9b65f734f1dbaf3d21" alt="Create project form" className="hidden dark:block" width="1576" height="1324" data-path="build-and-deploy/github-create-project-dark.png" />
    </Frame>
  </Step>

  <Step title="Import from GitHub">
    Click **Import from GitHub**. If you haven't installed the Unkey GitHub App yet, you'll be prompted to install it on your organization or personal account.

    <Frame caption="Import a project from GitHub">
      <img src="https://mintcdn.com/unkey-eng-3082-add-portal-config-crud-api-endpoints-v2portal/1yMhPbUebq6ahYbw/build-and-deploy/github-import-light.png?fit=max&auto=format&n=1yMhPbUebq6ahYbw&q=85&s=12c8b07d9c2093abd760ca14923e060a" alt="Import from GitHub" className="block dark:hidden" width="1576" height="1324" data-path="build-and-deploy/github-import-light.png" />

      <img src="https://mintcdn.com/unkey-eng-3082-add-portal-config-crud-api-endpoints-v2portal/1yMhPbUebq6ahYbw/build-and-deploy/github-import-dark.png?fit=max&auto=format&n=1yMhPbUebq6ahYbw&q=85&s=c208a85f905cc1bbd301f763a068676c" alt="Import from GitHub" className="hidden dark:block" width="1576" height="1324" data-path="build-and-deploy/github-import-dark.png" />
    </Frame>
  </Step>

  <Step title="Select a repository">
    Choose your repository and branch. Unkey auto-detects Dockerfiles and shows their status next to each repo.

    <Frame caption="Select a repository">
      <img src="https://mintcdn.com/unkey-eng-3082-add-portal-config-crud-api-endpoints-v2portal/1yMhPbUebq6ahYbw/build-and-deploy/github-select-repo-light.png?fit=max&auto=format&n=1yMhPbUebq6ahYbw&q=85&s=04690d7d8f89f85a39256f2eebe0dc2a" alt="Repository selection" className="block dark:hidden" width="1576" height="1324" data-path="build-and-deploy/github-select-repo-light.png" />

      <img src="https://mintcdn.com/unkey-eng-3082-add-portal-config-crud-api-endpoints-v2portal/1yMhPbUebq6ahYbw/build-and-deploy/github-select-repo-dark.png?fit=max&auto=format&n=1yMhPbUebq6ahYbw&q=85&s=5e4ce4a566db389175c7fc283d21ecb3" alt="Repository selection" className="hidden dark:block" width="1576" height="1324" data-path="build-and-deploy/github-select-repo-dark.png" />
    </Frame>

    <Tip>
      Don't have a repository ready or want to deploy with the [CLI](/build-and-deploy/cli) instead? Click **Skip for now** to finish onboarding without selecting a repository. You can connect GitHub later from your project's settings.
    </Tip>
  </Step>

  <Step title="Configure build settings">
    Review the defaults for root directory, Dockerfile path, and watch paths. Expand **Runtime settings** to configure regions, CPU, and memory. Expand **Advanced configurations** to add environment variables.

    <Frame caption="Configure deployment settings">
      <img src="https://mintcdn.com/unkey-eng-3082-add-portal-config-crud-api-endpoints-v2portal/1yMhPbUebq6ahYbw/build-and-deploy/github-configure-light.png?fit=max&auto=format&n=1yMhPbUebq6ahYbw&q=85&s=ca55cdfb19112dd987916156a56f4576" alt="Configure deployment" className="block dark:hidden" width="2006" height="1542" data-path="build-and-deploy/github-configure-light.png" />

      <img src="https://mintcdn.com/unkey-eng-3082-add-portal-config-crud-api-endpoints-v2portal/1yMhPbUebq6ahYbw/build-and-deploy/github-configure-dark.png?fit=max&auto=format&n=1yMhPbUebq6ahYbw&q=85&s=27289e71475d0fa3fe065ac2bdfead95" alt="Configure deployment" className="hidden dark:block" width="2006" height="1542" data-path="build-and-deploy/github-configure-dark.png" />
    </Frame>
  </Step>

  <Step title="Deploy">
    Click **Deploy**. Unkey builds your image, provisions infrastructure across your selected regions, and assigns domains.

    <Frame caption="Deployment in progress">
      <img src="https://mintcdn.com/unkey-eng-3082-add-portal-config-crud-api-endpoints-v2portal/1yMhPbUebq6ahYbw/build-and-deploy/github-deploying-light.png?fit=max&auto=format&n=1yMhPbUebq6ahYbw&q=85&s=601eca9ecdc5707171c0ef7d951341a6" alt="Deployment progress" className="block dark:hidden" width="2006" height="2116" data-path="build-and-deploy/github-deploying-light.png" />

      <img src="https://mintcdn.com/unkey-eng-3082-add-portal-config-crud-api-endpoints-v2portal/1yMhPbUebq6ahYbw/build-and-deploy/github-deploying-dark.png?fit=max&auto=format&n=1yMhPbUebq6ahYbw&q=85&s=e79edb99b1c829367527f922a23bdd96" alt="Deployment progress" className="hidden dark:block" width="2006" height="2116" data-path="build-and-deploy/github-deploying-dark.png" />
    </Frame>

    Once the deployment reaches **Ready**, your app is live. Unkey assigns several domains automatically, including an environment domain and a commit-specific domain.
  </Step>
</Steps>

## What happens next

After the initial setup, every push to your repository triggers a new deployment automatically:

* Pushes to the default branch (typically `main`) deploy to **production**.
* Pushes to any other branch deploy to **preview**.

Each deployment gets its own unique URL, so you can test any version independently.

## Next steps

<CardGroup cols={2}>
  <Card title="GitHub integration" icon="github" href="/build-and-deploy/github">
    Branch mapping, fork protection, and watch paths
  </Card>

  <Card title="App settings" icon="gear" href="/platform/apps/settings">
    Configure regions, CPU, memory, health checks, and more
  </Card>

  <Card title="Variables" icon="key" href="/platform/variables/overview">
    Add environment-specific configuration
  </Card>

  <Card title="Custom domains" icon="globe" href="/networking/domains">
    Serve your app from your own domain
  </Card>
</CardGroup>
