> ## Documentation Index
> Fetch the complete documentation index at: https://ancplua.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Environment variables

# Environment variables

Datzi pulls environment variables from multiple sources. The rule is **never override existing values**.

## Precedence (highest → lowest)

1. **Process environment** (what the Gateway process already has from the parent shell/daemon).
2. **`.env` in the current working directory** (dotenv default; does not override).
3. **Global `.env`** at `~/.datzi/.env` (aka `$DATZI_STATE_DIR/.env`; does not override).
4. **Config `env` block** in `~/.datzi/datzi.json` (applied only if missing).
5. **Optional login-shell import** (`env.shellEnv.enabled` or `DATZI_LOAD_SHELL_ENV=1`), applied only for missing
   expected keys.

If the config file is missing entirely, step 4 is skipped; shell import still runs if enabled.

## Config `env` block

Two equivalent ways to set inline env vars (both are non-overriding):

```json5 theme={null}
{
  env: {
    vars: {}
  }
}
```

## Shell env import

`env.shellEnv` runs your login shell and imports only **missing** expected keys:

```json5 theme={null}
{
  env: {
    shellEnv: {
      enabled: true,
      timeoutMs: 15000
    }
  }
}
```

Env var equivalents:

* `DATZI_LOAD_SHELL_ENV=1`
* `DATZI_SHELL_ENV_TIMEOUT_MS=15000`

## Env var substitution in config

You can reference env vars directly in config string values using `${VAR_NAME}` syntax:

```json5 theme={null}
{
  gateway: {
    auth: {
      token: '${DATZI_GATEWAY_TOKEN}'
    }
  }
}
```

See [Configuration: Env var substitution](/datzi/gateway/configuration#env-var-substitution-in-config) for full details.

## Path-related env vars

| Variable            | Purpose                                                                                                                                                                    |
| ------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `DATZI_HOME`        | Override the home directory used for all internal path resolution (`~/.datzi/`, agent dirs, sessions, credentials). Useful when running Datzi as a dedicated service user. |
| `DATZI_STATE_DIR`   | Override the state directory (default `~/.datzi`).                                                                                                                         |
| `DATZI_CONFIG_PATH` | Override the config file path (default `~/.datzi/datzi.json`).                                                                                                             |

### `DATZI_HOME`

When set, `DATZI_HOME` replaces the system home directory (`$HOME` / `os.homedir()`) for all internal path
resolution. This enables full filesystem isolation for headless service accounts.

**Precedence:** `DATZI_HOME` > `$HOME` > `USERPROFILE` > `os.homedir()`

**Example** (macOS LaunchDaemon):

```xml theme={null}

<key>EnvironmentVariables</key>
<dict>
<key>DATZI_HOME</key>
<string>/Users/kira</string>
</dict>
```

`DATZI_HOME` can also be set to a tilde path (e.g. `~/svc`), which gets expanded using `$HOME` before use.

## Related

* [Gateway configuration](/datzi/gateway/configuration)
* [FAQ: env vars and .env loading](/datzi/help/faq#env-vars-and-env-loading)
* [Models overview](/datzi/concepts/models)
