diff --git a/software/dream/instance.cfg b/software/dream/instance.cfg
index 0142cb2b95e802c8cc94aeb8c10c439db17f5712..23e5734b48306218c570d2a6232f8f0b653b1b2a 100644
--- a/software/dream/instance.cfg
+++ b/software/dream/instance.cfg
@@ -3,6 +3,7 @@ parts =
   dream_simulation
   dream_platform
   dream_test_suite
+  grunt_watch
   publish-connection-parameter
 
 eggs-directory = ${buildout:eggs-directory}
@@ -28,6 +29,11 @@ command-line = ${buildout:bin-directory}/dream_platform --host $${dream_platform
 wrapper-path = $${directory:service}/dream_platform
 parameters-extra = true
 
+[grunt_watch]
+recipe = slapos.cookbook:wrapper
+command-line = bash -c 'cd ${dream-repository.git:location}; PATH=${nodejs:location}/bin/:$PATH ${dream-repository.git:location}/node_modules/grunt-cli/bin/grunt watch -f > $${directory:log}/grunt.log'
+wrapper-path = $${directory:service}/dream_grunt_watch
+
 # CLI
 [dream_simulation]
 recipe = slapos.cookbook:wrapper
diff --git a/software/dream/software.cfg b/software/dream/software.cfg
index df2773e9bd1596d45d2198fcfe1cf5d6d66c692c..6884fe04539d06bf91eba9a5eafe62390f87379d 100644
--- a/software/dream/software.cfg
+++ b/software/dream/software.cfg
@@ -1,12 +1,14 @@
 [buildout]
 versions = versions
-extends = 
+extends =
   ../../stack/slapos.cfg
+  ../../stack/nodejs.cfg
   ../../component/manpy/buildout.cfg
 parts =
   slapos-cookbook
   manpy
   dream_testrunner
+  npm_install
   instance
 
 [instance]
@@ -21,6 +23,12 @@ script = dream_testrunner
 initialization =
   ${manpy:initialization}
 
+[npm_install]
+recipe = plone.recipe.command
+stop-on-error = true
+command = cd ${dream-repository.git:location} && PATH=${git:location}/bin/:$PATH ${nodejs:location}/bin/npm install .
+update_command = ${:command}
+
 [versions]
 rpy2 = 2.4.0
 pydot = 1.0.28