Skip to content

runtime-env

runtime-env helps frontend teams externalize configuration so one build artifact can be reused across environments.

In Twelve-Factor terms, config should stay separate from code so teams can build once and deploy anywhere.

What runtime-env aims to solve

Different stages need different configs

If the API URL is baked into the build, teams often rebuild for every stage or risk shipping the wrong backend URL.

Before

ts
const response = await fetch(`${process.env.API_BASE_URL}/users`);

After

ts
const response = await fetch(`${runtimeEnv.API_BASE_URL}/users`);

If the analytics ID is baked into HTML, teams can easily send data from the wrong stage to the wrong property.

Before

html
<script>
  gtag("config", "G-PROD123456");
</script>

After

html
<script>
  gtag("config", "<%= runtimeEnv.GA_MEASUREMENT_ID %>");
</script>

Nested config should be validated before release

If a nested config object is malformed or swapped incorrectly, validating it ahead of time helps prevent production downtime and keeps app code typed.

Before

ts
// If the env key is missing, this can lead to a runtime error.
const app = initializeApp(JSON.parse(process.env.FIREBASE_CONFIG!));

After

ts
// runtime-env even validates missing keys and incorrect types in nested objects.
const app = initializeApp(runtimeEnv.FIREBASE_CONFIG);

Quickstart