Skip to content

Custom Environment Variables

Each scale set takes a JSON record of extra environment variables Runaway injects into every runner — chiefly to point package managers at your own registry proxies, so jobs pull dependencies from your network instead of the public internet.

{
"npm_config_registry": "http://verdaccio.lan:4873",
"PIP_INDEX_URL": "http://devpi.lan:3141/root/pypi/+simple/",
"GOPROXY": "http://athens.lan:3000"
}

Runaway validates the record when you save the scale set:

  • Keys must match ^[A-Za-z_][A-Za-z0-9_]*$ — a letter or underscore followed by letters, digits, or underscores.
  • Each value is at most 4 KB.
  • At most 32 keys.
  • At most 32 KB total across all keys and values.
  • Reserved auth and runner keys are rejected. Keys that control runner registration or carry credentials can’t be overridden here; Runaway refuses them at validation and filters them again at spawn time.

Runaway builds each runner’s environment in three layers, last writer wins:

Reserved keys are the one exception: filtered out regardless of layer, so custom env cannot override the base contract’s auth or registration variables.

Custom env is stored as plaintext and logged keys-only. It is the right place for registry URLs, proxy hosts, and non-sensitive tuning — not for tokens, passwords, or API keys.

Runaway doesn’t bundle a registry proxy — it composes with whatever you already run. The recipes walk through wiring each one through custom env: