> ## Documentation Index
> Fetch the complete documentation index at: https://unkey.com/docs/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.

<Info>
  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](https://unkey.com/discord), [X](https://x.com/unkeydev), or
  email [support@unkey.com](mailto:support@unkey.com).
</Info>

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 with a Dockerfile

## 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/x4OlsjqEyio8akfR/build-and-deploy/github-create-project-light.png?fit=max&auto=format&n=x4OlsjqEyio8akfR&q=85&s=d996b5b8bfc54070a390a00988bc1820" 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/x4OlsjqEyio8akfR/build-and-deploy/github-create-project-dark.png?fit=max&auto=format&n=x4OlsjqEyio8akfR&q=85&s=ae3c05a62261d9490af5dce8f525370b" 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/x4OlsjqEyio8akfR/build-and-deploy/github-import-light.png?fit=max&auto=format&n=x4OlsjqEyio8akfR&q=85&s=43d0393d5fb2c5ee1edc0c5461bf7164" 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/x4OlsjqEyio8akfR/build-and-deploy/github-import-dark.png?fit=max&auto=format&n=x4OlsjqEyio8akfR&q=85&s=36a1c4093c81d4139e0c62c902d200d9" 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/x4OlsjqEyio8akfR/build-and-deploy/github-select-repo-light.png?fit=max&auto=format&n=x4OlsjqEyio8akfR&q=85&s=93de45b6950d265d2b85a4c09b5ff03d" 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/x4OlsjqEyio8akfR/build-and-deploy/github-select-repo-dark.png?fit=max&auto=format&n=x4OlsjqEyio8akfR&q=85&s=c281323a7e4e0d2f9229db5385b33d83" 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/x4OlsjqEyio8akfR/build-and-deploy/github-configure-light.png?fit=max&auto=format&n=x4OlsjqEyio8akfR&q=85&s=7d1f786cf686bfbd7118e4a4b6695f5f" 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/x4OlsjqEyio8akfR/build-and-deploy/github-configure-dark.png?fit=max&auto=format&n=x4OlsjqEyio8akfR&q=85&s=ba7e34d348161eed28e2f101cf606e98" 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/x4OlsjqEyio8akfR/build-and-deploy/github-deploying-light.png?fit=max&auto=format&n=x4OlsjqEyio8akfR&q=85&s=ae038df540be04f528322ed71ba1cd98" 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/x4OlsjqEyio8akfR/build-and-deploy/github-deploying-dark.png?fit=max&auto=format&n=x4OlsjqEyio8akfR&q=85&s=926d2e96c3e625d4d2fec89926be997b" 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>
