Skip to content

AckeeCZ/configuru

Repository files navigation

Configuru

Manage the configuration of your Nodejs application with multiple environments and custom preferences, utilizing Configuru in CI and development as well!

Features

Configuru is a library for configuration management. Merge default project configuration with your user config, you can link yo your project. Atop of that, override your configuration with system environment variables.

  • 😌 Tailored for multi-developer comfort
  • ✨ Cast and transforms inputs to correct type
  • 💙 Typescript friendly
  • 💪 Designed for multi-environment apps
  • 🙈 Anonymized configuration for logger
  • 💬 JSONC support

Getting started

  1. Install
npm install configuru
  1. Create .env.jsonc in root of your project, add defaults or placeholders.
{
  // HTTP server
  "SERVER_PORT": 3000 // port the server will be listening on
}
  1. (optional) As a developer (or environment), create a custom override file (e.g. ~/.env/my-project.jsonc) and save the path in your CFG_JSON_PATH.

  2. Create a configuration module (e.g. config.ts)

import { createLoader, values } from 'configuru'

// create loader that cascades overrides and creates a config storage
const loader = createLoader()

// Pass configuration schema to `values` transformer to get configuration
export default values({
  server: {
    // use loader accessors, place them in custom structure
    // loader parses correct type from store
    port: loader.number('SERVER_PORT'),
  },
})
  1. Use your configuration params throughout your app
import config from './config' // e.g. { server: { port: 3000 } }

console.log(config.server.port) // 3000

Docs

See also

  • config - Simple JSON config loader using NODE_ENV
  • dotenv - Load your configuration file to process.ENV
  • cosmiconfig - Traverse your filesystem to load find your lost configuration file
  • configstore - KV storage for configuration
  • figgy-pudding - Config object builder / storage

Know other popular projects that solve the same issue? Open a PR to help people find what they need!

License

This project is licensed under MIT.