Observable configuration

Usage no npm install needed!

<script type="module">
  import vigourConfig from '';


js-standard-style npm version


vigour-config allows you to easily make highly configurable services that are easy to test and launch in a variety of ways. Let's make an example service to understand how it works:

Requirements: Design your service as a class receiving a config object in the constructor


'use strict'
var Config = require('vigour-config')
module.exports = exports = Service

function Service (config) {
  var myIP = ip.address()
  // If the object received is not a `vigour-config` observable
  if (!(config instanceof Config)) {
    // Make the config object a `vigour-config` observable
    config = new Config(config)
  this.config = config // an observable
  console.log('someProperty', this.config.someProperty.val) // Get property values with `.val`
  var plainConfig = this.config.plain() // Turn observable into a regular object with `.plain()`
  console.log('someProperty', plainConfig.someProperty) // Now you don't need the `.val`
Service.prototype.start = function () { /* ... */ }

see observable

Making a binary executable for your service


#!/usr/bin/env node
'use strict'

var Service = require('../')
var service = new Service()

Provide default configuration values, command-line argument descriptions and environment variable names

You can configure the configurations options for your service in its package.json package.json

  "vigour": {
    "someProperty": {
      "val": "default value",
      "description": "Printing during the Service instance creation",
    "deeper": {
      "property": {
        "val": "default",
        "description": "Currently not used",
        "_env": "MY_SERVICE_DEEP_PROPERTY"

Configure and launch your service

Using the binary executable

Using only default values


Environment variables

export MY_SERVICE_SOME_PROPERTY='Configured via env var'

Command line arguments

./bin/executable.js --someProperty 'Configured via CLI arg' 'CLI ARG'
./bin/executable.js --deeper '{"property":"CLI ARG"}'

Config file(s)

./bin/executable.js --mergeFiles config.json


  "someProperty": "Configured via a config file"

Multiple config files

./bin/executable.js --mergeFiles '["config.json","moreConfig.js"]'

Requiring your module

Using only default values

var Service = require('./lib/')
var service = new Service()

Passing in configuration

var Service = require('./lib/')
var config = {
  someProperty: 'via params',
  deeper: {
    property: 'via params!'
var service = new Service(config)