Configuration management utilities for Node.js applications
Part of the SnapBack open-core ecosystem - type-safe configuration loading and validation.
npm install @snapback-oss/config
# or pnpm add @snapback-oss/configimport { loadConfig, validateConfig } from '@snapback-oss/config';
// Load configuration
const config = loadConfig({
env: process.env.NODE_ENV,
paths: ['.env', '.env.local'],
});
// Validate configuration
const validated = validateConfig(config, schema);- βοΈ Config Loading: Load from files and environment
- β Validation: Schema-based validation
- π Type-Safe: Full TypeScript support
- π Merging: Smart config merging
- π Defaults: Default value support
import { loadConfig } from '@snapback-oss/config';
const config = loadConfig({
// Config file paths (in order of priority)
paths: [
'.env.local', // Highest priority
'.env',
'config.json'
],
// Environment to load
env: 'production',
// Defaults
defaults: {
port: 3000,
host: 'localhost'
}
});import { validateConfig } from '@snapback-oss/config';
import { z } from 'zod';
// Define schema
const schema = z.object({
port: z.number().min(1024).max(65535),
host: z.string(),
apiKey: z.string().min(32)
});
// Validate
const validated = validateConfig(config, schema);
// TypeScript knows the validated types!import { getEnv } from '@snapback-oss/config';
// Get with default
const port = getEnv('PORT', '3000');
// Get required (throws if missing)
const apiKey = getEnv('API_KEY');
// Get typed
const debugMode = getEnv('DEBUG', 'false') === 'true';// config.ts
import { loadConfig, validateConfig } from '@snapback-oss/config';
import { z } from 'zod';
const schema = z.object({
database: z.object({
url: z.string().url(),
pool: z.number().default(10)
}),
redis: z.object({
host: z.string(),
port: z.number()
})
});
export const config = validateConfig(
loadConfig({ paths: ['.env'] }),
schema
);const config = loadConfig({
env: process.env.NODE_ENV,
paths: [
`.env.${process.env.NODE_ENV}.local`,
`.env.${process.env.NODE_ENV}`,
'.env.local',
'.env'
]
});const config = loadConfig({
defaults: {
server: {
port: 3000,
host: '0.0.0.0'
},
logging: {
level: 'info',
format: 'json'
}
},
paths: ['.env']
});// Define your config type
interface AppConfig {
port: number;
apiKey: string;
database: {
url: string;
pool: number;
};
}
// Type-safe loading
const config = loadConfig<AppConfig>({
paths: ['.env']
});
// TypeScript knows all the types
config.database.pool; // numberPORT=3000
DATABASE_URL=postgresql://localhost/db
API_KEY=secret123{
"port": 3000,
"database": {
"url": "postgresql://localhost/db",
"pool": 10
}
}- Use .env.local for secrets (gitignored)
- Validate all config before app starts
- Provide sensible defaults
- Use environment-specific files
- Never commit secrets to git
- β Configuration loading
- β Environment variable parsing
- β Schema validation
- β Config merging
- β Type coercion
See CONTRIBUTING.md
pnpm install
pnpm build
pnpm test- Documentation: docs.snapback.dev
- Main Repository: Marcelle-Labs/snapback.dev
- NPM: @snapback-oss/config
@snapback-oss/infrastructure- Logging utilities@snapback-oss/sdk- Client SDK
Apache-2.0 Β© SnapBack