Skip to content

Database Namespace

The database namespace provides database providers for common database services.

ts
import { database } from "nevr-env/plugins";

Providers

ProviderDescription
database.postgres()PostgreSQL with Docker/Podman auto-discovery
database.redis()Redis with Upstash and cluster support
database.supabase()Supabase Backend-as-a-Service

PostgreSQL

PostgreSQL database with Docker/Podman auto-discovery, connection pooling, and Prisma support.

Basic Usage

ts
import { createEnv } from "nevr-env";
import { database } from "nevr-env/plugins";

const env = createEnv({
  plugins: [database.postgres()],
  runtimeEnv: process.env,
});

// env.DATABASE_URL

Options

OptionTypeDefaultDescription
readReplicabooleanfalseInclude read replica URL
directUrlbooleanfalseInclude direct URL (for Prisma)
shadowDatabasebooleanfalseInclude shadow database URL
poolbooleanfalseInclude connection pool settings
sslbooleanfalseInclude SSL mode configuration
defaultPortnumber5432Default port for Docker discovery
dockerContainerNamestring-Custom Docker container name
variableNamesobject-Custom variable names
extendobject-Extend schema with custom fields

Environment Variables by Option

Default (no options)

VariableRequiredFormatDescription
DATABASE_URLpostgres:// or postgresql://Connection string

readReplica: true

VariableRequiredDescription
DATABASE_READ_REPLICA_URLRead replica connection string

directUrl: true

VariableRequiredDescription
DIRECT_URLDirect connection URL (bypasses PgBouncer)

shadowDatabase: true

VariableRequiredDescription
SHADOW_DATABASE_URLShadow database for Prisma migrations

pool: true

VariableRequiredDefaultDescription
DATABASE_POOL_SIZE10Connection pool size
DATABASE_POOL_MIN2Minimum connections
DATABASE_POOL_MAX10Maximum connections
DATABASE_CONNECTION_TIMEOUT10000Connection timeout (ms)
DATABASE_IDLE_TIMEOUT10000Idle timeout (ms)

ssl: true

VariableRequiredDefaultDescription
DATABASE_SSL_MODEpreferSSL mode (disable/prefer/require/verify-full)

Auto-Discovery

PostgreSQL plugin automatically discovers databases from:

  • Docker / Podman containers - Looks for containers with "postgres" or "pg" in name (auto-detects runtime)
  • Environment variables - Existing DATABASE_URL
  • Local defaults - postgresql://postgres:postgres@localhost:5432/postgres

Examples

ts
// Prisma with connection pooling
database.postgres({
  directUrl: true,
  pool: true,
})

// With read replicas
database.postgres({
  readReplica: true,
  ssl: true,
})

// Custom variable names
database.postgres({
  variableNames: {
    url: "PG_URL",
    directUrl: "PG_DIRECT_URL",
  }
})

// Extend with custom fields
database.postgres({
  extend: {
    DATABASE_SCHEMA: z.string().default("public"),
    DATABASE_DEBUG: z.coerce.boolean().default(false),
  }
})

Redis

Redis with Docker/Podman auto-discovery, cluster support, and Upstash integration.

Basic Usage

ts
const env = createEnv({
  plugins: [database.redis()],
  runtimeEnv: process.env,
});

// env.REDIS_URL

Options

OptionTypeDefaultDescription
clusterbooleanfalseInclude cluster configuration
tlsbooleanfalseRequire TLS connections
upstashbooleanfalseInclude Upstash REST API config
poolbooleanfalseInclude connection pool settings
keyPrefixbooleanfalseInclude key prefix for namespacing
sentinelbooleanfalseInclude sentinel configuration
variableNamesobject-Custom variable names
extendobject-Extend schema with custom fields

Environment Variables by Option

Default (no options)

VariableRequiredFormatDescription
REDIS_URLredis:// or rediss://Redis connection URL

cluster: true

VariableRequiredDescription
REDIS_CLUSTER_NODESComma-separated list of cluster nodes

tls: true

VariableRequiredFormatDescription
REDIS_TLS_URLrediss://TLS-enabled Redis URL

upstash: true

VariableRequiredDescription
UPSTASH_REDIS_REST_URLUpstash REST API URL
UPSTASH_REDIS_REST_TOKENUpstash REST API token

pool: true

VariableRequiredDefaultDescription
REDIS_MAX_CONNECTIONS10Maximum connections
REDIS_MIN_CONNECTIONS2Minimum connections

keyPrefix: true

VariableRequiredDescription
REDIS_KEY_PREFIXKey prefix for namespacing

sentinel: true

VariableRequiredDescription
REDIS_SENTINEL_MASTERSentinel master name

Auto-Discovery

Redis plugin discovers from:

  • Docker / Podman containers - redis, bitnami/redis images (auto-detects runtime)
  • Cloud providers - Upstash, Heroku Redis, Redis Cloud

Examples

ts
// Upstash serverless Redis
database.redis({
  upstash: true,
})

// Cluster with TLS
database.redis({
  cluster: true,
  tls: true,
})

// With caching configuration
database.redis({
  keyPrefix: true,
  extend: {
    REDIS_CACHE_TTL: z.coerce.number().default(3600),
  }
})

Supabase

Supabase Backend-as-a-Service with database, storage, and auth.

Basic Usage

ts
const env = createEnv({
  plugins: [database.supabase()],
  runtimeEnv: process.env,
});

// env.SUPABASE_URL
// env.SUPABASE_ANON_KEY

Options

OptionTypeDefaultDescription
serviceRolebooleanfalseInclude service role key
jwtSecretbooleanfalseInclude JWT secret
databasebooleanfalseInclude direct database URL
poolerbooleanfalseInclude pooler connection URL
storagebooleanfalseInclude storage bucket config
realtimebooleanfalseInclude realtime configuration
variableNamesobject-Custom variable names
extendobject-Extend schema with custom fields

Environment Variables by Option

Default (no options)

VariableRequiredFormatDescription
SUPABASE_URL*.supabase.coSupabase project URL
SUPABASE_ANON_KEYJWT (eyJ...)Anonymous key for client-side

serviceRole: true

VariableRequiredFormatDescription
SUPABASE_SERVICE_ROLE_KEYJWT (eyJ...)Service role key (bypasses RLS)

WARNING

Never expose the service role key on the client-side!

jwtSecret: true

VariableRequiredDescription
SUPABASE_JWT_SECRETJWT secret (min 32 chars)

database: true

VariableRequiredFormatDescription
SUPABASE_DATABASE_URLpostgresql://Direct database connection

pooler: true

VariableRequiredFormatDescription
SUPABASE_POOLER_URLpostgresql://*:6543Pooler connection (serverless)

storage: true

VariableRequiredDescription
SUPABASE_STORAGE_BUCKETDefault storage bucket name

Examples

ts
// Full server-side setup
database.supabase({
  serviceRole: true,
  database: true,
})

// Serverless with pooler
database.supabase({
  pooler: true,
  storage: true,
})

// Custom redirect URLs
database.supabase({
  extend: {
    SUPABASE_REDIRECT_URL: z.string().url(),
    SUPABASE_SITE_URL: z.string().url(),
  }
})

Released under the MIT License.