# Quickstart

> Start a self-hosted Nodaro Community Edition with two commands, check it on the /setup page, then add a provider key or a Nodaro Cloud connection to generate.

Source: https://nodaro.ai/docs/self-hosting/quickstart

The **Community Edition quickstart** takes you from nothing to a running, self-hosted Nodaro in two commands. The Docker Compose stack brings its own database, sign-in, storage and queues, so there are no cloud accounts to create, no API keys to find and nothing to configure. You need Docker 24 or later with Docker Compose v2.

## Start Nodaro

### Clone the repository and start the stack

```bash
git clone https://github.com/nodaroai/app.nodaro.ai.git nodaro
cd nodaro
docker compose -f docker-compose.community.yml up
```

The first boot downloads the prebuilt app image, about 2.4 GB, and the bundled services. It is a download, not a compile, so it does not load your CPU. Later boots take seconds.

### Open the app and create your account

Open `http://localhost:3000` and sign up with any email address and password. The account works at once, because a local stack sends no confirmation email.

On your first visit, the home screen adds a **Welcome Demo** workflow. It is a finished script, image, video, voice and final-cut run with every result already made. You can open its nodes and play the final clip before you configure anything.

### Check the install on /setup

Open `http://localhost:3000/setup`. The page shows the live status of the database, Redis, storage, the encryption key and your provider keys, and it needs no sign-in. On a fresh stack, every card is green except the provider keys.

### Add a model provider

Choose one of the three ways below. When a provider exists, click **Run** on the demo's **Scene Image** node. It uses [Z-Image](https://nodaro.ai/docs/models/image/z-image), the cheapest image model, and answers in seconds.

## What starts

| Service | What it does | Where its data lives |
| --- | --- | --- |
| **Postgres** (Supabase image) | The database. Migrations apply themselves on the first boot. | `db-data` volume |
| **GoTrue** | Sign-in with email and password. No email server is needed. | — |
| **PostgREST** | The data API that the editor talks to | — |
| **MinIO** | Media storage. Generated images, videos and audio stay on your disk. | `minio-data` volume |
| **Redis** | Job queues | `redis-data` volume |
| **Nodaro** | The app: editor, API and workers, on port `3000` | `app-data` volume |

The stack publishes two ports on your machine: `3000` for the app, and `9001` for the MinIO console, on the loopback interface only.

## Add a model provider

Viewing the demo is free and works offline. To run nodes yourself, the install needs a model provider. Until it has one, the home screen shows a dismissible **This install can't generate yet** callout with a button for each option.

The three ways can run side by side, with one rule. When the install is connected to Nodaro Cloud and also holds a `NODARO_API_KEY`, it uses the connection and ignores the key.

**Paste a key**

No files and no restart.

1. Open `/setup` and complete step 1, **Create your server login**. The health cards need no sign-in, but saving a key does.
2. Find the provider tiles in the **Install health** section. The same tiles are in the app under **Integrations › Model providers**.
3. Click **Paste key** on a tile, paste the key and save.

Each tile says what its key powers and where to get one. The key is stored encrypted in your own database and takes effect at once. If you connect to Nodaro Cloud, no tile is required: the connection covers them.

**Connect Nodaro Cloud**

No keys to manage.

1. On `/setup`, in step 2, **Connect a model provider**, click **Connect nodaro.ai**.
2. Your browser opens the Nodaro Cloud consent screen. Sign in, or create a free account with 1,500 credits, and approve.
3. You land back on your install, connected.

