# Quick start

This page takes you from a fresh terminal to a running app on a public URL. It should take about two minutes.

## Before you start

You'll need:

- The Dina CLI installed. If you don't have it yet, see [Install](/install).
- A folder containing the app you want to deploy. Any app with a `Dockerfile` will work. Don't have one handy? Any small project with a `package.json`, `requirements.txt`, or similar will do for practice.

Check the CLI is ready:

```sh
dina version
```

You should see something like `dina 0.2.0`. If the command isn't found, revisit the [install page](/install).

## 1. Sign in

```sh
dina auth login
```

The CLI opens your browser so you can approve the connection. Once you're back in the terminal, you should see a message confirming you're signed in.

No browser available (you're on a server over SSH, for example)? The CLI automatically falls back to a device code flow: it prints a short code and a URL you can open on any other device.

## 2. Create an app

An **app** is the thing that runs your code. It has a name, a public URL, and settings like environment variables and custom domains.

Create one:

```sh
dina apps create my-first-app
```

You'll get back a URL that looks like `https://my-first-app.dina.run`. Visiting it now shows a placeholder — your code isn't deployed yet.

## 3. Deploy your code

From inside the folder with your app's source code:

```sh
dina deploy --app my-first-app --wait
```

The `--wait` flag tells the CLI to stay attached until the deployment finishes, so you see exactly when it's live.

Under the hood, the CLI zips up the current folder, uploads it, and builds a container image. When the build finishes, the app goes live on the URL from step 2.

If you already have a container image published somewhere, skip the upload and deploy the image directly:

```sh
dina deploy --app my-first-app --tag ghcr.io/you/my-first-app:v1 --wait
```

## 4. Check it worked

Open the URL in your browser, or ask the CLI:

```sh
dina apps info --app my-first-app
```

This prints the app's current state: its URL, the active deployment, port, replica count, and any custom domains.

Want to follow the live logs?

```sh
dina apps logs --app my-first-app
```

## What to do next

- [Set environment variables](/docs/environment-variables) like database URLs and API keys.
- [Attach a custom domain](/docs/custom-domains) so visitors hit `app.yourcompany.com` instead of `dina.run`.
- [Let Claude Code deploy for you](/docs/ai-agents) by installing the agent skills.
- Or read the full [command reference](/docs/command-reference).
