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

<Info>
  Deploying applications on Unkey is in public beta. To try it, select
  **Projects** in the dashboard sidebar and create a project. Deployed
  resources are free until August 1, 2026. 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

## 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-chronark-cli/v2rPW0OnoitNw0MJ/build-and-deploy/github-create-project-light.png?fit=max&auto=format&n=v2rPW0OnoitNw0MJ&q=85&s=95e0aeed004a48b79349f829c57c6331" 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-chronark-cli/v2rPW0OnoitNw0MJ/build-and-deploy/github-create-project-dark.png?fit=max&auto=format&n=v2rPW0OnoitNw0MJ&q=85&s=ebfac47079944d4586c1180352bf2257" 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-chronark-cli/v2rPW0OnoitNw0MJ/build-and-deploy/github-import-light.png?fit=max&auto=format&n=v2rPW0OnoitNw0MJ&q=85&s=628202147be242c038cd9494d38d38a7" 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-chronark-cli/v2rPW0OnoitNw0MJ/build-and-deploy/github-import-dark.png?fit=max&auto=format&n=v2rPW0OnoitNw0MJ&q=85&s=c8531aefdc02f8a726f206cc9fb9d960" 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-chronark-cli/v2rPW0OnoitNw0MJ/build-and-deploy/github-select-repo-light.png?fit=max&auto=format&n=v2rPW0OnoitNw0MJ&q=85&s=adfa69625fc3f2920821221a3ff8d348" 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-chronark-cli/v2rPW0OnoitNw0MJ/build-and-deploy/github-select-repo-dark.png?fit=max&auto=format&n=v2rPW0OnoitNw0MJ&q=85&s=334f505e3e20e3ad27dca61544f0a5d3" 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-chronark-cli/v2rPW0OnoitNw0MJ/build-and-deploy/github-configure-light.png?fit=max&auto=format&n=v2rPW0OnoitNw0MJ&q=85&s=5c363d267e86fec10e577a7f9f4a4275" 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-chronark-cli/v2rPW0OnoitNw0MJ/build-and-deploy/github-configure-dark.png?fit=max&auto=format&n=v2rPW0OnoitNw0MJ&q=85&s=ae524492b39dc46768431351cb1e235a" 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-chronark-cli/v2rPW0OnoitNw0MJ/build-and-deploy/github-deploying-light.png?fit=max&auto=format&n=v2rPW0OnoitNw0MJ&q=85&s=69496680fa69ae9207138b3674029e8c" 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-chronark-cli/v2rPW0OnoitNw0MJ/build-and-deploy/github-deploying-dark.png?fit=max&auto=format&n=v2rPW0OnoitNw0MJ&q=85&s=4fe81ea7308fb4d14fe13cb8f405713d" 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>
