---
title: Getting started
description: Connect a repository, build it, and get your app live on Zeitlos.
sidebarLabel: Getting started
---

Zeitlos hosts your app in the EU. Connect a Git repository, push, and it builds and deploys —
no pipeline to configure.

## Deploy your first app

:::steps

1. **Create a project**

   In the dashboard, go to **Projects → New project** and connect the GitHub repository you
   want to deploy. Pick the branch Zeitlos should follow.

2. **Add environment variables** _(optional)_

   If your app needs API keys or configuration to build, add them under
   **Settings → Secrets** before the first build. See
   [Environment variables](/hosting/environment-variables/).

3. **Build it**

   Open **Builds** and trigger the first build. From then on, every push to the connected
   branch builds and deploys automatically.

4. **Open your app**

   Once the build succeeds your app is live at `<slug>.ztls.app`. The link sits in the
   project header. To use your own domain, see [Custom domains](/hosting/custom-domains/).

:::

## Requirements for your app

Zeitlos detects how to build your repository automatically and supports a wide range of
languages and frameworks.

> [!TIP]
> If your application won't build on Zeitlos, please don't hesitate to reach out to us.
> We're happy to have a look and extend our support of languages and frameworks.

If your apps build only static HTML output, we'll detect that and publish those assets directly
on our CDN.

If your app runs a server, we'll build it into a Zeitlos image and run it on our infrastructure. Your application server needs to fulfill some requirements:

### Listening port

We only route HTTP traffic to a single port in your app. That's by default port 3000, but can be configured under "Advanced" when setting up the project or in the project settings after creation. We also inject that port into your application at build and runtime as the `PORT` environment variable. Several common frameworks like Next.JS are already taking that environment variable into account and there's nothing you'll need to configure.

### Listening interface

Your app needs to listen on all interfaces (`0.0.0.0`) and not on `localhost`, `127.0.0.1`, or any other IP. We're also injecting
this as the environment variable `HOST` into your application, which is respected by several frameworks.

### Persistent data

Your applicatoin can't persist data on the file system. Writing to the file system will get lost 
lately on the next deploy of your app. Also we can compile Dockerfile apps, there no support for
persistent volumes.

## Building subdirectories

When creating your project or later in the project's setting you can configure a subfolder of your
repository to be built instead of the root of your repository. This is useful if you want to e.g.
build just documentation that's within your monorepo.

## Next steps

- [Environment variables](/hosting/environment-variables/) — configuration and secrets for
  your build and your running app.
- [Custom domains](/hosting/custom-domains/) — serve the project on your own domain.
