You are viewing the documentation for v3. See the latest version (v4).

You deployed. An env var was missing. Prod crashed at 3am.
envguardr stops that before it happens.

$ npx envguardr validate ./env.schema.js

❌ API_URL is required
❌ PORT must be a valid number
✅ All environment variables are valid.

Blocks bad deploys

Fails CI before a misconfigured app ever reaches production. Exits with code 1 on failure.

Strict by design

Rejects 1e5, yes, on — no silent type coercion surprises.

Zero config overhead

One plain JS file, no classes, decorators, or build steps required.

Works everywhere

npm script, CI step, Docker image (amd64 + arm64), or npx.

No telemetry

Validation runs locally. Environment data never leaves your machine.

Supply chain transparency

Signed images, SBOM, and provenance — fully auditable end to end.

v3 receives security fixes only, for six months after the release of v4.0.0. See the v4 documentation and its migration guide.

Quick start

Create an env.schema.js file:

export default {
  API_URL: { type: 'url', required: true },
  PORT:    { type: 'number', default: 3000 },
  NODE_ENV: {
    type: { enum: ['development', 'production', 'test'] },
    default: 'development',
  },
}

Run validation:

npx envguardr validate ./env.schema.js

Install

npm install --save-dev envguardr

Schema

Schemas are plain JavaScript modules with full access to built-in validators:

import { validators } from 'valitype'

export default {
  API_URL: { type: 'url', required: true },
  PORT:    { type: 'number', default: 3000 },
  NODE_ENV: {
    type: { enum: ['development', 'production', 'test'] },
    default: 'development',
  },
  DEBUG:   { type: 'boolean', default: false },
  API_KEY: {
    type: 'custom',
    validator: validators.regex(/^[A-Za-z0-9]{32}$/, 'Must be 32 alphanumeric characters'),
    required: true,
  },
}

CI/CD

- name: Validate environment
  run: npx envguardr validate ./env.schema.js

Or as an npm script:

{
  "scripts": {
    "check-env": "envguardr validate ./env.schema.js"
  }
}

Docker

docker run --rm \
  --env-file .env \
  -v "$PWD:/app" \
  docker.io/fontebasso/envguardr validate ./env.schema.js
Platform Status
linux/amd64 Supported
linux/arm64 Supported

Validation types

Type Accepts Notes
string Any string
number "3000" Decimal only; rejects 0xff, 1e5
boolean "true" / "false" Strict; rejects 1, yes, on
url "https://..." Requires http or https
{ enum: string[] } One listed value
custom Custom validator

All types support required and default.

Built-in validators

validators.regex(/^[A-Z]{3}$/, 'Must be 3 uppercase letters')
validators.range(1, 65535, 'Must be a valid port')
validators.oneOf(['us-east-1', 'eu-west-1'], 'Unsupported region')
validators.date('YYYY-MM-DD', 'Invalid date format')
validators.json('Must be valid JSON')
validators.awsArn('lambda', 'Must be a valid Lambda ARN')
validators.all(validators.regex(/^[A-Z]/), validators.oneOf(['Alpha', 'Beta']))

Security & supply chain

  • npm Trusted Publishing with provenance (OIDC-based, no long-lived tokens)
  • Docker images with provenance and SBOM
  • Signed images via cosign / Sigstore (keyless, OIDC)
  • Distroless, non-root containers
  • GitHub Actions pinned by SHA
  • CodeQL scanning enabled

Verifying container images

cosign verify \
  --certificate-identity-regexp "https://github.com/fontebasso/envguardr/.github/workflows/.*" \
  --certificate-oidc-issuer "https://token.actions.githubusercontent.com" \
  docker.io/fontebasso/envguardr:latest

To report a vulnerability, see SECURITY.md.