Skip to content

Getting Started

Deploying your app with invalid environment variables is a hassle. This package helps you to avoid that. Inspired by t3-env which I highly recommend using if zod is already a production dependency. Otherwise, valibot may more efficient for just environment variable checking.

Installation

Terminal window
bun add @enalmada/env-valibot

Usage

Define your schema

next.config.js
import './src/env.mjs';
...
src/env.mjs
// @ts-check
import { createEnvSchema, required, validateEnv } from 'env-valibot';
import { enumType, optional, string } from 'valibot';
const serverSchema = createEnvSchema({
LOG_LEVEL: enumType(['debug', 'info', 'warn', 'error']),
ANALYZE: optional(string()),
DATABASE_URL: required('DATABASE_URL'),
});
const clientSchema = createEnvSchema({
NEXT_PUBLIC_APP_ENV: required('NEXT_PUBLIC_APP_ENV'),
});
const serverEnv = validateEnv(
serverSchema,
{
LOG_LEVEL: process.env.LOG_LEVEL,
ANALYZE: process.env.ANALYZE,
DATABASE_URL: process.env.DATABASE_URL,
},
process.env.SKIP_ENV_VALIDATION
);
const clientEnv = validateEnv(
clientSchema,
{
NEXT_PUBLIC_APP_ENV: process.env.NEXT_PUBLIC_APP_ENV,
},
process.env.SKIP_ENV_VALIDATION
);
export { serverEnv, clientEnv };

required is a helper from this library that keeps DRY the message error returned if it doesn’t exist