docs: function(protoApp, results, callback) {
  
      // Create some globally vars for use in and-thens
      var dir = (results.dir) ? results.dir : process.cwd();
      var dest = path.join(dir, results.name);
  
      /*
       * Utility function to double check just in case
       * we are in an app but it has not been registered
       */
      var isAppByFiles = function() {
        var kalaboxYaml = path.join(dest, 'kalabox.yml');
        var pkgJson = path.join(dest, 'package.json');
        return fs.existsSync(kalaboxYaml) && fs.existsSync(pkgJson);
      };
  
      // Check to make sure we aren't already inside another app
      // since chaos can ensue this way
      if (kbox.core.deps.contains('app') || isAppByFiles()) {
        throw new Error('Looks like an app already exists at ' + dest);
      }
  
      // Emit pre create event.
      kbox.core.log.status('Creating.');
      return kbox.core.events.emit('pre-create', results)
  
      // Make sure we are in a clean place before we get dirty
      .then(function() {
        kbox.core.log.status('Cleaning up.');
        return kbox.app.cleanup();
      })
  
      // Download the app skeleton and extract it to our destination
      .then(function() {
        kbox.core.log.status('Creating app structure.');
        return createAppSkeleton(protoApp, dest, results.from);
      })
  
      // Merge in our settings to the new app
      .then(function() {
        kbox.core.log.status('Configuring app.');
        return configureApp(protoApp, results);
      })
  
      // Install the new app
      .then(function() {
  
        // Get app config from new app
        var config = kbox.core.config.getAppConfig(dest);
  
        // Emit pre create event.
        kbox.core.log.status('Running pre create tasks.');
        return kbox.core.events.emit('pre-create-app', config)
  
        // Create a new app object
        .then(function() {
          return kbox.app.create(results.name, config, results);
        })
  
        // Emit post create event.
        .tap(function(app) {
          return kbox.core.events.emit('post-create-app', app);
        })
  
        // Report to metrics.
        .tap(function(app) {
          return kbox.metrics.reportAction(
            ['create', protoApp.name].join(':'),
            {app: app}
          );
        })
  
        // Install and start the SOB
        .tap(function(app) {
          app.status('Starting app.');
          // Set a flag so app.start events know if we are creating or not
          app.creating = true;
          return kbox.app.start(app);
        });
  
      })
  
      // Emit post create event.
      .tap(function(app) {
        app.status('Running post create tasks.');
        return app.events.emit('post-create');
      })
  
      // Print message
      .then(function(app) {
        console.log(kbox.art.appStart(app));
      })
  
      // Return.
      .nodeify(callback);
  
    }