diff --git a/gulp/dev.js b/gulp/dev.js
new file mode 100644
index 0000000..ee51e3f
--- /dev/null
+++ b/gulp/dev.js
@@ -0,0 +1,84 @@
+/*eslint-env node */
+(function () {
+  'use strict';
+
+  const gulp = require('gulp');
+  const inject = require('gulp-inject');
+  const angularFilesort = require('gulp-angular-filesort');
+  const wiredep = require('wiredep').stream;
+  const path = require('path');
+  const babel = require('gulp-babel');
+  const sourcemaps = require('gulp-sourcemaps');
+  const browserSync = require('browser-sync').create();
+  module.exports = function(options){
+
+    console.log(options.xosHelperTmp, path.join(__dirname, `../${options.xosHelperTmp}`));
+
+    gulp.task('serveDevEnv', ['babelDev', 'wiredep', 'inject', 'injectStyle'], function(){
+      browserSync.init({
+        server: {
+          baseDir: ['./dev', './.tmp', './dist'],
+          // directory: true,
+          routes: {
+            '/bower_components': 'bower_components'
+          },
+        }
+      });
+
+      gulp.watch([
+        './src/**/*.js'
+      ], ['babelDev']);
+
+      gulp.watch([
+        './src/**/*.scss'
+      ], ['style']);
+
+      gulp.watch([
+        './dev/*.html',
+        './dev/*.js',
+        './.tmp/**/*.js'
+      ], function(){
+        browserSync.reload();
+      });
+    });
+
+    gulp.task('babelDev', function(){
+      return gulp.src(options.xosHelperSource + '**/*.js')
+        .pipe(sourcemaps.init())
+        .pipe(babel({
+          presets: ['es2015']
+        }))
+        .pipe(sourcemaps.write('./maps'))
+        .pipe(gulp.dest(options.xosHelperTmp));
+    });
+
+    gulp.task('inject', function(){
+      const files = gulp.src([
+        `${options.xosHelperTmp}**/*.js`
+      ])
+      .pipe(angularFilesort())
+
+      return gulp.src('./dev/index.html')
+        .pipe(inject(files, {ignorePath: ['.tmp/']}))
+        .pipe(gulp.dest('./dev/'));
+    });
+
+    gulp.task('injectStyle', function(){
+      const files = gulp.src([
+        `${options.ngXosStyles}*.css`
+      ])
+
+      return gulp.src('./dev/index.html')
+        .pipe(inject(files, {ignorePath: ['dist/']}))
+        .pipe(gulp.dest('./dev/'));
+    });
+    
+
+    // inject bower dependencies with wiredep
+    gulp.task('wiredep', function () {
+      return gulp.src('./dev/index.html')
+        .pipe(wiredep({devDependencies: false}))
+        .pipe(gulp.dest('./dev'));
+    });
+  };
+})();
\ No newline at end of file
diff --git a/gulp/docs.js b/gulp/docs.js
new file mode 100644
index 0000000..ab77e1a
--- /dev/null
+++ b/gulp/docs.js
@@ -0,0 +1,74 @@
+/*eslint-env node */
+
+const gulp = require('gulp');
+const gulpDocs = require('gulp-ngdocs');
+const del = require('del');
+const browserSync = require('browser-sync').create();
+
+module.exports = function(options){
+
+  gulp.task('cleanDocs', function(){
+    return del([options.docs + '**/*']);
+  });
+
+  gulp.task('makeDocs', ['cleanDocs'], function(){
+
+    const ngOptions = {
+      scripts: [].concat([
+        `./${options.ngXosVendor}ngXosVendor.min.js`,
+        `./${options.ngXosVendor}ngXosHelpers.min.js`,
+        'https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.4.7/angular-mocks.js',
+      ]),
+      styles: [
+        `./${options.ngXosStyles}xosNgLib.css`,
+        'https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/3.3.6/css/bootstrap.css',
+      ],
+      html5Mode: false,
+      title: 'XOS Helpers documentation',
+      startPage: '/ngXosLib',
+    }
+
+    return gulpDocs.sections({
+      ngXosLib: {
+        glob: [
+          options.xosHelperSource + '*.js',
+          options.xosHelperSource + 'services/helpers/**/*.js',
+          options.xosHelperSource + 'services/*.js',
+          options.xosHelperSource + 'ui_components/**/*.js'
+        ],
+        title: 'Module Documentation',
+      },
+      'rest-api': {
+        glob: [
+          options.xosHelperSource + 'services/rest/*.js'
+        ],
+        api: true,
+        title: 'API Documentation',
+      }
+    }).pipe(gulpDocs.process(ngOptions)).pipe(gulp.dest('./docs'));
+  });
+
+  gulp.task('serveDocs', function(){
+    browserSync.init({
+      server: {
+        baseDir: './docs',
+      }
+    });
+  });
+
+  gulp.task('docs', ['makeDocs', 'serveDocs'], function(){
+    
+    const files = [
+      options.xosHelperSource + '**/*.js',
+    ];
+
+    gulp.watch(files, ['makeDocs']);
+
+    // uncomment to enable autoreload, now it is broken (reload a wrong page)
+    // https://github.com/nikhilmodak/gulp-ngdocs/issues/81
+
+    // gulp.watch(files, function(){
+    //   browserSync.reload();
+    // });
+  });
+};
\ No newline at end of file
diff --git a/gulp/ngXosHelpers.js b/gulp/ngXosHelpers.js
new file mode 100644
index 0000000..4888bdf
--- /dev/null
+++ b/gulp/ngXosHelpers.js
@@ -0,0 +1,85 @@
+/*eslint-env node */
+
+(function () {
+  'use strict';
+
+  const gulp = require('gulp');
+  const uglify = require('gulp-uglify');
+  const concat = require('gulp-concat');
+  const ngAnnotate = require('gulp-ng-annotate');
+  const angularFilesort = require('gulp-angular-filesort');
+  const del = require('del');
+  const babel = require('gulp-babel');
+  const sourcemaps = require('gulp-sourcemaps');
+  const rename = require('gulp-rename');
+  const sass = require('gulp-sass');
+
+  module.exports = function(options){
+
+    // delete previous builded file
+    gulp.task('cleanLib', function(){
+      return del(
+        [
+          `${options.ngXosVendor}/ngXosHelpers.min.js`,
+          `${options.ngXosVendor}/xosUiComponents.js`,
+          `${options.ngXosVendor}/ngXos.css`
+        ],
+        {force: true}
+      );
+    });
+
+    gulp.task('style', function(){
+      return gulp.src(`${options.xosHelperSource}styles/main.scss`)
+        .pipe(sourcemaps.init())
+        .pipe(sass().on('error', sass.logError))
+        .pipe(rename('xosNgLib.css'))
+        .pipe(sourcemaps.write())
+        .pipe(gulp.dest(options.ngXosStyles));
+    });
+
+    // transpile js with sourceMaps
+    gulp.task('babel', function(){
+      return gulp.src(options.xosHelperSource + '**/*.js')
+        .pipe(babel({
+          presets: ['es2015']
+        }))
+        .pipe(gulp.dest(options.xosHelperTmp));
+    });
+
+    // build
+    gulp.task('helpers', ['cleanLib', 'babel', 'style'], function(){
+      return gulp.src([options.xosHelperTmp + '**/*.js'])
+        .pipe(angularFilesort())
+        .pipe(concat('ngXosHelpers.min.js'))
+        .pipe(ngAnnotate())
+        .pipe(uglify())
+        .pipe(gulp.dest(options.ngXosVendor));
+    });
+
+    // build Dev (no minify, sourcemaps), for development purposes
+    // gulp.task('helpersDev', ['babelDev'], function(){
+    //   return gulp.src([options.xosHelperTmp + '**/*.js'])
+    //     .pipe(angularFilesort())
+    //     .pipe(concat('ngXosHelpers.js'))
+    //     .pipe(ngAnnotate())
+    //     .pipe(gulp.dest(options.ngXosVendor));
+    // });
+
+    // concat only UI Components (for free use)
+    gulp.task('uiLibrary', function(){
+      return gulp.src([
+        options.xosHelperTmp + '**/*.js',
+        !options.xosHelperTmp + 'services/rest/*.js'
+      ])
+        .pipe(angularFilesort())
+        .pipe(concat('xosUiComponents.js'))
+        .pipe(ngAnnotate())
+        .pipe(gulp.dest(options.ngXosVendor));
+    });
+
+    gulp.task('dev', function(){
+      gulp.watch(`${options.xosHelperSource}**/*.scss`, ['style']);
+      gulp.watch(options.xosHelperSource + '**/*.js', ['helpersDev']);
+    });
+  };
+})();
\ No newline at end of file
diff --git a/gulp/ngXosVendor.js b/gulp/ngXosVendor.js
new file mode 100644
index 0000000..9e82c23
--- /dev/null
+++ b/gulp/ngXosVendor.js
@@ -0,0 +1,30 @@
+/*eslint-env node */
+(function () {
+  
+  'use strict';
+  const gulp = require('gulp');
+  const uglify = require('gulp-uglify');
+  const concat = require('gulp-concat');
+  const wiredep = require('wiredep');
+  const del = require('del');
+
+  module.exports = function(options){
+
+    gulp.task('cleanVendor', function(){
+      return del(
+        [
+          `${options.ngXosVendor}/ngXosVendor.min.js`
+        ],
+        {force: true}
+      );
+    });
+
+    gulp.task('vendor', ['cleanVendor'], function(){
+      const bowerDeps = wiredep().js;
+      return gulp.src(bowerDeps)
+        .pipe(concat('ngXosVendor.min.js'))
+        .pipe(uglify())
+        .pipe(gulp.dest(options.ngXosVendor));
+    });
+  };
+})();
\ No newline at end of file
