# Your first app

Nimbus Land takes the code for your website or web app and puts it online at its own secure address. It works out what your code needs, builds it and keeps it running, so you don't set up or look after a server.

## What you need

- **A Nimbus Land account.** Once you have an account, sign in at [nimbusland.ca](https://nimbusland.ca).
- **Your code**, in one of two places:
  - a GitHub repository, to deploy from the console in your browser, or
  - a folder on your computer, to deploy with the `nimbus` command-line tool.

You don't need a configuration file. Most Node.js, Python, Ruby, PHP, Go, Java and Phoenix projects deploy as they are, and so do plain HTML sites.

## Deploy from GitHub

1. **Open the apps list.** After you sign in you see **Applications**. Choose **New** (or **Deploy an app** if you have none yet). The **Deploy a new app** page opens on the **GitHub** tab.
2. **Connect GitHub, the first time only.** If your organization hasn't connected GitHub yet, choose **Install the GitHub App** and pick which repositories Nimbus Land may read. This needs an organization admin; if you aren't one, the page tells you to ask one.
3. **Choose your repository** from the list. If it's missing, use **Manage repository access on GitHub**, then **Refresh**.
4. **Read the plan.** Nimbus Land reads your code (*Working out what will run…*) and shows what it found, then a list headed **What we'll set up**:
   - **Your app**: how big each copy of your app is, with **Change size**.
   - A database, if your code looks like it uses one. **Remove** it if you don't want it.
   - **Before each release**: a command such as database migrations, if your framework has one.
   - **Web address**: your app's address. **Rename** changes the name.
   - **Updates**: **Deploy on every push to** your branch is on, so each push to GitHub puts the new version online.
   - **Settings & secrets**: settings Nimbus Land prepared for you. **View** shows them.

   Below the list, **Estimated cost** shows what the app adds to your monthly bill. **Customize** holds the branch, the [release command](key-ideas.md#release-command) and [environment variables](key-ideas.md#environment-variable), if you need to change them.
5. **Choose Deploy.** The button carries your app's name, for example **Deploy shop**.

### What the plan's label means

- **Ready**: nothing to check. Deploy.
- **Check this**: notes worth a look, such as a start command that ignores the port Nimbus Land gives your app. You can still deploy.
- **Blocked**: something will certainly fail, such as a missing file. Fix what it names, push the change, then choose the repository again.

If your repository holds more than one app, the plan asks you to **Choose the app to deploy** first.

## While it builds

The console takes you to your app's **Overview**. The **Running now** card follows the steps **Build**, **Deploy**, **Rollout** and **Live**.

First Nimbus Land [builds](key-ideas.md#build) your app: it installs your dependencies and prepares everything it needs to run. **Build logs** on the card shows the build's output as it happens. Then Nimbus Land starts the new [release](key-ideas.md#release) on one or more [instances](key-ideas.md#instance) and checks that they come up.

## Your app is live

When the card reaches **Live**, **Open app** appears at the top of the page. Your app's address is:

```text
https://<name>.nimbusapps.ca
```

`<name>` is your app's name, and HTTPS is included. App names are unique across Nimbus Land, so if your repository's name is taken, the plan picks another and says so.

From now on, each push to your branch deploys a new version.

## Deploy from your computer instead

The `nimbus` command-line tool deploys the folder you are in, whether or not it is on GitHub.

1. Install it. On macOS or Linux with Homebrew:

   ```sh
   brew install nimbus-land/tap/nimbus
   ```

   Without Homebrew:

   ```sh
   curl -fsSL https://get.nimbusland.ca/install.sh | sh
   ```

2. Sign in. Your browser opens to confirm it:

   ```sh
   nimbus login
   ```

3. In your project's folder, deploy:

   ```sh
   nimbus deploy
   ```

`nimbus deploy` uploads the folder, builds it and waits until the new version is live, then prints its address. If the plan is blocked, it prints what to fix instead. The app is named after the folder; use `nimbus deploy --name <name>` to pick another name. Run `nimbus status` to see how it is doing and `nimbus logs` to read its output.

You can also ask Claude to deploy for you: see [Claude](claude.md).

## Where to next

- **Add a database** or file storage: [App dependencies](dependencies.md).
- **Settings and API keys**: [Secret environment variables](secret-env-vars.md).
- **Use your own domain**, such as `www.example.com`: [Custom domains](custom-domains.md).
- **See visitors and errors**: [Traffic and analytics](traffic-and-analytics.md) and [Errors](errors.md).
- **Your language**: [Node.js](nodejs.md), [Python](python.md), [Ruby](ruby.md), [PHP](php.md), [Go](go.md), [Java](java.md), [Elixir and Phoenix](elixir.md).
- **A plain HTML or Vite site**: [Static sites](static-sites.md).
- **Your own Dockerfile**: [Dockerfile](dockerfile.md).
- **The words used in these guides**: [Key ideas](key-ideas.md).

## If something goes wrong

- **The plan says Blocked.** Its message names what to add or change. Fix it in your code, push, and choose the repository again so the plan is checked afresh.
- **The build fails.** Open **Build logs** on the **Overview**. The last lines usually name the problem, and the failure reason sits at the top of the build page.
- **The build works but the app never goes live.** Your app probably isn't listening on the port Nimbus Land gives it. See [Apps: Troubleshooting](apps.md#troubleshooting).
