diff --git a/.travis.yml b/.travis.yml
index ec44c3294daffb93e979bc8ba57a4eea4e5b2809..bb9c8112081b820a68f0cbff7d5d33e66a71dab6 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,7 @@
 ---
 language: node_js
 node_js:
+  - 0.10
   - 4
   - 6
 cache:
diff --git a/packages/create-react-app/index.js b/packages/create-react-app/index.js
index 0fb61d60f1de05bbee439d52ea86f425a5423f2c..d6e89e906eb124d0dc9ffaea693351e119a7d715 100644
--- a/packages/create-react-app/index.js
+++ b/packages/create-react-app/index.js
@@ -38,38 +38,47 @@
 
 'use strict';
 
+var chalk = require('chalk');
+
+var currentNodeVersion = process.versions.node
+if (currentNodeVersion.split('.')[0] < 4) {
+  console.error(chalk.red('You are currently running Node v' + currentNodeVersion +
+    ' but create-react-app requires >=4. Please use a supported version of Node.\n'));
+  process.exit(1);
+}
+
 var fs = require('fs');
 var path = require('path');
 var execSync = require('child_process').execSync;
 var spawn = require('cross-spawn');
-var chalk = require('chalk');
 var semver = require('semver');
-var argv = require('minimist')(process.argv.slice(2));
 var pathExists = require('path-exists');
 
-/**
- * Arguments:
- *   --version - to print current version
- *   --verbose - to print logs while init
- *   --scripts-version <alternative package>
- *     Example of valid values:
- *     - a specific npm version: "0.22.0-rc1"
- *     - a .tgz archive from any npm repo: "https://registry.npmjs.org/react-scripts/-/react-scripts-0.20.0.tgz"
- *     - a package prepared with `tasks/clean_pack.sh`: "/Users/home/vjeux/create-react-app/react-scripts-0.22.0.tgz"
- */
-var commands = argv._;
-if (commands.length === 0) {
-  if (argv.version) {
-    console.log('create-react-app version: ' + require('./package.json').version);
-    process.exit();
-  }
-  console.error(
-    'Usage: create-react-app <project-directory> [--verbose]'
-  );
+var projectName;
+
+var program = require('commander')
+  .version(require('./package.json').version)
+  .arguments('<name>')
+  .action(function (name) {
+    projectName = name;
+  })
+  .option('-v, --verbose', 'print logs while init')
+  .option('-s, --scripts-version <alternative package>', 'select a react script variant')
+  .on('--help', function () {
+    console.log('Example of valid script version values:')
+    console.log('  - a specific npm version: "0.22.0-rc1"')
+    console.log('  - a .tgz archive from any npm repo: "https://registry.npmjs.org/react-scripts/-/react-scripts-0.20.0.tgz"')
+    console.log('  - a package prepared with `tasks/clean_pack.sh`: "/Users/home/vjeux/create-react-app/react-scripts-0.22.0.tgz"')
+  })
+  .parse(process.argv)
+
+if (typeof projectName === 'undefined') {
+  console.error('Error: no name given!');
+  console.log('Usage: ' + program.name() + ' ' + program.usage());
   process.exit(1);
 }
 
-createApp(commands[0], argv.verbose, argv['scripts-version']);
+createApp(projectName, program.verbose, program.scriptsVersion);
 
 function createApp(name, verbose, version) {
   var root = path.resolve(name);
diff --git a/packages/create-react-app/package.json b/packages/create-react-app/package.json
index 01492e71cde09f0ad13f99a2d64285b02dd333cc..d02e06cdcae4427ba7f2f2ace1a305f63df13b05 100644
--- a/packages/create-react-app/package.json
+++ b/packages/create-react-app/package.json
@@ -21,8 +21,8 @@
   },
   "dependencies": {
     "chalk": "^1.1.1",
+    "commander": "^2.9.0",
     "cross-spawn": "^4.0.0",
-    "minimist": "^1.2.0",
     "path-exists": "^2.1.0",
     "semver": "^5.0.3"
   }
diff --git a/tasks/e2e.sh b/tasks/e2e.sh
index ce7b50f35b5eebe73e2cdf5162d571d9da35311b..c4f4a4b1b8347b2eb430bfb8371fb3a8df3de510 100755
--- a/tasks/e2e.sh
+++ b/tasks/e2e.sh
@@ -14,6 +14,11 @@
 # Start in tasks/ even if run from root directory
 cd "$(dirname "$0")"
 
+# CLI and app temporary locations
+# http://unix.stackexchange.com/a/84980
+temp_cli_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_cli_path'`
+temp_app_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_app_path'`
+
 function cleanup {
   echo 'Cleaning up.'
   cd $root_path
@@ -53,6 +58,16 @@ set -x
 cd ..
 root_path=$PWD
 
+npm install
+
+# If the node version is < 4, the script should just give an error.
+if [ `node --version | sed -e 's/^v//' -e 's/\..\+//g'` -lt 4 ]
+then
+  cd $temp_app_path
+  err_output=`node "$root_path"/packages/create-react-app/index.js test-node-version 2>&1 > /dev/null || echo ''`
+  [[ $err_output =~ You\ are\ currently\ running\ Node\ v.+\ but\ create-react-app\ requires\ \>=4\. ]] && exit 0 || exit 1
+fi
+
 if [ "$USE_YARN" = "yes" ]
 then
   # Install Yarn so that the test can use it to install packages.
@@ -60,8 +75,6 @@ then
   yarn cache clean
 fi
 
-npm install
-
 # Lint own code
 ./node_modules/.bin/eslint --ignore-path .gitignore ./
 
@@ -117,13 +130,10 @@ mv package.json.orig package.json
 # ******************************************************************************
 
 # Install the CLI in a temporary location
-# http://unix.stackexchange.com/a/84980
-temp_cli_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_cli_path'`
 cd $temp_cli_path
 npm install $cli_path
 
 # Install the app in a temporary location
-temp_app_path=`mktemp -d 2>/dev/null || mktemp -d -t 'temp_app_path'`
 cd $temp_app_path
 create_react_app --scripts-version=$scripts_path test-app
 
@@ -185,7 +195,6 @@ npm test -- --watch=no
 # Test the server
 npm start -- --smoke-test
 
-
 # ******************************************************************************
 # Test --scripts-version with a version number
 # ******************************************************************************