Forge Home


Puppet Module to install Node.js with Node Version Manager (NVM)


248,218 latest version

4.3 quality score

We run a couple of automated
scans to help you access a
module's quality. Each module is
given a score based on how well
the author has formatted their
code and documentation and
modules are also checked for
malware using VirusTotal.

Please note, the information below
is for guidance only and neither of
these methods should be considered
an endorsement by Puppet.

Version information

  • 1.1.1 (latest)
  • 1.1.0 (deleted)
  • 1.0.0
  • 0.1.0
released Feb 20th 2016
This version is compatible with:
  • Puppet Enterprise 3.x
  • Puppet >=2.7.20 <5.0.0
  • , , , , ,

Start using this module

  • r10k or Code Manager
  • Bolt
  • Manual installation
  • Direct download

Add this module to your Puppetfile:

mod 'artberri-nvm', '1.1.1'
Learn more about managing modules with a Puppetfile

Add this module to your Bolt project:

bolt module add artberri-nvm
Learn more about using this module with an existing project

Manually install this module globally with Puppet module tool:

puppet module install artberri-nvm --version 1.1.1

Direct download is not typically how you would use a Puppet module to manage your infrastructure, but you may want to download the module in order to inspect the code.

Tags: nodejs, node, npm, nvm


artberri/nvm — version 1.1.1 Feb 20th 2016

Puppet NVM

Build Status

A puppet module to install (multiple versions of) Node.js with NVM (Node Version Manager).

Table of Contents

  1. Module Description - What the module does and why it is useful
  2. Setup - The basics of getting started with nvm
  3. Usage - Configuration options and additional functionality
  4. Reference - An under-the-hood peek at what the module is doing and how
  5. Limitations - OS compatibility, etc.
  6. Development - Guide for contributing to the module

Module Description

Node Version Manager (NVM) is a little bash script that allows you to manage multiple versions of Node.js on the same box. This Puppet module simplifies the task of installing it and allows to install unique or multiple versions of Node.js.


What nvm affects

  • Profile configuration: By default this module will write in the user's .bashrc file, this behaviour can be modified with the profile_path or manage_profile parameters as is explained bellow.

Warning: If your are going to manage Node.js with NVM is highly recommended to uninstall any native Node.js installation.

Beginning with NVM

To have Puppet install NVM with the default parameters, declare the nvm class (user is a required parameter):

class { 'nvm':
  user => 'foo',

The Puppet module applies a default configuration: installs NVM to the selected user's home and adds it to .bashrc. Use the Reference section to find information about the class's parameters and their default values.

You can customize parameters when declaring the nvm class. For instance, this declaration will also install Node.js v0.12.7 as set it as defaul node:

class { 'nvm':
  user         => 'foo',
  install_node => '0.12.7',


Installing an specific version of Node.js

This is the most common usage for NVM. It installs NVM to the ~/.nvm folder, makes it available for the user adding the script to the .bashrc file, installs a Node.js version and sets it as default ensuring the dependencies.

class { 'nvm':
  user         => 'foo',
  install_node => '0.12.7',

Installing multiple versions of Node.js

Once NVM is installed you can install as many Node.js versions as you want.

class { 'nvm':
  user => 'foo',
} ->

nvm::node::install { '0.12.7':
    user    => 'foo',
    set_default => true,
} ->

nvm::node::install { '0.10.36':
    user => 'foo',
} ->

nvm::node::install { 'iojs':
    user => 'foo',


class { 'nvm':
  user           => 'foo',
  node_instances => {
    '0.12.7' => {
      set_default => true,
    '0.10.36' => {},
    'iojs' => {},

Installing Node.js globally

It isn't the recommended way but you can install Node.js globally.

class { 'nvm':
  user => 'root',
  nvm_dir => '/opt/nvm',
  version => 'v0.29.0',
  profile_path => '/etc/profile.d/',
  install_node => '0.12.7',

Installing Node.js global npm packages

You can use this module with other Node.js puppet modules that allow to install NPM packages. For example with the puppetlabs-nodejs module.

class { 'nvm':
  user => 'root',
  nvm_dir => '/opt/nvm',
  version => 'v0.29.0',
  profile_path => '/etc/profile.d/',
  install_node => '0.12.7',

package { 'forever':
  ensure   => 'present',
  provider => 'npm',

Warning: This module does not allow to install npm packages, this example asumes that you have also installed puppetlabs-nodejs module.


Class: nvm

Guides the basic setup and installation of NVM on your system. It requires user as parameter.

When this class is declared with the default options, Puppet:

  • Installs the 0.29.0 version of NVM.
  • Adds the script to the .bashrc file.
  • Ensures packages git, make and wget.

You can simply declare the default nvm class:

class { 'nvm':
  user => 'foo',

You can install a default Node.js version in this class, by using the install_node param.

Parameters within nvm:


Sets the user that will install NVM.


Indicates the user's home. It needs to be an existing directory if the manage_user is not set to true.

Default: /home/${user} (or /root if the user is root).


Sets the directory where NVM is going to be installed.

Default: /home/${user}/.nvm.


Sets the profile file where the is going to be loaded. Only used when manage_profile is set to true (default behaivour).

Default: /home/${user}/.bashrc.


Version of NVM that is going to be installed. Can point to any git reference of the NVM project (or the repo set in ǹvm_repo parameter).

Default: v0.29.0.


Sets if the selected user will be created if not exists.

Default: false.


Sets if the module will manage the git, wget, make package dependencies.

Default: true.


Sets if the module will add the file to the user profile.

Default: true.


Sets the NVM repo url that is going to be cloned.



Sets if the repo should be fetched again.

Default: false.


Installs a default Node.js version. Could be set to any NVM Node.js version name.

Default: undef.


A hash with the node instances you want to install (it will be used to create nvm::node::install instances with create_resources).

Default: {}.

Define: nvm::node::install

Installs a Node.js version.

Parameters within nvm::node::install:


Sets the user that will install Node.js.


Sets the directory where NVM is going to be installed.

Default: /home/${user}/.nvm.


Node.js version. Could be set to any NVM Node.js version name.

Default: 0.12.7.

set_default [Since version 1.1.0]

Determines whether to set this Node.js version as default.

default [Deprecated since version 1.1.0 use set_default instead]

This parameter is now deprecated because is a reserved word, use set_default instead. Backguard compatibilty is added but throws a warning message.

Determines whether to set this Node.js version as default.

Default: false.


Determines whether to install Node.js from sources.

Default: false.


This module can not work on Windows and should work on LINUX systems.

This module is CI tested against open source Puppet on:

  • CentOS 6 and 7
  • Ubuntu 12.04 and 14.04
  • Debian 7

This module has been tested in several production servers (OpenLogic7 (Centos7) and Ubuntu 14.04) in Azure.

This module should also work properly in other distributions and operating systems, such as FreeBSD, Gentoo, and Amazon Linux, but is not formally tested on them.

Report an issue if this module does not work properly in any Linux distro.



This modules is an open project, and community contributions are highly appreciated.

For more information, please read the complete module contribution guide.

Running tests

This project contains tests for both rspec-puppet and beaker-rspec to verify functionality. For detailed information on using these tools, please see their respective documentation.

This project contains tests for rspec-puppet to verify functionality. For detailed information on using these tools, please see their respective documentation.

Testing quickstart

gem install bundler
bundle install
bundle exec rake test
./spec/ # this will take a long time