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_URL✅postgres:// or postgresql://Connection string

readReplica: true ​

VariableRequiredDescription
DATABASE_READ_REPLICA_URL✅Read replica connection string

directUrl: true ​

VariableRequiredDescription
DIRECT_URL✅Direct connection URL (bypasses PgBouncer)

shadowDatabase: true ​

VariableRequiredDescription
SHADOW_DATABASE_URL✅Shadow database for Prisma migrations

pool: true ​

VariableRequiredDefaultDescription
DATABASE_POOL_SIZE❌10Connection pool size
DATABASE_POOL_MIN❌2Minimum connections
DATABASE_POOL_MAX❌10Maximum connections
DATABASE_CONNECTION_TIMEOUT❌10000Connection timeout (ms)
DATABASE_IDLE_TIMEOUT❌10000Idle timeout (ms)

ssl: true ​

VariableRequiredDefaultDescription
DATABASE_SSL_MODE❌preferSSL 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_URL✅redis:// or rediss://Redis connection URL

cluster: true ​

VariableRequiredDescription
REDIS_CLUSTER_NODES✅Comma-separated list of cluster nodes

tls: true ​

VariableRequiredFormatDescription
REDIS_TLS_URL✅rediss://TLS-enabled Redis URL

upstash: true ​

VariableRequiredDescription
UPSTASH_REDIS_REST_URL✅Upstash REST API URL
UPSTASH_REDIS_REST_TOKEN✅Upstash REST API token

pool: true ​

VariableRequiredDefaultDescription
REDIS_MAX_CONNECTIONS❌10Maximum connections
REDIS_MIN_CONNECTIONS❌2Minimum connections

keyPrefix: true ​

VariableRequiredDescription
REDIS_KEY_PREFIX❌Key prefix for namespacing

sentinel: true ​

VariableRequiredDescription
REDIS_SENTINEL_MASTER✅Sentinel 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_KEY✅JWT (eyJ...)Anonymous key for client-side

serviceRole: true ​

VariableRequiredFormatDescription
SUPABASE_SERVICE_ROLE_KEY✅JWT (eyJ...)Service role key (bypasses RLS)

WARNING

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

jwtSecret: true ​

VariableRequiredDescription
SUPABASE_JWT_SECRET✅JWT secret (min 32 chars)

database: true ​

VariableRequiredFormatDescription
SUPABASE_DATABASE_URL✅postgresql://Direct database connection

pooler: true ​

VariableRequiredFormatDescription
SUPABASE_POOLER_URL✅postgresql://*:6543Pooler connection (serverless)

storage: true ​

VariableRequiredDescription
SUPABASE_STORAGE_BUCKET❌Default 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.