node package manager
Share your code. npm Orgs help your team discover, share, and reuse code. Create a free org »





Create layers of ENV variables saved to etcd and deploy docker containers using them


$ npm install denver -g


denver will save ENV variables for a stack under a key in etcd.

it will merge stacks in order so one stack can inherit from another.

it will spit out stacks environment in a few useful formats.


var den = denver(options)

create a new denver object using the options:

  • host - the etcd host (defaults to
  • port - the etcd port (defaults to 4001)
  • key - the base key (default to /denver)

You can always use the envrionment variables to set these values:

var denver = require('denver');
var den = denver({

den.set(stack, key, value, callback)

set a value for a stack

den.set('app1', 'test', 'hello', function(err){
    // value is written 

den.get(stack, key, callback)

get a value from a stack

den.get('app1', 'test', function(err, value){
    // value is here! 

list all of the stacks, stacks){
    // stacks is an array of stack names 

den.rm(stack, callback)

remove a stack from the db

den.rm('app1', function(err){
    // the app is gone 

den.env(stacks, callback)

get an object with the values for the environment that is created from merging the stacks array.

], function(err, env){
    // env is an object that is a merged stack env 

You can also just get a single stack env:

den.env('app1', function(err, env){


den.on('set', function(stack, key, value){})

emitted when a value is set

den.on('del', function(stack, key, value){})

emitted when a value is deleted


denver ls

List the stack names we have environments for

$ denver ls

denver rm

Remove a stack from the database

$ denver rm myapp

denver get

Print the value of a single environment variable

$ denver get myapp ADMIN_EMAIL

denver set

Write the value of a single environment variable

$ denver set myapp ADMIN_EMAIL

denver del

Remove a value from an environment

$ denver del myapp ADMIN_EMAIL

denver env

Print the whole environment for a stack

$ denver env myapp

You can 'merge' several stacks with the env command - this lets you have 'global' envs or whatever:

$ denver env defaultenv myapp

When you merge - the last stack will take precendence - so myapp -> ADMIN_EMAIL would overwrite defaultenv -> ADMIN_EMAIL.

You can merge as many stacks as you want.

denver docker

You can also print the environment in a docker friendly format:

$ denver docker defaultenv myapp

This would output:

-e -e

denver inject

Read env vars one per line from stdin

file - myenv.txt:

$ cat myenv.txt | denver inject myapp
$ denver docker myapp

This would print:

-e HELLO=world -e