# Environment Variables

This page covers the runtime knobs of the CLI. Looking to customize the build (Vite, Lingui)? See [customization](/serverless-apps/development/customization/).

## Environment variables

| Variable | Purpose |
|----------|---------|
| `CROWDIN_PERSONAL_TOKEN` | Authenticate with a personal access token instead of `login` - useful in CI |
| `CROWDIN_BASE_URL` | Crowdin API base URL, e.g. `https://<org>.api.crowdin.com` - set it when using a personal token with Crowdin Enterprise |
| `PORT` | Port `dev` starts from (8080 when unset) - if it is taken, `dev` moves to the next free one, while `--port` is exact |
| `CROWDIN_DEV_CORS_ORIGIN` | Extra origins allowed to fetch from the dev server |
| `CROWDIN_TEMPLATES_REPO` | GitHub `owner/name` repository `create` fetches starter templates from (default [`crowdin-community/serverless-apps-starter-kit`](https://github.com/crowdin-community/serverless-apps-starter-kit)) - useful for forks |
| `CROWDIN_TEMPLATES_REF` | Branch or tag of the templates repository (default `main`) |

`login` detects your Crowdin Enterprise organization automatically - no extra configuration needed.

:::note
Credentials stored by `login` take precedence over `CROWDIN_PERSONAL_TOKEN` - on a machine where you have signed in, the token is ignored. Run `logout` first to force the personal token.
:::

## The app's .env file

`CROWDIN_APP_ID` identifies the app the folder is linked to. It lives in the app's `.env` **file**, where `create` and `link` write it - the CLI reads it from that file only, so setting it as a shell or CI environment variable has no effect.

`.env` is gitignored in the starter templates, so it does not travel with the repository: teammates cloning the app (and [CI checkouts](/serverless-apps/development/ci/)) need to run `crowdin-serverless-apps login` and `link` once before `dev` or `publish` work.