👋
Connective Configuration
DMNO is the missing middleware for your configuration and secrets
Configuration as Code
Make your config a living part of your codebase and stop relying on .env files
import { DmnoBaseTypes, defineDmnoService, switchBy, configPath, pick } from 'dmno';import { OnePasswordDmnoPlugin, OnePasswordTypes } from '@dmno/1password-plugin';
// use plugins to fetch sensitive config from secure locations like 1Passwordconst onePassSecrets = new OnePasswordDmnoPlugin('1pass', { token: configPath('OP_TOKEN') });
export default defineDmnoService({ schema: { APP_ENV: { // docs are built in, and flow into generated TypeScript types / IntelliSense description: 'our custom environment flag', extends: DmnoBaseTypes.enum(['development', 'preview', 'staging', 'production', 'test']), value: 'development', // default value }, SAAS_API_KEY: { // built-in types have validation helpers for many common needs extends: DmnoBaseTypes.string({ startsWith: 'pk_', isLength: 35 }), // sensitive items get special handling to prevent leaks sensitive: true, // load different values based on any other value value: switchBy('APP_ENV', { _default: 'my-dev-key', production: onePassSecrets.item(), }), }, LOGS_TAG: { // use a function to set a value - reference any other config value: () => `myapp-frontend_${DMNO_CONFIG.APP_ENV}`, }, PORT: { extends: DmnoBaseTypes.port, // pre-made types built-in for many common cases value: 4444, }, // re-use config from other services (if in a monorepo) API_URL: pick('api', 'PUBLIC_URL'), OP_TOKEN: { // re-use existing types with validation and docs info already built-in extends: OnePasswordTypes.serviceAccountToken, }, },});
Leak prevention and detection
Detect and prevent leaks before they happen, and automatically redact sensitive items in your logs.

Feature-rich IntelliSense
Get full-featured IntelliSense for your config in VS Code, without any additional setup.

DMNO works with everything
Many use cases don't require anything extra, but our drop-in integrations make things even simpler
Looking for something else? 💪 Join us on discord and help us build the next one!