diff --git a/bin/check_reqs b/bin/check_reqs
new file mode 100755
index 0000000..a5fc642
--- /dev/null
+++ b/bin/check_reqs
@@ -0,0 +1,31 @@
+#!/usr/bin/env node
+
+/*
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+*/
+
+var check_reqs = require('./lib/check_reqs');
+
+check_reqs.run().done(
+    function success() {
+        console.log('Looks like your environment fully supports cordova-webos development!');
+    }, function fail(err) {
+        console.log(err);
+        process.exit(2);
+    }
+);
diff --git a/bin/check_reqs.bat b/bin/check_reqs.bat
new file mode 100755
index 0000000..d060302
--- /dev/null
+++ b/bin/check_reqs.bat
@@ -0,0 +1,26 @@
+:: Licensed to the Apache Software Foundation (ASF) under one
+:: or more contributor license agreements.  See the NOTICE file
+:: distributed with this work for additional information
+:: regarding copyright ownership.  The ASF licenses this file
+:: to you under the Apache License, Version 2.0 (the
+:: "License"); you may not use this file except in compliance
+:: with the License.  You may obtain a copy of the License at
+:: 
+:: http://www.apache.org/licenses/LICENSE-2.0
+:: 
+:: Unless required by applicable law or agreed to in writing,
+:: software distributed under the License is distributed on an
+:: "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+:: KIND, either express or implied.  See the License for the
+:: specific language governing permissions and limitations
+:: under the License.
+
+@ECHO OFF
+SET script_path="%~dp0check_reqs"
+IF EXIST %script_path% (
+        node "%script_path%" %*
+) ELSE (
+    ECHO.
+    ECHO ERROR: Could not find 'check_reqs' script in 'bin' folder, aborting...>&2
+    EXIT /B 1
+)
diff --git a/bin/create b/bin/create
new file mode 100755
index 0000000..18a9430
--- /dev/null
+++ b/bin/create
@@ -0,0 +1,36 @@
+#!/usr/bin/env node
+
+/*
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+*/
+var path = require('path');
+var create = require('./lib/create');
+var args = process.argv;
+
+// Support basic help commands
+if(args.length < 3 || (args[2] == '--help' || args[2] == '/?' || args[2] == '-h' ||
+                    args[2] == 'help' || args[2] == '-help' || args[2] == '/help')) {
+    console.log('Usage: ' + path.relative(process.cwd(), path.join(__dirname, 'create')) + ' <path_to_new_project> <project_id> <project_name>');
+    console.log('    <path_to_new_project>: Path to your new Cordova webOS project');
+    console.log('    <project_id>: Package name, following reverse-domain style convention');
+    console.log('    <project_name>: Project name');
+    process.exit(1);
+} else {
+    create.createProject(args[2], args[3], args[4], args[5]);
+}
+
diff --git a/bin/create.bat b/bin/create.bat
new file mode 100755
index 0000000..c15cbcb
--- /dev/null
+++ b/bin/create.bat
@@ -0,0 +1,26 @@
+:: Licensed to the Apache Software Foundation (ASF) under one
+:: or more contributor license agreements.  See the NOTICE file
+:: distributed with this work for additional information
+:: regarding copyright ownership.  The ASF licenses this file
+:: to you under the Apache License, Version 2.0 (the
+:: "License"); you may not use this file except in compliance
+:: with the License.  You may obtain a copy of the License at
+:: 
+:: http://www.apache.org/licenses/LICENSE-2.0
+:: 
+:: Unless required by applicable law or agreed to in writing,
+:: software distributed under the License is distributed on an
+:: "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+:: KIND, either express or implied.  See the License for the
+:: specific language governing permissions and limitations
+:: under the License.
+
+@ECHO OFF
+SET script_path="%~dp0create"
+IF EXIST %script_path% (
+    node %script_path% %*
+) ELSE (
+    ECHO.
+    ECHO ERROR: Could not find 'create' script in 'bin' folder, aborting...>&2
+    EXIT /B 1
+)
\ No newline at end of file
diff --git a/bin/lib/check_reqs.js b/bin/lib/check_reqs.js
new file mode 100755
index 0000000..d9f745b
--- /dev/null
+++ b/bin/lib/check_reqs.js
@@ -0,0 +1,59 @@
+#!/usr/bin/env node
+
+/*
+Licensed to the Apache Software Foundation (ASF) under one
+or more contributor license agreements. See the NOTICE file
+distributed with this work for additional information
+regarding copyright ownership. The ASF licenses this file
+to you under the Apache License, Version 2.0 (the
+"License"); you may not use this file except in compliance
+with the License. You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing,
+software distributed under the License is distributed on an
+"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+KIND, either express or implied. See the License for the
+specific language governing permissions and limitations
+under the License.
+*/
+
+var child_process = require("child_process"),
+    Q = require("q"),
+    ext = ((process.platform.indexOf("win")==0) ? "": ".sh");
+
+// Returns a promise.
+module.exports.check_ares_package = function() {
+    var d = Q.defer();
+    child_process.exec("ares-package" + ext + " -V", function(err, stdout, stderr) {
+        if (err) d.reject(new Error("ERROR : executing command \"ares-package" + ext + "\", make sure you have ares-webos-sdk installed and added to your path."));
+        else d.resolve();
+    });
+    return d.promise;
+}
+
+// Returns a promise.
+module.exports.check_ares_install = function() {
+    var d = Q.defer();
+    child_process.exec("ares-install" + ext + " -V", function(err, stdout, stderr) {
+        if (err) d.reject(new Error("ERROR : executing command \"ares-install" + ext + "\", make sure you have ares-webos-sdk installed and added to your path."));
+        else d.resolve();
+    });
+    return d.promise;
+}
+
+// Returns a promise.
+module.exports.check_ares_launch = function() {
+    var d = Q.defer();
+    child_process.exec("ares-launch" + ext + " -V", function(err, stdout, stderr) {
+        if (err) d.reject(new Error("ERROR : executing command \"ares-launch" + ext + "\", make sure you have ares-webos-sdk installed and added to your path."));
+        else d.resolve();
+    });
+    return d.promise;
+}
+
+// Returns a promise.
+module.exports.run = function() {
+    return Q.all([this.check_ares_package(), this.check_ares_install(), this.check_ares_launch()]);
+}
\ No newline at end of file
diff --git a/bin/lib/create.js b/bin/lib/create.js
new file mode 100755
index 0000000..c547883
--- /dev/null
+++ b/bin/lib/create.js
@@ -0,0 +1,87 @@
+#!/usr/bin/env node
+
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+ 
+var fs = require('fs'),
+    shjs = require('shelljs'),
+    args = process.argv,
+    path = require('path'),
+    ROOT    = path.join(__dirname, '..', '..'),
+    check_reqs = require('./check_reqs');
+
+exports.createProject = function(project_path,project_id,project_name){
+    var VERSION = fs.readFileSync(path.join(ROOT, 'VERSION'), 'utf-8');
+    
+    // Set default values for path, package and name
+    project_path = typeof project_path !== 'undefined' ? project_path : "CordovaExample";
+    project_id = typeof project_id !== 'undefined' ? project_id : 'org.apache.cordova.example';
+    project_name = typeof project_name !== 'undefined' ? project_name : 'CordovaExample';
+
+    // Check if project already exists
+    if(fs.existsSync(project_path)) {
+        console.error('Project already exists! Delete and recreate');
+        process.exit(2);
+    }
+    
+    // Check that requirements are met and proper targets are installed
+    check_reqs.run().done(
+        function success() {
+            console.log('Creating webOS project');
+            console.log('Project Path: '+ path.relative(process.cwd(),project_path));
+            console.log('Project ID: '+ project_id);
+            console.log('Project Name: '+ project_name);
+
+            //copy template folder
+            shjs.cp('-r', path.join(ROOT, 'bin', 'templates', 'project', 'www'), project_path);
+
+            // update appinfo.json
+            try {
+                var appInfoPath = path.join(project_path, 'www', 'appinfo.json');
+                var appInfo = JSON.parse(fs.readFileSync(appInfoPath, {encoding:"utf8"}));
+                appInfo.id = project_id;
+                appInfo.title = project_name;
+                fs.writeFileSync(appInfoPath, JSON.stringify(appInfo, null, "\t"));
+            } catch(e) {
+                console.warn('AppInfo initialization failed: ' + e);
+            }
+            
+            //copy cordova js file
+            shjs.cp(path.join(ROOT, 'cordova.js'), path.join(project_path,'www'));  
+
+            //copy cordova folder
+            shjs.cp('-r', path.join(ROOT, 'bin', 'templates', 'project', 'cordova'), project_path);
+            shjs.cp('-r', path.join(ROOT, 'bin', 'node_modules'), path.join(project_path,'cordova'));
+
+            // copy check_reqs
+            shjs.cp(path.join(ROOT, 'bin', 'check_reqs.bat'), path.join(project_path, 'cordova', 'check_reqs.bat'));
+            shjs.cp(path.join(ROOT, 'bin', 'check_reqs'), path.join(project_path, 'cordova', 'check_reqs'));
+            shjs.cp(path.join(ROOT, 'bin', 'lib', 'check_reqs.js'), path.join(project_path, 'cordova', 'lib', 'check_reqs.js'));
+
+            // update permissions
+            shjs.find(path.join(project_path, 'cordova')).forEach(function(entry) {
+                shjs.chmod(755, entry);
+            });
+            console.log('Project successfully created.');
+        }, function fail(err) {
+            console.error('Please make sure you meet the software requirements in order to build a webOS Cordova project');
+            process.exit(2);
+        }
+    );
+}
diff --git a/bin/lib/update.js b/bin/lib/update.js
new file mode 100755
index 0000000..0e5a098
--- /dev/null
+++ b/bin/lib/update.js
@@ -0,0 +1,75 @@
+#!/usr/bin/env node
+
+/*
+       Licensed to the Apache Software Foundation (ASF) under one
+       or more contributor license agreements.  See the NOTICE file
+       distributed with this work for additional information
+       regarding copyright ownership.  The ASF licenses this file
+       to you under the Apache License, Version 2.0 (the
+       "License"); you may not use this file except in compliance
+       with the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+       Unless required by applicable law or agreed to in writing,
+       software distributed under the License is distributed on an
+       "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+       KIND, either express or implied.  See the License for the
+       specific language governing permissions and limitations
+       under the License.
+*/
+
+var shell = require('shelljs'),
+    path  = require('path'),
+    fs    = require('fs'),
+    ROOT  = path.join(__dirname, '..', '..');
+
+function setShellFatal(value, func) {
+    var oldVal = shell.config.fatal;
+    shell.config.fatal = value;
+    func();
+    shell.config.fatal = oldVal;
+}
+
+function copyJs(projectPath) {
+    shell.cp('-f', path.join(ROOT, 'cordova.js'), path.join(projectPath, 'www'));
+}
+
+function copyScripts(projectPath) {
+    var srcScriptsDir = path.join(ROOT, 'bin', 'templates', 'project', 'cordova');
+    var destScriptsDir = path.join(projectPath, 'cordova');
+    // Delete old scripts directory.
+    shell.rm('-rf', destScriptsDir);
+    // Copy in the new ones.
+    shell.cp('-r', srcScriptsDir, projectPath);
+    shell.cp('-r', path.join(ROOT, 'bin', 'node_modules'), destScriptsDir);
+    shell.cp(path.join(ROOT, 'bin', 'check_reqs.bat'), path.join(destScriptsDir, 'check_reqs.bat'));
+    shell.cp(path.join(ROOT, 'bin', 'check_reqs'), path.join(destScriptsDir, 'check_reqs'));
+    shell.cp(path.join(ROOT, 'bin', 'lib', 'check_reqs.js'), path.join(destScriptsDir, 'lib', 'check_reqs.js'));
+    // Make sure they are executable.
+    shell.find(destScriptsDir).forEach(function(entry) {
+        shell.chmod(755, entry);
+    });
+}
+
+exports.updateProject = function(projectPath) {
+    var version = fs.readFileSync(path.join(ROOT, 'VERSION'), 'utf-8').trim();
+    setShellFatal(true, function() {
+        copyJs(projectPath);
+        copyScripts(projectPath);
+        console.log('webOS project is now at version ' + version);
+    });
+};
+
+if (require.main === module) {
+    (function() {
+        var args = process.argv;
+        if (args.length < 3 || (args[2] == '--help' || args[2] == '-h')) {
+            console.log('Usage: ' + path.relative(process.cwd(), path.join(__dirname, 'update')) + ' <path_to_project>');
+            process.exit(1);
+        } else {
+            exports.updateProject(args[2]);
+        }
+    })();
+}
+
diff --git a/bin/update b/bin/update
new file mode 100755
index 0000000..9ba3d71
--- /dev/null
+++ b/bin/update
@@ -0,0 +1,31 @@
+#! /usr/bin/env node
+/*
+        Licensed to the Apache Software Foundation (ASF) under one
+        or more contributor license agreements.  See the NOTICE file
+        distributed with this work for additional information
+        regarding copyright ownership.  The ASF licenses this file
+        to you under the Apache License, Version 2.0 (the
+        "License"); you may not use this file except in compliance
+        with the License.  You may obtain a copy of the License at
+ 
+          http://www.apache.org/licenses/LICENSE-2.0
+ 
+        Unless required by applicable law or agreed to in writing,
+        software distributed under the License is distributed on an
+        "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+        KIND, either express or implied.  See the License for the
+        specific language governing permissions and limitations
+        under the License.
+*/
+var path  = require('path')
+var args = process.argv;
+var update = require('./lib/update');
+
+// Support basic help commands
+if(args.length < 3 || (args[2] == '--help' || args[2] == '/?' || args[2] == '-h' ||
+                    args[2] == 'help' || args[2] == '-help' || args[2] == '/help')) {
+    console.log('Usage: ' + path.relative(process.cwd(), path.join(__dirname, 'update')) + ' <path_to_project>');
+    process.exit(1);
+} else {
+    update.updateProject(args[2]);
+}
diff --git a/bin/update.bat b/bin/update.bat
new file mode 100755
index 0000000..b49ecf3
--- /dev/null
+++ b/bin/update.bat
@@ -0,0 +1,26 @@
+:: Licensed to the Apache Software Foundation (ASF) under one
+:: or more contributor license agreements.  See the NOTICE file
+:: distributed with this work for additional information
+:: regarding copyright ownership.  The ASF licenses this file
+:: to you under the Apache License, Version 2.0 (the
+:: "License"); you may not use this file except in compliance
+:: with the License.  You may obtain a copy of the License at
+:: 
+:: http://www.apache.org/licenses/LICENSE-2.0
+:: 
+:: Unless required by applicable law or agreed to in writing,
+:: software distributed under the License is distributed on an
+:: "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+:: KIND, either express or implied.  See the License for the
+:: specific language governing permissions and limitations
+:: under the License.
+
+@ECHO OFF
+SET script_path="%~dp0update"
+IF EXIST %script_path% (
+    node %script_path% %*
+) ELSE (
+    ECHO.
+    ECHO ERROR: Could not find 'update' script in 'bin' folder, aborting...>&2
+    EXIT /B 1
+)
