I like continuous-integration, Travis and semantic-release . They make new code available immediately, after automated testing. I'm working on VeraInView , and I hit a snag I wanted to note. Normally, if you set up Travis and end with 'npm run semantic-release', it will publish your new module to NPM. However, with this project I got a 'forbidden' error returned from NPM. I am using an Org for this project, so its package name is @doe-casl/verain-view. That namespace means that the package is by default private, and as a result 'npm publish' defaults to private - which requires a paid npm account. The solution is to publish your package manually the first time: npm publish --access public --tag 1.0.0 I left off the --tag argument, and ended up with the first version being '0.0.0-semantic-release', which is why I added it above. Hope that helps!