Environment Variables

To set a value to an environment variable, use the following syntax:

1env.YOUR_VARIABLE_NAME
Environment variables with spaces in their names are not supported.

Example

Using an environment variable for API key:

1client<llm> MyCustomClient {
2 provider "openai"
3 options {
4 model "gpt-5-mini"
5 // Set the API key using an environment variable
6 api_key env.MY_SUPER_SECRET_API_KEY
7 }
8}

Setting Environment Variables

In the VSCode Playground

Once you open a .baml file in VSCode, you should see a small button over every BAML function: Open Playground. Then you should be able to set environment variables in the settings tab.

VSCode Code Lens

Or type BAML Playground in the VSCode Command Bar (CMD + Shift + P or CTRL + Shift + P) to open the playground.

For Boundary Studio Integration

To send logs and traces to Boundary Studio, you need to set the BOUNDARY_API_KEY environment variable. This key is provided when you create an API key in your Boundary Studio dashboard.

$# .env.local
>BOUNDARY_API_KEY=your_api_key_here

For Your App (Default)

BAML will do its best to load environment variables from your program. Any of the following strategies for setting env vars are compatible with BAML:

  • Setting them in your shell before running your program
  • In your Dockerfile
  • In your next.config.js
  • In your Kubernetes manifest
  • From secrets-store.csi.k8s.io
  • From a secrets provider such as Infisical / Doppler
  • From a .env file (using dotenv CLI)
  • Using account credentials for ephemeral token generation (e.g., Vertex AI Auth Tokens)
  • python-dotenv package in Python or dotenv package in Node.js
$export MY_SUPER_SECRET_API_KEY="..."
>python my_program_using_baml.py
1from dotenv import load_dotenv
2from baml_client import b
3
4load_dotenv()

Error Handling

Errors for unset environment variables are only thrown when the variable is accessed. If your BAML project has 15 environment variables and 1 is used for the function you are calling, only that one environment variable will be checked for existence.