envil envil Docs

Built-in Schemas

Reference for string, number, URL, boolean, and parsed environment schemas.

All built-in schemas are Effect Schemas and may be used directly in a server or client fragment:

const appEnv = createEnv(
  server({
    PORT: port,
    DATABASE_URL: redacted(postgresUrl),
  }),
);

Strings

Name Type Default Description
requiredString string A present, non-empty string.

Use optional(schema) when absence is valid.

Numbers

Name Type Default Description
number number Any number parsed from a string.
positiveNumber number A number greater than zero.
integer number A whole number.
nonNegativeNumber number A number greater than or equal to zero.
port number A whole number from 1 through 65535.
values: {
  PORT: port,
  MAX_RETRIES: integer,
  RATE_LIMIT: positiveNumber,
  THRESHOLD: number,
}

Boolean

Name Type Default Description
boolean boolean Parses true, false, 1, or 0 without case sensitivity.
values: {
  DEBUG: boolean,
}

URLs

Name Type Default Description
url string HTTP or HTTPS URL.
postgresUrl string PostgreSQL connection URL.
redisUrl string Redis connection URL.
mongoUrl string MongoDB connection URL.
mysqlUrl string MySQL connection URL.
commaSeparatedUrls string[] Comma-separated HTTP and HTTPS URLs.

Server connection URLs should normally be redacted:

values: {
  DATABASE_URL: redacted(postgresUrl),
  REDIS_URL: redacted(redisUrl),
  WEBHOOK_URL: url,
}

Comma-separated values

Name Type Default Description
commaSeparated string[] Trimmed strings separated by commas.
commaSeparatedNumbers number[] Numbers separated by commas.
values: {
  ALLOWED_ORIGINS: commaSeparated,
  RETRY_DELAYS: commaSeparatedNumbers,
}

Parameterized schemas

stringEnum

values: {
  LOG_LEVEL: stringEnum(["debug", "info", "warn", "error"]),
}

json

import { Schema } from "effect";

values: {
  JSON_CONFIG: json(
    Schema.Struct({
      retries: Schema.Number,
      timeout: Schema.Number,
    }),
  ),
}

Effect Schema

Effect Schemas with context requirements are accepted. Schema outputs must not be functions:

values: {
  NODE_ENV: Schema.Literal("development", "production", "test"),
  API_KEY: Schema.String.check(Schema.isMinLength(32)),
}
Tip

Use Effect Schema directly when the built-in set does not express the desired validation and decoded type. Its errors and context requirements are preserved by the resulting environment Effect.