# Build settings

These live under **Advanced** on the Create page because detection usually fills them correctly. Come here when a build needs something non-standard. What actually runs during a build is on [Builds](/platform/deployments/builds).

Which fields you see depends on the framework's deployment type:

| Deployment type | Fields used |
| --- | --- |
| **Static** - built once, served from the CDN | Install command, build command, output directory |
| **Container** - runs a server | Build command (inside the image build), port |

## Port

The port **inside the container** your server must listen on. Light Cloud routes all traffic to it.

Detection reads the framework's default - a few examples:

| Framework | Default port |
| --- | --- |
| Next.js, Nuxt, SvelteKit, Remix | `3000` |
| Express, Go, Spring Boot, Laravel, ASP.NET | `8080` |
| Django, Flask, FastAPI | `8000` |
| AdonisJS | `3333` |

If your server listens somewhere else, set it here - a mismatch shows up as a failed health check or an unreachable app after an otherwise green deploy. Most frameworks also respect the `PORT` [environment variable](/platform/environment-variables#build-time-and-runtime), which is set to this value at runtime.

**Example:** `3000`

## Install command

Runs first on every deploy to install dependencies.

Left empty, it follows your lockfile:

| Lockfile | Install |
| --- | --- |
| `pnpm-lock.yaml` | pnpm |
| `yarn.lock` | yarn |
| `package-lock.json` | npm (`npm ci`) |

Override it to pass flags or run extra steps.

**Example:** `npm ci --ignore-scripts`

## Build command

Runs on every deploy to produce the app.

For static sites it must fill the output directory. For containers it runs while the image is built (and your Dockerfile is used as-is if the repository has one - see [Deploy with a Dockerfile](/platform/frameworks/docker)). Chain steps with `&&` when a build needs more than one command.

**Example:** `npm run build`

## Output directory

Static sites only: the folder the build writes the finished site into. Its contents are exactly what the CDN serves - nothing outside it is deployed.

Detection knows each framework's default:

| Framework | Output directory |
| --- | --- |
| React, Vue, Svelte, SolidJS, Qwik, Astro (Vite-based) | `dist` |
| Angular | `dist/browser` |
| Next.js static export | `out` |
| Gatsby | `public` |
| Docusaurus | `build` |
| Eleventy | `_site` |
| Plain HTML | `.` (the root) |

Set it when a config changes the destination.

**Example:** `dist`

## Custom domain

Serves the app on a domain you own as well as the generated `*.light-cloud.io` URL. The domain goes live once your DNS points at the platform - the full walkthrough, including DNS records and certificates, is on [Custom domains](/platform/custom-domains).

**Example:** `app.example.com`

## Related

- [Builds](/platform/deployments/builds): The pipeline these settings feed - steps, caching, failures.
- [Frameworks](/platform/frameworks): Detection sources and defaults for every framework.
- [Environment variables](/platform/environment-variables): Values available at build time and at runtime.
- [Application settings](/create/application-settings): Name, root directory, framework, size, region.
