Build-Time Environment Validation with better-env
Use better-env validate to fail fast when required environment variables are missing or invalid.
Install and initialize
bash
bun add better-env
bun run env:initbun add better-env
bun run env:initenv:init runs bunx --bun better-env init -y, validates adapter prerequisites, and ensures your project is linked to the provider.
Add validation scripts
json
{
"scripts": {
"prebuild": "bun run env:validate:prod",
"env:validate": "bunx --bun better-env validate --environment=development",
"env:validate:prod": "bunx --bun better-env validate --environment=production"
}
}{
"scripts": {
"prebuild": "bun run env:validate:prod",
"env:validate": "bunx --bun better-env validate --environment=development",
"env:validate:prod": "bunx --bun better-env validate --environment=production"
}
}Validate locally
bash
bun run env:validate
bun run env:validate:prodbun run env:validate
bun run env:validate:prodbetter-env validate:
- Loads
.env*files using Next.js semantics - Imports
src/lib/*/config.tsmodules - Runs
configSchemavalidation in each module - Reports missing or invalid values
- Warns about unused variables
Typical fix flow
When validation fails:
- Pull the latest variables:
bun run env:pull - Re-run validation:
bun run env:validate - Add/update missing values remotely via
bunx --bun better-env upsert ... - Pull + validate again
This replaces custom scripts/validate-env.ts scripts and keeps validation logic in the better-env CLI.