# Environment Who a run acts as is never read from the environment; these variables configure hosts only. | variable | read by | what | |---|---|---| | `ATLIBS_SERVER_STATE` | `atlibs`, Node CLI, node-hono | the state dir (default `~/.atlibs-server`): sealed sessions, attestation and did:keys, the records ledger. Keep it private; share it between processes to share sessions | | `ATLIBS_ORIGIN` | `atlibs serve`, node-hono | the public origin (same as `--origin`): OAuth client ids and callbacks live on it | | `ATLIBS_BUDGET` | `atlibs`, Node CLI | JSON merged over a run's budget; `"unlimited"` for `calls`, `callsPerMinute`, `events`, `wallMs`; `ioBytes` (up to 16 MiB) for bigger events ([limits](limits.md)) | | `ATLIBS_HTTP` | `atlibs`, Node CLI | JSON, or `@file` of it: the origins `com.fedfork.exec.http.fetch` may reach, each with the headers the host adds (`{"https://api.anthropic.com":{"headers":{"x-api-key":"..."}}}`) or a service-auth token it mints per request with the run's session (`{"https://cocore.dev":{"serviceAuth":{"aud":"did:web:cocore.dev","lxm":"dev.cocore.inference.dispatch"}}}`); a module reaches those its module.json `http` lists too ([calls](../modules/calls.md#plain-http)). Keep the file private | | `ATLIBS_HELD` | `atlibs`, Node CLI | JSON, or `@file` of it: `{ name: value }`, the [held values](../modules/calls.md#held-values) each run starts with (a composition's: the root's run); counted against `heldBytes` | | `ATLIBS_WASM_CONCURRENCY` | `atlibs`, Node | wasm runs executing at once per process (default: the core count); not a positive integer: exit 1 at startup | | `ATLIBS_ALLOW_PRIVATE` | `atlibs`, Node | `1`: DID, PDS and blob lookups may use http and private addresses (local development, tests) | | `ATLIBS_PLC_URL` | `atlibs` | the PLC directory (default `https://plc.directory`) | | `ATLIBS_HANDLE_RESOLVER` | `atlibs` | where handles resolve (default `https://public.api.bsky.app`); the DID document must claim the handle back | | `ATLIBS_BROWSER` | `atlibs login` | the command that opens the sign-in URL (default `open` / `xdg-open`); the URL is printed either way | | `ATLIBS_IROH_KEY` | iroh transport | the ssh private key for iroh sessions (default `/iroh_ed25519`) | | `ATLIBS_TRANSPORTS` | Node CLI | comma-separated module paths, each exporting `transport` ([Transports](../transports.md)) | | `ATLIBS_STAGE` | node-hono | the stage.json to serve (default `staged/stage.json`) | | `ATLIBS_EXTRA_CA` | `atlibs` | tests only: a PEM file of extra roots trusted for `wss://` | | `PORT` | node-hono | listen port (default 8788) | | `XDG_CACHE_HOME` | `atlibs publish` | its cache: `$XDG_CACHE_HOME/atlibs//` (default `~/.cache/atlibs//`) | | `CONTAINER_ENGINE` | `atlibs publish`, `atlibs verify` | the container engine (default: the first of podman, docker, `container` whose `info` answers) | Previous: [Limits](limits.md) | Next: [Security](security.md)