Nifty Procrastination Machine


    0.0.6 • Public • Published


    icnf is a nodejs module for supporting simple configeration in json format (but powerfull).

    License: GPL/BSD


    There already exists a module named config, but for me, it is too large -- i dont want supporting yml etc features, i just want a simple solution but exactly have what i want.

    So that's why i do this module. And of cause choice is yours.

    How to install

    npm install icnf

    How to use

    1. create several config files under etc/ directory in your project, for example:

      + etc/
        + production.json
        + testing.json
        + development.json
              comm/   -- this contains comm settings for all of the environments, but still configerable
                  + comm.json
                  + comm2.json
    2. use icnf in your code

      var icnf = require('icnf')(__dirname);
      // app root directory, that is <YOUR PROJECT>
      var config = icnf(); 
      // default is process.env.NODE_ENV || 'production', so it will automatically choose etc/production.json.
      var config = icnf('development'); 
      // choose etc/development.json explicitly

    How to use idiff

    There is also a tool named idiff under bin/ above v0.0.3. This tool only check the key in the config file. For example:

    $ idiff production
      checking /Users/yarco/Sites/js/icnf/test/etc/development.json
    - database.port
    ! database.more.port
    - keywords.1

    Argument production is the standard config file in this example. (That means you may treat that file as a standard.) This file should be located in etc/ (etc/production.json).

    • - means the key database.port is lost in development.json when comparing to production.json
    • ! means type does't match


    • Array like keys (ex. keywords here) will always treat as an object.
    • Key exists in development but not in production will be totally ignored.
    • extend part won't be checked. cause it is used for common part

    Here is development to production (you could also add more files there, ex. testing.json):

    $ idiff development
      checking /Users/yarco/Sites/js/icnf/test/etc/production.json
    - gf
    - database.more.kk
    ! database.more.port

    Extra notice

    • config file is <PROJECT>/etc/<ENV>.json, the name of etc is fixed
    • the directory for comm part is comm (<PROJECT>/etc/comm/<YOUR>.json), is also fixed
    • files in subdirectories under etc/ will be totally ignored when using idiff
    • You can use environment variable now (>= v0.0.5), just prefix with $, for example: { "NODE_ENV": "$NODE_ENV" }. $NODE_ENV will be expanded to its real value.


    • 0.0.5 to 0.0.6
      • add supporting multi-confs in extend keyword, see example: test/etc/production.json , key extend
        • add key extendEnvValue in config if you want to disable checking environment variable
    • 0.0.4 to 0.0.5
      • add support for environment variables, the value prefix with '$' will be expanded. (that means "KEY": "$VALUE" will be treated as "KEY": process.env.VALUE )
    • 0.0.3 to 0.0.4
      • move repos from yarcowang/icnf to Yet-Another-Org/node-icnf
      • change a bit README
      • add default argument in idiff (so, it will default choose process.env.NODE_ENV || 'production' without type production
    • 0.0.1 to 0.0.3
      • add idiff
      • add extend feature for common part, see example under tests/


    You could contact me through according to further debugging or maintance. Programming related topics are also welcomed.

    timezone: GMT+0800


    npm i icnf

    DownloadsWeekly Downloads






    Last publish


    • yarco