CtroEnv
ctroenvType-Safe Environment Variables
Getting StartedQuick StartCore Concepts
defineEnv()string()number()boolean()pick()Chainable MethodsRefinementsError HandlingSchema Composition
CLI Overviewctroenv validatectroenv generatectroenv checkctroenv docsctroenv initCLI Configuration
Node AdapterVite AdapterNext.js Adapter
Migration from t3-envMigration from envalidMigration from dotenv

Vite Adapter

Use CtroEnv with Vite via the ctroenvPlugin for build-time validation.

  1. Docs
  2. Adapters

Vite Adapter

The @ctroenv/vite package provides a Vite plugin that validates environment variables at build time.

Installation

npm install @ctroenv/vite

Plugin

ctroenvPlugin()

function ctroenvPlugin(opts: CtroEnvPluginOptions): Plugin

Options

interface CtroEnvPluginOptions {
  schema: string | SchemaDefinition
  failOnError?: boolean
}
OptionTypeDefaultDescription
schemastring | SchemaDefinitionrequiredSchema file path or inline definition
failOnErrorbooleantrueWhether to fail the build on errors

Usage

// vite.config.ts
import { defineConfig } from "vite"
import { ctroenvPlugin } from "@ctroenv/vite"

export default defineConfig({
  plugins: [
    ctroenvPlugin({
      schema: "./src/env.ts",
      failOnError: true,
    }),
  ],
})

The plugin validates environment variables at buildStart, before the actual build begins. This catches missing or invalid variables early.

Inline Schema

You can pass the schema inline instead of a file path:

ctroenvPlugin({
  schema: {
    VITE_API_URL: string().url(),
    VITE_APP_NAME: string().min(1),
  },
})

Warning Mode

Set failOnError: false to warn instead of failing the build:

ctroenvPlugin({
  schema: "./src/env.ts",
  failOnError: false, // Warns but doesn't fail
})

viteSource()

Creates an EnvSource that first reads from Vite's import.meta.env, then falls back to process.env:

function viteSource()
import { defineEnv } from "@ctroenv/core"
import { viteSource } from "@ctroenv/vite"

const env = defineEnv(schema, {
  source: viteSource(),
})

This is used internally by the plugin but can also be used directly in your application code when you need to validate against Vite's environment.

How is this guide?

Edit on GitHub

Last updated on Jun 24, 2026

PreviousNode AdapterNextNext.js Adapter

On this page

InstallationPluginctroenvPlugin()OptionsUsageInline SchemaWarning ModeviteSource()