Image, video, speech and text models then run through your Nodaro Cloud account and are billed in credits. Read [Connect to Nodaro Cloud](https://nodaro.ai/docs/self-hosting/cloud-connect) for the details.

**Set it in .env**

For infrastructure as code. Create a file named `.env` next to the compose file:

```bash
KIE_API_KEY=...            # broadest model coverage
# or
REPLICATE_API_TOKEN=...
# or
NODARO_API_KEY=...         # a personal API token from app.nodaro.ai, Settings › API
```

Then apply it:

```bash
docker compose -f docker-compose.community.yml up -d
```

A key in `.env` wins over a key pasted on the screen. Its tile shows `set (env)` and cannot be edited in place.

Read [Provider keys](https://nodaro.ai/docs/self-hosting/provider-keys) for every provider and what it powers.

You pay your providers directly. The Community Edition has no credit system, no Nodaro fees and no watermark.

## Learn the editor for free

The home screen's **Tutorials** start with a set of guided walkthroughs, added on the first boot. Browsing them costs nothing. Their images, videos and audio load from Nodaro's CDN, so they need an internet connection. See [Tutorials and templates](https://nodaro.ai/docs/get-started/tutorials-and-templates).

## Check the install from the command line

For a deeper check than `/setup` can show, run the contract probe from your clone. It needs Node.js.

```bash
node tools/community-smoke.mjs http://localhost:3000
```

The probe signs up a throwaway account, creates a workflow, submits a generation, follows the job to its end state and reports which checks passed. A check that does not apply to your install, for example because you already added a provider key, is reported as skipped. Without extra flags, the probe never spends anything.

To also test a real generation, add `--keyed`:

```bash
node tools/community-smoke.mjs http://localhost:3000 --keyed
```

`--keyed` needs `KIE_API_KEY` or `REPLICATE_API_TOKEN` on the install, in `.env` or pasted on `/setup`. It runs one generation on the cheapest model for that key: [Z-Image](https://nodaro.ai/docs/models/image/z-image) with `KIE_API_KEY`, [Flux 2 Klein](https://nodaro.ai/docs/models/image/flux-2-klein-open) with `REPLICATE_API_TOKEN`. That usually costs less than one cent at the provider. The probe then checks that the media landed in your install's own storage. A Nodaro Cloud connection or token is checked separately.

## Everyday commands

| Task | Command |
| --- | --- |
| Start in the background | `docker compose -f docker-compose.community.yml up -d` |
| Follow the logs | `docker compose -f docker-compose.community.yml logs -f` |
| Stop the stack | `docker compose -f docker-compose.community.yml down` |
| Apply a changed `.env` | `docker compose -f docker-compose.community.yml up -d` |

Never add `-v` to `down` unless you mean it: `docker compose down -v` deletes the volumes, and with them your database and media.

**Before other people can reach the install:** 
The compose defaults are made for local use, and they are public. Before you expose the stack to a network, mint fresh auth keys, set new database and storage passwords, and serve the install over HTTPS. Follow [Harden the install](https://nodaro.ai/docs/self-hosting/install#harden-the-install-before-you-expose-it) and [Reverse proxy and HTTPS](https://nodaro.ai/docs/self-hosting/reverse-proxy).

## Next steps

- [Install](https://nodaro.ai/docs/self-hosting/install) — the full setup, with managed services, storage and secrets.
- [Reverse proxy and HTTPS](https://nodaro.ai/docs/self-hosting/reverse-proxy) — serve the install on your domain.
- [Updating](https://nodaro.ai/docs/self-hosting/updating) — image tags and updates.
- [Backups and restore](https://nodaro.ai/docs/self-hosting/backups) — one command each way.
- [Troubleshooting](https://nodaro.ai/docs/self-hosting/troubleshooting) — when a card on `/setup` is red.

## Frequently asked questions

### How long does the first start of a self-hosted Nodaro take?

The first boot downloads the prebuilt app image, about 2.4 GB, and the bundled services, so it takes a few minutes on a typical connection. It is a download, not a compile. Later boots take seconds.

### Do I need a .env file to run the Community Edition?

No. Every value in docker-compose.community.yml has a working default. Create a .env file only to add provider keys, to change the public URL, or to use your own managed services.

### Why can my new install not generate anything?

It has no model provider yet. Paste a provider key on /setup, set one in .env, or connect the install to a Nodaro Cloud account. The home screen shows a callout with both options until a provider exists.

### Is the default install safe to put on the internet?

No. The default keys and passwords in the compose file are public. Before other people can reach the install, mint fresh auth keys, set new passwords and serve it over HTTPS behind a reverse proxy.

### What does the Community Edition cost?

Nothing to Nodaro. It has no credit system, no Nodaro fees and no watermark. You pay your model providers directly, or pay in credits for what runs through a Nodaro Cloud connection.
