Merge pull request #45 from infil00p/master

Adding Android Studio Project Structure proposal
diff --git a/README.md b/README.md
index e569bbf..2bc61e0 100644
--- a/README.md
+++ b/README.md
@@ -8,25 +8,31 @@
 
 | Proposal | Status/Notes
 |----------|-------------------
-| [Support for Android N](proposals/android-n-support.md) | Proposed - Ongoing 
-| Ideas for improving documentation [[1]](proposals/ImprovedDocumentation.md) [[2]](proposals/ImproveCordovaDocumentation.md) | Most of the recommendations completed | 
-| [Support for third party package managers - Nuget & coccoapods](proposals/ThirdPartyPackageManagers.md) | Help needed |
+| [Support for Android N](proposals/android-n-support.md) | Proposed - Ongoing
+| [Support for third party package managers - Nuget & coccoapods](proposals/ThirdPartyPackageManagers.md) | Proposed |
 
 ## In Progress Proposals
 | Proposal | Status/Notes
 |----------|-------------------
-| [Add Telemetry to Cordova CLI](proposals/Telemetry.md) | In Progress
+| [Templates in Cordova CLI Part 2](https://github.com/cordova/cordova-discuss/pull/49) | Proposed |
+
 
 ## Completed Proposals
 | Proposal | Status/Notes
 |----------|-------------------
+| [Nightly Builds for Cordova and platforms](proposals/NightlyBuilds.md) | Completed |
 | [Templates in Cordova CLI](proposals/CLI-Templates.md) | Completed |
-| [Cordova platform API](cordova-lib refactoring\Cordova-lib refactoring proposal.md) | Completed | 
+| [Cordova-lib Refactoring proposal](proposals/cordova-lib%20refactoring/Cordova-lib%20refactoring%20proposal.md) | Completed |
 | [Cordova Face2Face Oct 2015 meeting](proposals/Face2Face-Oct15.md) | Meeting held Oct 15 - completed |
 | [Automatic Generation of plugin API docs](proposals/ImprovedDocumentationGenerator.md) | Completed only for cordova-plugin-camera |
-| [Removal of whitelist from iOS platform](proposals/ios-whitelist-removal.md) | Completed 
-| [Proposal to pin plugins with cLI](proposals/pinningAndVersioning.md) | Completed in 6.0 & replaced with [plugin fetching](proposals/plugin-version-fetching.md) in Cordova 6.1. 
+| [Removal of whitelist from iOS platform](proposals/ios-whitelist-removal.md) | Completed
+| [Proposal to pin plugins with cLI](proposals/pinningAndVersioning.md) | Completed in 6.0 & replaced with [plugin fetching](proposals/plugin-version-fetching.md) in Cordova 6.1.
 | [Platform project](proposals/PlatformProject.md) | Some ideas adopted into the Cordova Platform API work.
 | [Plugin version fetching - improve plugin versioning story](proposals/plugin-version-fetching.md) | Completed & part of Cordova 6.1
 | [New information architecture for Cordova](proposals/NewInformationArchitecture.md) | Completed and live on docs.cordova.io.
+| [Add Telemetry to Cordova CLI](proposals/Telemetry.md) | Completed
+| Ideas for improving documentation [[1]](proposals/ImprovedDocumentation.md) [[2]](proposals/ImproveCordovaDocumentation.md) | Most of the recommendations completed |
+| [CI for PRs submitted for cordova plugins](proposals/ci-for-plugin-prs.md) | Completed
+| [Unified cordova-fetch proposal](https://github.com/cordova/cordova-discuss/blob/master/proposals/fetching.md) | Completed
+
 
diff --git a/proposals/CLI-Templates.md b/proposals/CLI-Templates.md
index eaeb7b5..8f490b6 100644
--- a/proposals/CLI-Templates.md
+++ b/proposals/CLI-Templates.md
@@ -1,6 +1,5 @@
-## Cordova CLI Create with Template argument
-
-
+# Cordova CLI Create with Template argument
+- Status: Completed
 
 This proposal is to update the Cordova CLI to support the argument --template for create command
 
diff --git a/proposals/CLI-Templates2.md b/proposals/CLI-Templates2.md
new file mode 100644
index 0000000..a9f87e3
--- /dev/null
+++ b/proposals/CLI-Templates2.md
@@ -0,0 +1,51 @@
+# CLI templates Part 2 Proposal

+

+status - Completed

+

+## Overview

+

+Now that we support templates in `cordova`, I think it is time to enhance this feature a bit. Currently, it pretty much copies over all of the files from the template repo or module. This can cause problems because it doesn't usually make sense to copy over files like:

+

+* package.json belonging to a template

+* RELEASENOTES.md

+* .git

+* NOTICE

+* LICENSE

+* Copyright

+* .npmignore

+

+Files we do want:

+

+* config.xml

+* .gitignore

+* node_modules

+* platforms/plugins

+* hooks

+* merges

+* other files or folders

+

+Sometimes we do want a `package.json` copied over. `package.json` could have build scripts that are essential for the template to work. To handle this use case, template authors are suggested to put template files in a subdirectory and point to that subdirectory in `index.js`. All files in the subdirectory are copied over. 

+

+Example: https://github.com/apache/cordova-app-hello-world/blob/master/index.js

+

+### Proposal

+

+Update the current template implementation to ignore the list of files above that shouldn't be copied over when using `--template`. If a subdirectory is used, copy the entire contents of the subdirectory.

+

+If a `package.json` exists in the subdirectory, we should update its fields like we do to `config.xml`. https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/create.js#L378-L382. Only field to update in `package.json` should be `package.name`. `package.name` should be updated to use `config.name` lowercased (npm package names have to be lowercase). `config.name` is the optional third argument `cordova create` takes.

+

+Example:

+`cordova create PATH APPID NAME CONFIGOPTIONS`

+

+Currently, package.json's version defaults to `1.0.0`. `config.xml` version seems to start at `0.0.1`. Probably a good idea to update our templates to set the initial version in `config.xml` to 1.0.0 instead. 

+

+Also:

+

+* create a how to create templates guide for docs. Talk about subdirectory as suggested method, add keyword `cordova:template`.

+

+### Future Work

+

+* create a search similar to plugins.cordova.io for templates based on the keyword.

+

+## References

+Original Proposal: https://github.com/cordova/cordova-discuss/blob/master/proposals/CLI-Templates.md

diff --git a/proposals/Face2Face-Oct15.md b/proposals/Face2Face-Oct15.md
index c4f4c5a..d455865 100644
--- a/proposals/Face2Face-Oct15.md
+++ b/proposals/Face2Face-Oct15.md
@@ -1,4 +1,5 @@
 # Cordova Face To Face Meeting
+- Status: Completed
 
  | |
 --- | --- | ---
diff --git a/proposals/GithubMove.md b/proposals/GithubMove.md
new file mode 100644
index 0000000..88c0e15
--- /dev/null
+++ b/proposals/GithubMove.md
@@ -0,0 +1,84 @@
+# Github Move
+
+https://issues.apache.org/jira/browse/INFRA-14347
+
+## To Github -> Platforms (4)
+
+- cordova-browser
+- cordova-ios
+- cordova-android
+- cordova-windows
+
+## To Github -> Tools and Docs (11)
+
+- cordova-cli
+- cordova-coho
+- cordova-common
+- cordova-create
+- cordova-fetch
+- cordova-js
+- cordova-lib
+- cordova-node-xcode
+- cordova-paramedic
+- cordova-plugman
+- cordova-docs
+
+## To Github -> Plugins (26)
+
+- cordova-plugin-inappbrowser
+- cordova-plugin-camera
+- cordova-plugin-geolocation
+- cordova-plugin-file
+- cordova-plugin-device
+- cordova-plugin-wkwebview-engine
+- cordova-plugin-dialogs
+- cordova-plugin-network-information
+- cordova-plugin-screen-orientation
+- cordova-plugin-globalization
+- cordova-plugin-vibration
+- cordova-plugin-battery-status
+- cordova-plugin-test-framework
+- cordova-plugin-media-capture
+- cordova-plugin-compat
+- cordova-plugin-console
+- cordova-plugin-splashscreen
+- cordova-plugin-statusbar
+- cordova-plugin-whitelist
+- cordova-plugin-file-transfer
+- cordova-plugin-media
+- cordova-plugin-contacts
+- cordova-plugin-device-motion
+- cordova-plugin-device-orientation
+- cordova-plugin-legacy-whitelist
+- cordova-plugins
+
+## NOT Moving -> Misc (11)
+
+- cordova-template-reference
+- cordova-test-platform
+- cordova-serve
+- cordova-medic
+- cordova-mobile-spec
+- cordova-labs
+- cordova-registry-web
+- cordova-registry
+- cordova-weinre
+- cordova-app-harness
+- cordova-app-hello-world
+
+## NOT Moving -> Platforms (14)
+
+- cordova-electron
+- cordova-amazon-fireos
+- cordova-firefoxos
+- cordova-osx
+- cordova-windows-phone
+- cordova-wp7
+- cordova-wp8
+- cordova-tizen
+- cordova-ubuntu
+- cordova-webos
+- cordova-qt
+- cordova-bada
+- cordova-bada-wac
+- cordova-blackberry
diff --git a/proposals/ImproveCordovaDocumentation.md b/proposals/ImproveCordovaDocumentation.md
index 0b77c8f..6c1efb8 100644
--- a/proposals/ImproveCordovaDocumentation.md
+++ b/proposals/ImproveCordovaDocumentation.md
@@ -1,4 +1,5 @@
 ### Improving Cordova Documentation
+- Status: Completed
 
 For the last few weeks, we have taken measures to get in touch with and understand the experiences of a Cordova user. We put up a survey which received > 900 responses and tried to understand the pain points of working with Cordova. As it was brought up in F2F as well, majority of the users (~100 survey responses) think that the Cordova documentation isn’t up to the mark and is the biggest problem they face. We went through the responses and have summarized them. 
 
diff --git a/proposals/ImprovedDocumentation.md b/proposals/ImprovedDocumentation.md
index 78a87a7..143daa5 100644
--- a/proposals/ImprovedDocumentation.md
+++ b/proposals/ImprovedDocumentation.md
@@ -1,17 +1,18 @@
 # Ways to improve [Cordova Documentation](http://cordova.apache.org/docs/en/edge/index.html)
+- Status: Mostly completed 
 
 During a recent thread in the mailing list, a suggestion was made to improve Cordova documentation to make it easy for developers to get started with Cordova.
 
 ## List of new topics that can be added
 
-Here are topcis for new articles that we can add. If you already know of an article that points to the topic, please add it next to the topic
+Here are topics for new articles that we can add. If you already know of an article that points to the topic, please add it next to the topic
 
 - [ ] Upgrading you project from older versions of Cordova CLI
-- [ ] Managing plugins using npm and plugman - [current page](http://cordova.apache.org/docs/en/edge/plugin_ref_plugman.md.html#Using%20Plugman%20to%20Manage%20Plugins)
+- [x] Managing plugins using npm and plugman - [current page](http://cordova.apache.org/docs/en/edge/plugin_ref_plugman.md.html#Using%20Plugman%20to%20Manage%20Plugins)
 - [ ] How to test Cordova applications
 - [x] Documentation around `--save` command for plugins and platforms [Here](http://cordova.apache.org/docs/en/5.1.1/platform_plugin_versioning_ref_index.md.html#Platforms%20and%20Plugins%20Version%20Management)
 - [x] More info on `<plugin>` tag replacing `<feature>`. Also how `<plugin>` tag autofetches on prepare
 [Here](http://cordova.apache.org/docs/en/5.1.1/platform_plugin_versioning_ref_index.md.html#Platforms%20and%20Plugins%20Version%20Management)
-- [ ] Whitelisting Guide
+- [x] Whitelisting Guide
 - [ ] Non CLI workflows (more npm/grunt/gulp friendly ones)
-- [ ] Update & simplify cordova-cli README.md
+- [x] Update & simplify cordova-cli README.md
diff --git a/proposals/ImprovedDocumentationGenerator.md b/proposals/ImprovedDocumentationGenerator.md
index 0e2aad8..785b89c 100644
--- a/proposals/ImprovedDocumentationGenerator.md
+++ b/proposals/ImprovedDocumentationGenerator.md
@@ -1,5 +1,6 @@
 Doc System Improvement Proposal
 ===============================
+- Status: Completed
 
 ## Motivation
 
diff --git a/proposals/NewInformationArchitecture.md b/proposals/NewInformationArchitecture.md
index eb95ff7..dfd1a4d 100644
--- a/proposals/NewInformationArchitecture.md
+++ b/proposals/NewInformationArchitecture.md
@@ -1,4 +1,5 @@
 ### New Information Architecture for Cordova Website
+- Status: Completed
 
 As a part of the task of improving the Cordova documentation, we came up with a new Information Architecture for the website. The current architecture was not very comprehensive and lacked a well-defined structure which made the documentation difficult to follow and find for people. Also we decided to add some new content based on the customer feedback from our website survey.
 
diff --git a/proposals/NightlyBuilds.md b/proposals/NightlyBuilds.md
new file mode 100644
index 0000000..6b31456
--- /dev/null
+++ b/proposals/NightlyBuilds.md
@@ -0,0 +1,49 @@
+#  Cordova nightly builds proposal
+
+We'd like to complete the work, started by @stevesgill in [CB-7904](https://issues.apache.org/jira/browse/CB-7904) and get nightly builds of cordova and related packages published on NPM.
+
+## Background
+
+Currently the only way to test the development version of cordova is to clone cordova and all dependent repos, link them to each other and npm install every cordova repository, which is pretty complicated. Using `cordova-coho` tool makes the process of setting up development cordova version a bit easier, but there is still a lot of caveats.
+
+Having development version of cordova published on npm would allow everyone to easily set up development version of cordova to test unreleased features, reproduce the bugs or confirm they get fixed in current version.
+
+Nightly builds in our understanding are an npm packages created from current 'master' branches of respective repos and available on NPM under `nightly` dist tag (`next` tag should be available as well and aliased to `nightly` ), so they easily could be installed like `npm i cordova@nightly`. All appropriate dependencies of nightly packages also will be updated to point to their nightly versions, e.g. `cordova-cli@6.2.0-nightly` will depend on `cordova-lib@6.2.0-nightly`, etc.
+
+The nightly version of cordova-lib will also have main platform pinned to their nightly versions, so `cordova install android` will automatically install `cordova-android@nightly` to allow early adopters test new features and bugfixes in platforms.
+
+The full format of nightly version is `<package_id>@<next_version>-nightly.<build_date>.<commit_SHA>`, for example:
+
+```
+cordova-lib@6.2.0-nightly.2016.05.12.16498003
+```
+
+This format is fully Semver-compatible and allows to us to easily recreate the same the cordova setup locally
+
+The nightly packages, we're planning to release, include Cordova tools (cordova-cli, cordova-lib, etc.) and the major platforms (Android, iOS, Windows)
+
+## How it will work
+
+All the aspects of creating and publishing nightly builds are automated using `cordova coho` command. Running `coho nightly` assumes the following steps:
+
+1. For every package to publish update respective repo to the latest commit
+2. For every package determine if there are any changes present since last nightly and if not - exclude that package from release. This step is required since we can't do automated unpublish of releases older than 1 day, so we need to do release only for actual changes to keep `npm view versions` list clean.
+
+2. For every package update version to nightly version
+  - Also update dependencies versions to point to nightly versions of other `cordova-*` dependencies
+  - Also update bundled dependencies - 'npm link' corresponding repos
+3. For every package run the tests to make sure that release will not contain any known bugs
+4. Publish packages on NPM under `nightly` dist tag
+
+The `cordova coho` command also accepts `--pretend` options to run these steps locally without publishing packages to NPM
+
+## Current status
+
+The work is currently in progress and the following items are completed:
+
+1. The [Jenkins job](https://builds.apache.org/view/A-D/view/Cordova/job/cordova-nightly/) that has npm set up using credentials for publishing packages
+2. The [update](https://github.com/apache/cordova-coho/pull/116) for `coho nightly` that supports publishing of 'cordova-cli' and `cordova-lib`
+3. Patches for `cordova-cli` and `cordova-lib` that fixes some tests that were failing when were running on nightly builds
+4. Support for [building arbitrary repos](https://github.com/apache/cordova-coho/pull/122) has been added.
+5. Support for [building nightlies for platforms](https://github.com/apache/cordova-coho/pull/124) has been added.
+6. Updated cordova to print necessary warnings and information about nightly versions of dependencies and platforms when running `cordova --version` and `cordova platform ls`
diff --git a/proposals/NodeJsDeprecation.md b/proposals/NodeJsDeprecation.md
new file mode 100644
index 0000000..cc2b991
--- /dev/null
+++ b/proposals/NodeJsDeprecation.md
@@ -0,0 +1,44 @@
+# Deprecation of node.js 0.x and upgrade to a minimum usage of node.js 4.x in Apache Cordova 
+- Status: Completed
+
+Right now, all the platforms and plugins require a minimum of `node 0.10` to be installed. `node 0.10` has been out of LTS [1] for a while now, and its maintenance period (security bug fixes) **stops on Oct 2016**. `node 0.12` will be out of maintenance **Jan 1st 2017**.
+
+I propose two distinct deprecation periods.
+
+Starting **Oct 1st 2016**, we will deprecate our `node 0.x` support, and we will recommend users migrate to using a more recent version of `node` immediately (at least `node 6.x`). The `node 0.x` deprecation period will run for **3 months**, and it will end on Jan 1st 2017. 
+
+Starting **Jan 1st 2017**, our support for `node 0.x` is over, and we will only support `node 4.x` and greater. 
+
+Staring **April 1st 2017**, we deprecate our `node 4.x` support, and we will recommend users migrate to using a more recent version of `node` immediately (at least `node 6.x`). The `node 4.x` deprecation period will run for **12 months** and it will end on April 1st 2018.
+
+Starting **April 1st 2018**, our support for `node 4.x` is over, and we will only support `node 6.x` and greater.
+
+`node 6.x` will be on active LTS **Oct 2016** (thus the default and recommended version to download on [nodejs.org](http://nodejs.org)) and should be the version we recommend for users to upgrade to, during both deprecation periods.
+
+What does `node 6.x` give us? `99% ES2015 (ES6)` support [2], and `100% ES2016 (ES7)` support [3].
+
+## Proposed Timeline
+
+**Oct 1st 2016** - deprecate use of `node 0.x`. Make sure all AppVeyor/Travis CI builds still test using `node 0.x` as well as `node 4.x` and greater. Add a requirements check that will print out a deprecation notice if they are using a node < 4, and telling them to upgrade to a minimum of 6.
+
+**Jan 1st 2017** - Stop `node 0.x` support. Make sure all AppVeyor/Travis CI builds only test for `node 4.x` and greater. Safe to use some ES6 features in Apache Cordova (built in Promises, let, const, arrow functions). Tools and platforms will have to bump a major version.
+
+**Apr 1st 2017** - deprecate use of `node 4.x`. Make sure all AppVeyor/Travis CI builds still test using `node 4.x` as well as `node 6.x` and greater. Add a requirements check that will print out a deprecation notice if they are using a node <= 4, and telling them to upgrade to a minimum of 6.
+
+**Apr 1st 2018** - Stop `node 4.x` support. Make sure all AppVeyor/Travis CI builds only test for `node 6.x` and greater. Safe to use ES6 and ES7 features in Apache Cordova. Tools and platforms will have to bump a major version.
+
+![cordova node deprecation timeline](images/cordova-node-timeline.png)
+
+## Sources
+ 
+[1] [https://github.com/nodejs/LTS](https://github.com/nodejs/LTS)
+
+[2] [http://node.green/#ES2015](http://node.green/#ES2015)
+
+[3] [http://node.green/#ES2016](http://node.green/#ES2016)
+
+
+
+
+
+
diff --git a/proposals/PlatformProject.md b/proposals/PlatformProject.md
index b7ebabe..665f923 100644
--- a/proposals/PlatformProject.md
+++ b/proposals/PlatformProject.md
@@ -1,4 +1,5 @@
 # PlatformProject and platform specific code refactoring for cordova-lib
+- Status: Abandoned
 
 This is based on the [PlatformProject](https://github.com/kamrik/CordovaPlatformProject) experiment 
 discussed during the last Cordova hangout and described in this 
diff --git a/proposals/PluginDocsGen.md b/proposals/PluginDocsGen.md
new file mode 100644
index 0000000..a41265e
--- /dev/null
+++ b/proposals/PluginDocsGen.md
@@ -0,0 +1,39 @@
+# Cordova docs-gen proposal
+
+## Intro
+
+Cordova plugins documentation currently live separated from source code so that sync issues can occur on commits.
+Proposed solution uses [JSDoc](http://usejsdoc.org/) to generate a plugin API docs, while allows to wrap the generated docs into template (markdown with handlebars partials) with extra-details like Quirks or additional examples.
+
+## Libraries/frameworks used
+
+* [jsdoc-to-markdown](https://github.com/jsdoc2md/jsdoc-to-markdown/)
+
+Proposal is currently implemented for cordova-plugin-camera only: [generated doc result](https://github.com/apache/cordova-plugin-camera/blob/dcc81bfbe16244cb460d3c5da79fe6ec22795ce7/README.md).
+
+**Pros**:
+
+* A nice TOC helps in understanding what APIs are exposed,
+* A better structure for args with a table showing default values,
+* Hyperlinks for type definitions,
+* Literate programming makes sense - docs & code remain together,
+* A common plugin [template](https://github.com/daserge/dmd-plugin-cordova-plugin) that is shared among all cordova official plugins including basic details such as:
+  * How to install,
+  * Where to file bugs,
+  * Where to discuss design questions,
+  * Provide a pointer to slack plugins community,
+  * Buildbot badge.
+
+**Cons**:
+
+* Requires a generation script before every commit
+
+**Summary instructions**:
+
+* Put a template including license, header, install steps and extra docs (quirks) to `jsdoc2md/TEMPLATE.md`,
+* Document `www` folder source code using JSDoc,
+* [Mark all template extra-docs sections, which will be linked to as an `<a>` with `name`](https://github.com/MSOpenTech/cordova-plugin-camera/blame/5001fe35a091a6846e3207fe70fb5502743cfcd3/jsdoc2md/TEMPLATE.md#L96),
+    * [Link JSDocs to the template' extra docs sections](https://github.com/MSOpenTech/cordova-plugin-camera/blob/5001fe35a091a6846e3207fe70fb5502743cfcd3/www/Camera.js#L126),
+* Call `npm install` to install dev dependencies,
+* Call [npm run gen-docs](https://github.com/MSOpenTech/cordova-plugin-camera/blob/5001fe35a091a6846e3207fe70fb5502743cfcd3/package.json#L45) to generate the documentation,
+    * Docs generation script will also be called [automatically*](https://github.com/apache/cordova-plugin-camera/blob/dcc81bfbe16244cb460d3c5da79fe6ec22795ce7/package.json#L42) via [husky](https://www.npmjs.com/package/husky) precommit hook (*`npm install` is required).
diff --git a/proposals/Telemetry.md b/proposals/Telemetry.md
index 1ac7304..c615ae7 100644
--- a/proposals/Telemetry.md
+++ b/proposals/Telemetry.md
@@ -1,4 +1,5 @@
 # Telemetry Proposal
+- Status: Completed
 
 Currently, we have no definitive way of answering the following questions:
 - What features of Cordova are used and how often are they used ?
diff --git a/proposals/ThirdPartyPackageManagers.md b/proposals/ThirdPartyPackageManagers.md
index a4df071..6d2727e 100644
--- a/proposals/ThirdPartyPackageManagers.md
+++ b/proposals/ThirdPartyPackageManagers.md
@@ -1,4 +1,5 @@
 # Third-party Package Manager Support For Plugins 
+- Status: Proposed
 
 Corresponding mailing list discussion [is here](http://markmail.org/message/5qvg6rwr4nz4q7mc).
 
@@ -18,7 +19,7 @@
     <engine name="nuget" version=">=3.2" platform="windows" />
 </engines>
 
-<framework src="path/to/mypod.podspec" type="podspec" />
+<framework src="name_of_cocoapod" type="podspec" spec="~> 1.1.2"/>
 <framework src="path/to/mynu.nuspec" type="nuspec" />
 ```
 
@@ -31,3 +32,14 @@
 ## Framework Tag
 
 The `src` attribute can be a relative path or a URL. The `type` attribute specifies the type of framework that corresponds to the `engine` supported. In this case type `podspec` means that the lib should be installed using the `cocoapods` package manager, and `nuspec` for the `nuget` package manager.
+
+## Spec Argument
+
+The `spec` arugment will specify the version of the CocoaPod that is to be used. `~>` is CocoaPod's optimistic operator-- copied from [CocoaPods docs](http://guides.cocoapods.org/using/the-podfile.html): 
+  - '~> 0.1.2' Version 0.1.2 and the versions up to 0.2, not including 0.2 and higher
+  - '~> 0.1' Version 0.1 and the versions up to 1.0, not including 1.0 and higher
+Cocoapods also support logical operators:
+  - '> 0.1' Any version higher than 0.1
+  - '>= 0.1' Version 0.1 and any higher version
+
+The string passed in the `spec` argument will be pasted into the Podfile.  
diff --git a/proposals/android-n-support.md b/proposals/android-n-support.md
index 90dd47d..22504c4 100644
--- a/proposals/android-n-support.md
+++ b/proposals/android-n-support.md
@@ -1,4 +1,5 @@
 # Android N and Cordova

+- Status: Proposed

 

 The purpose of this discuss is to highlight the new features of Android N

 that may affect Cordova. I did a brief investigation of the upcoming changes

@@ -40,7 +41,5 @@
 that does not support it and it causes problems. It's something to be aware of.

 Developers can also disable multi-window support by editing AndroidManifest.xml.

 

-

-

 [android-n-query]: https://issues.apache.org/jira/issues/?jql=project%20%3D%20CB%20AND%20status%20in%20(Open%2C%20%22In%20Progress%22%2C%20Reopened)%20AND%20labels%20%3D%20AndroidN

 [other-behavior-changes]: http://developer.android.com/preview/behavior-changes.html#other
\ No newline at end of file
diff --git a/proposals/autosave-by-default.md b/proposals/autosave-by-default.md
new file mode 100644
index 0000000..4c7c634
--- /dev/null
+++ b/proposals/autosave-by-default.md
@@ -0,0 +1,42 @@
+# Autosave by default for cordova@7 Proposal
+Status : Proposed
+
+## Current
+To save or remove dependencies, users must include the --save flag.
+
+Examples: 
+cordova platform add ios --save
+cordova plugin add cordova-plugin-camera --save
+
+## Proposal
+Autosave will be the default option.
+Example: cordova platform add ios
+This command will automatically save the ios platform.
+Include a --no-save flag to not save.
+Example: cordova platform add ios --nosave
+This command will allow the ios platform to NOT be saved.
+
+### Notes
+Autosave will only be used in the cli right now (not cordova-lib).
+If you're using cordova-lib directly, you will still need to use the
+--save flag.
+
+### Future Goals
+Include a global config to turn autosave off for cordova.
+https://issues.apache.org/jira/browse/CB-11982
+
+### Links
+https://issues.apache.org/jira/browse/CB-12008
+
+### Motivation
+ Our analytics show --save usage is pretty low (presumably due to people not knowing about it). By having autosave as the default, users won’t have to worry about remembering to save. If users don’t want to save, there are options to opt out of saving with the new --nosave flag.
+
+### Use Cases/Tests:
+1. Cordova platform add ios, expect save to be true.
+2. Cordova platform remove ios, expect save to be true.
+3. Cordova plugin add cordova-plugin-camera, expect save to be true.
+4. Cordova plugin remove cordova-plugin-camera, expect save to be true.
+5. Cordova platform add ios --nosave, expect save to be false.
+6. Cordova platform remove ios --nosave, expect save to be false. 
+7. Cordova plugin add cordova-plugin-camera--nosave, expect save to be false.
+8. Cordova plugin remove cordova-plugin-camera --nosave, expect save to be false.
diff --git a/proposals/ci-for-plugin-prs.md b/proposals/ci-for-plugin-prs.md
new file mode 100644
index 0000000..e843fa6
--- /dev/null
+++ b/proposals/ci-for-plugin-prs.md
@@ -0,0 +1,57 @@
+# CI for PRs submitted for Plugins
+We are currently working on introducing a CI (Continuous Integration) build process for the PRs submitted to the cordova plugin repositories. This would help the community to catch issues before checking in the code. I am currently working on a prototype. I would like to share the idea and get early feedback on it.
+
+## Background
+Currently, Cordova plugins have [continuous intergration builds][buildbot] running:
+
+* Periodically with master branch
+* Per commit
+
+This process, though helpful, have the following disadvantages:
+
+* Code issues, that might break cordova, are not caught before checking in.
+* There is no easy way for the code submitter to reproduce the error locally
+* The [UI][buildbot] provided by the CI system is not very intutive.
+* CI builds could not be run per plugin. Each build has to run tests for all the plugins
+
+## Proposal
+This proposal recommends to use [Jenkins][jenkins] as our new CI system instead of buildbot. With Jenkins and its huge list of plugins, we could achieve a lot more functionality such as GitHub Pull requests, updating PRs, generating test reports and a much better UI.
+
+Initially, we considered using the [Jenkins Master machine][apachejenkins] provided by ASF. But, after further discussions through [emails][infraemails] and [infra ticket][infraticket], we realized that it is not possible to hook up our slave machines with the ASF master. So, we need a new Jenkins master machine that could be hooked to our slave machines **and** accessible publicly. We have decided to use a Jenkins master machine that is deployed on Azure cloud. You could see the prototype here - [http://cordova-ci.cloudapp.net:8080/](http://cordova-ci.cloudapp.net:8080/)
+
+This master machine will be connected to two slaves which are actual physical machines. One of them will be a [Windows 10 machine][win10slave] and the other will be a [Mac machine][macslave].
+
+The Jenkins master uses the [ghprb][ghprb] (Github Pull Request Builder Plugin) plugin to poll github, every five minutes, to check for new PRs and changes to existing PRs. If a new PR (or a commit to an existing PR) has been detected, then the change is picked up and a new CI build is triggered on the following platforms:
+
+* iOS (on Mac OS Slave)
+* Android (on Mac OS Slave)
+* Android (on Windows 10 Slave)
+* Windows 8.1 Store (on Windows 10 Slave)
+* Windows 8.1 Phone (on Windows 10 Slave)
+* Windows 10  Store (on Windows 10 Slave)
+
+This build uses the [cordova-paramedic][paramedic] package to test the plugin. This package will help to test the specific plugin that is changed. Paramedic also provides a simple and easy way for the PR submitter to reproduce the error locally and test the changes.
+
+Once the build is complete, the PR will be updated with the a comment indicating the result of the CI build and a link to the build job. You could see a sample PR created as a prototype here - [https://github.com/sarangan12/cordova-plugin-console/pull/18](https://github.com/sarangan12/cordova-plugin-console/pull/18). The build link will have detailed console logs and also device logs.
+
+A new github user (such as "CordovaQA") will be created to update the comments in the PR. This approach has been used by [Apache Spark project][sparkpr] also.
+
+In addition to new changes submitted to PR, a CI build could be triggered by fixed phrases in the PR comments (such as "CordovaQA - Test these changes."). In addition to the CI builds per PR, there will be periodic builds per plugin on the master branch.The Jenkins master will have Github OAuth integrated in it. Everybody (even without a GitHub authentication) will have [view][viewaccess] access. Edit/Configure access will be provided based on per request basis.
+
+## Status of Prototype
+Currently, the prototype is a work in progress. It should be completed soon. I will send out the updates to the dev list once the prototype is complete.
+
+## Future considerations
+In future we might consider using services such as saucelabs to run our CI builds (instead of physical slaves).
+
+[buildbot]: https://ci.apache.org/waterfall?category=cordova
+[jenkins]: https://jenkins.io/
+[apachejenkins]: https://builds.apache.org/
+[infraticket]: https://issues.apache.org/jira/browse/INFRA-11527
+[infraemails]: https://mail-archives.apache.org/mod_mbox/www-builds/201603.mbox/%3CBN3PR03MB13680A9928B866FA661CE0B3D1B50@BN3PR03MB1368.namprd03.prod.outlook.com%3E
+[win10slave]: http://cordova-ci.cloudapp.net:8080/computer/windows-slave/
+[macslave]: http://cordova-ci.cloudapp.net:8080/computer/mac-slave/
+[ghprb]: https://github.com/janinko/ghprb
+[sparkpr]: https://github.com/apache/spark/pull/12745
+[viewaccess]: http://cordova-ci.cloudapp.net:8080/view/Console%20Plugin/
+[paramedic]: https://github.com/apache/cordova-paramedic
diff --git a/proposals/cordova-config-command.md b/proposals/cordova-config-command.md
new file mode 100644
index 0000000..dfd912f
--- /dev/null
+++ b/proposals/cordova-config-command.md
@@ -0,0 +1,44 @@
+# Create New Cordova Config Command Proposal
+Status : Proposed
+
+## Current
+Currently, telemetry and update-notifier use https://github.com/yeoman/configstore under the hood. Stores configs in ~/.config/configstore/
+
+Sample code
+
+const Configstore = require('configstore');
+const pkg = require('./package.json');
+
+// create a Configstore instance with an unique ID e.g.
+// package name and optionally some default values
+const conf = new Configstore(pkg.name, {foo: 'bar'});
+
+console.log(conf.get('foo'));
+//=> 'bar'
+
+conf.set('awesome', true);
+console.log(conf.get('awesome'));
+//=> true
+
+// use dot-notation to access nested properties
+conf.set('bar.baz', true);
+console.log(conf.get('bar'));
+//=> {baz: true}
+
+conf.delete('awesome');
+console.log(conf.get('awesome'));
+//=> undefined
+
+## Proposal
+Create a new cordova config command modeled after npm config command. It will include a global config to turn autosave off for cordova. https://docs.npmjs.com/cli/config
+
+### Future Goals ?
+Any other suggestions on what else you would like to see in the global config?
+
+### Links
+https://issues.apache.org/jira/browse/CB-11982
+https://github.com/yeoman/configstore 
+https://docs.npmjs.com/cli/config
+
+### Motivation
+This new command provides the ability to store environment variables (similarly to browserify, fetch, and save).
\ No newline at end of file
diff --git a/proposals/cordova-lib refactoring/Cordova-lib refactoring proposal.md b/proposals/cordova-lib refactoring/Cordova-lib refactoring proposal.md
index 16c2d69..40da58b 100644
--- a/proposals/cordova-lib refactoring/Cordova-lib refactoring proposal.md
+++ b/proposals/cordova-lib refactoring/Cordova-lib refactoring proposal.md
@@ -1,3 +1,7 @@
+
+# Cordova-lib Refactoring proposal
+Status: Completed
+
 The proposal describes the way how we can improve current cordova lib design and interaction between cordova lib and platforms. The document contains high-level descriptions of proposed interfaces only. Fo more details on methods signatures see *.js files in this pull request.
 
 The most important points of this proposal are:
diff --git a/proposals/create-breakout.md b/proposals/create-breakout.md
new file mode 100644
index 0000000..44ed7b2
--- /dev/null
+++ b/proposals/create-breakout.md
@@ -0,0 +1,24 @@
+# cordova-create breakout Proposal

+

+status - In Progress

+

+## Overview

+

+Continuing the trend of breaking up cordova-lib into smaller modules, I'd like to see us break out `cordova-create`.

+

+`cordova-create` handles creating a cordova compatible project. It also handles templates. 

+

+This module would allow third party tools to not have to depend on `cordova` and/or `cordova-lib` to create cordova style projects. Some third party tools already have their own implementations to create a cordova style project that may differ from cordova's implementation which can cause problems.

+

+With `cordova-create`, we also get the benefits of having a smaller module that is easier to maintain and test.

+

+### Proposal

+

+Break out cordova-create into its own module and publish it to npm. It will live in the `cordova-lib` repo. `cordova-create` will be a dependency of `cordova-lib` and used when creating a cordova project.

+

+We already have a implentation ready for review at https://github.com/carynbear/cordova-create. This will have to be moved into cordova-lib's repo if this proposal is approved.

+

+## References

+

+* Issue: https://issues.apache.org/jira/browse/CB-11607

+* Implementation: https://github.com/carynbear/cordova-create

diff --git a/proposals/fetching.md b/proposals/fetching.md
new file mode 100644
index 0000000..c69164b
--- /dev/null
+++ b/proposals/fetching.md
@@ -0,0 +1,59 @@
+# Unified Cordova Fetching Proposal
+- Status: Completed
+
+### Current
+
+Three existing fetching implementations.
+
+1. Platform Fetching 
+    - Platform.js https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/platform.js#L258
+    - Lazy Load https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/lazy_load.js
+
+2. Plugin Fetching
+
+    a) cordova plugin fetching
+        - plugin.js https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/plugin.js#L147
+        - fetch.js https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/plugman/fetch.js
+        - registry.fetch https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/plugman/registry/registry.js#L123
+    b) plugman plugin fetching
+        - install.js https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/plugman/install.js
+        - possiblyFetch https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/plugman/install.js#L104
+        - fetch.js https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/plugman/fetch.js
+        - registry.fetch https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/plugman/registry/registry.js#L123
+
+3. Template Fetching
+    - create.js https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/create.js#L167
+    - remote load https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/remote_load.js
+
+Both lazy load and remote load use gitclone.js https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/gitclone.js
+
+Currently, platforms and templates are cached at `~/.cordova/lib/npm_cache/PACKAGE`. On master, plugins are being cached to `~/.npm/PACKAGE`.
+
+### Proposal:
+
+* Create a new module named `cordova-fetch`. Fetches from npm and git. 
+* Start using system installed `npm` instead of packaging our own `npm` in `cordoba-lib`. We already check for `git` being installed, we should do the same for `npm`. We would use  `superspawn` to shell out to the system `npm`.
+* Stop using `.cordova/lib/npm_cache/`. Modules instead get fetched to root `node_modules` directory in your applications
+* Add new `--fetch` flag to `cordova` and `plugman` to use `cordova-fetch` over existing fetching methods
+* Plugin/platform removal should run `npm uninstall` on your cordova projects to remove the module from the apps `node_modules` directory.
+* if a `package.json` exists, adding `--save` will also add the dependency to `package.json` (as well as to `config.xml`). This won't be used until a future update is made to move save functionality from `config.xml` to `package.json`. Just adding it now for future proofing.
+* Add `--fetch` flag to `cordova create APPID --template TEMPLATEID/GITURL` to use cordova-fetch when getting the template. The template is fetched to `.cordova/node_modules/` directory and the appropriate files are added. 
+
+### New Requirements
+
+* Have to remove support for installing plugins/platforms from git subdirectoires. https://cordova.apache.org/docs/en/5.0.0/guide/cli/#advanced-plugin-options. I recommend we add deprecation notices for this ASAP.
+* Every plugin, platform and template requires a `package.json`
+
+### Quirks
+
+* Currently, I am using a diff of `npm ls` to determine which module was just installed. This is because the user can pass in a git url as a target to `cordova-fetch`. If the git url repo-name is different than the `package.name`, only way to get what module was just installed is by doing a diff before and after the installation. The diffing technique can fail if the user is adding a module that has already been npm installed. Luckily cordova doesn't allow adding platform/plugin which has already been added. cordova platform/plugin rm will also remove the module from the applications `node_modules` directory.
+* As a fallback to the diffing method, I am taking the target or repo-name as the module name. Hopefully this won't be needed.
+
+### Future goals
+
+* add a package.json to cordova projects, update `cordova` to start using `package.json` as well as `config.xml`. This requires moving over some functionality from `config.xml` and updating tools to look in `package.json` before checking `config.xml`.
+
+### Links
+Issues: https://issues.apache.org/jira/browse/CB-9858 & https://issues.apache.org/jira/browse/CB-11349
+
+
diff --git a/proposals/images/cordova-node-timeline.png b/proposals/images/cordova-node-timeline.png
new file mode 100644
index 0000000..6d92d62
--- /dev/null
+++ b/proposals/images/cordova-node-timeline.png
Binary files differ
diff --git a/proposals/ios-whitelist-removal.md b/proposals/ios-whitelist-removal.md
index dc344d5..2da53e6 100644
--- a/proposals/ios-whitelist-removal.md
+++ b/proposals/ios-whitelist-removal.md
@@ -1,4 +1,5 @@
 # Proposal to Remove the Cordova iOS Native Whitelist
+- Status: Completed
 
 This proposal is to advocate for the removal of the usage of the cordova-plugin-whitelist plugin in cordova-ios-4.x.
 
diff --git a/proposals/jshint-to-eslint.md b/proposals/jshint-to-eslint.md
new file mode 100644
index 0000000..e455752
--- /dev/null
+++ b/proposals/jshint-to-eslint.md
@@ -0,0 +1,68 @@
+# Jshint to Eslint Proposal
+- Status: Proposed
+- CB-12895
+
+## Current
+
+Currently, the .jschintrc files in most cordova repos have the following settings: 
+
+```
+{   "node": true
+  , "bitwise": true
+  , "undef": true
+  , "trailing": true
+  , "quotmark": true
+  , "indent": 4
+  , "unused": "vars"
+  , "latedef": "nofunc"
+  , "jasmine": true
+  , "esversion": 6
+}
+```
+
+## Overview
+
+This is a proposal to determine which settings/rules we should keep, ignore, or add when moving from jshint to eslint.
+
+When we switch to eslint, we will be able to keep the same jshint settings (listed above). 
+
+We are also using ‘extends’, which is taking a set of rules and adding them to your config. There are more than one 'extends' to pick from and so far we are using semi-standard because it supports checking for semi-colons. (Note : semi-standard adds Standard, and then adds the one rule on top of that for semicolons).
+
+When using semi-standard, eslint is pickier about a few more things than jshint. It has certain rules that are built in. These additional rules in eslint could either be just turned off and ignored if we don’t think they are necessary. (In some cases you can customize your rules. For instance, you can change the indenting from 2 to 4).
+
+Link to the standard rules —> https://standardjs.com/rules.html
+
+There are many rules and listed below are the ones that have come up most frequently when testing eslint using extending semi-standard in cordova-repos.
+
+1. Fixable: means that this rule is fixable using the --fix flag on the command line. The checks/rules below are all fixable.: 
+ 
+* `comma-spacing` - enforce spacing before and after comma
+* `keyword-spacing` - enforce spacing before and after keywords
+* `no-multi-spaces` - disallow use of multiple spaces
+* `space-before-function-paren` - require or disallow a space before function opening parenthesis
+* `spaced-comment` - require or disallow a space immediately following the // or /* in a comment
+* `space-infix-ops` - require spaces around operators
+ 
+2. Not fixable with --fix flag, but also come up a lot:
+
+* `brace-style` - enforce one true brace style
+* `camelcase` - require camel case names
+* `curly` - specify curly brace conventions for all control statements
+* `eqeqeq` - require the use of === and !==
+* `no-extra-boolean-cast` - disallow double-negation boolean casts in a boolean context
+* `no-throw-literal` - restrict what can be thrown as an exception
+* `operator-linebreak` - enforce operators to be placed before or after line breaks
+* `padded-blocks` - enforce padding within blocks
+
+## Proposal
+
+I propose that we keep the eslint semi-standard defaults in initially and remove padded-block, operator-linebreaker, and no-throw-literal.
+
+## Questions
+Would we like to use eslint's semi-standard default rules across the cordova repos or would we prefer to ignore certain ones and turn them off? Are there any other eslint rules not listed above that we would like to turn off or customize? Concerns? Thoughts? Pros and cons?
+
+## Links
+* Link to all the eslint rules —> http://eslint.org/docs/2.0.0/rules/
+* Link to the standard rules --> https://standardjs.com/rules.html 
+* Link semi-standard example --> https://github.com/Flet/eslint-config-semistandard/blob/master/eslintrc.json
+* Link to Jira issue CB-12895 --> https://issues.apache.org/jira/browse/CB-12895
\ No newline at end of file
diff --git a/proposals/pinningAndVersioning.md b/proposals/pinningAndVersioning.md
index b45416d..0bad4b7 100644
--- a/proposals/pinningAndVersioning.md
+++ b/proposals/pinningAndVersioning.md
@@ -1,4 +1,5 @@
 # Pinning and Versioning
+- Status: Completed
 
 ## Pinning Plugins
 
diff --git a/proposals/plugin-version-fetching.md b/proposals/plugin-version-fetching.md
index 4916e03..9cc3fb1 100644
--- a/proposals/plugin-version-fetching.md
+++ b/proposals/plugin-version-fetching.md
@@ -1,4 +1,5 @@
 # Plugin Version Fetching Proposal

+- Status: Completed. Ideas incorporated in cordova-lib refactoring proposal

 

 ## Overview

 

diff --git a/proposals/save-restore.md b/proposals/save-restore.md
new file mode 100644
index 0000000..762cd30
--- /dev/null
+++ b/proposals/save-restore.md
@@ -0,0 +1,104 @@
+# Unified Cordova npm save & restore Proposal
+- Status: In Progress
+
+## Current
+
+Existing save/restore functionality
+
+1. `cordova plugin add/rm PLUGINNAME||gitURL||localPlugin --save`
+    - adds/rms `<plugin name="cordova-plugin-device" spec="../../cordova-plugin-device" />` to `config.xml`.
+    - plugin add: https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/plugin.js#L210-L235
+    - plugin rm: https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/plugin.js#L291-L298
+    - plugin variables: https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/plugin.js#L156-L175 & https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/plugin.js#L445-L464
+
+2. `cordova platform add/rm Platform||gitURL||localPath --save`
+    - adds/rms `<engine name="ios" spec="~4.2.1" />` to `config.xml`
+    - platform rm: https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/platform.js#L247-L263
+    - platform add: https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/platform.js#L227-L238
+
+3. `cordova platform/plugin save`
+    - adds installed but not saved plugins + platforms to `config.xml`
+    - platforms: https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/platform.js#L247-L263
+    - plugins: https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/plugin.js#L409-L451
+
+4. autosave for platforms and plugins (didn't test, not documented)
+    - manually create .cordova/config.json, add `"auto_save_plugins":"true"` and `"auto_save_platforms":"true"`
+    - https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/platform.js#L76
+    - https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/plugin.js#L538-L542
+ 
+5. `cordova prepare` restores missing plugins and platforms based on `config.xml`
+    - https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/restore-util.js
+    - https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/prepare.js#L46
+    - https://github.com/apache/cordova-lib/blob/master/cordova-lib/src/cordova/prepare.js#L66
+
+## Proposal:
+
+* Support saving and restoring plugins/platforms in `package.json`. 
+* `config.xml` is used preferences, `package.json` is used for saving & restoring.
+* Introduce a new `cordova` key in `package.json` that stores an array of saved platforms and a plugins object containing saved plugins. The `cordova` key will also store plugin variables, with the key being the plugin name and the value being an object that contains the variable information. The `cordova` key is required for restoring.
+
+Example: 
+```javascript
+{
+...
+    "dependencies": {
+        "cordova-plugin-device": "^1.1.3",
+        "cordova-android": "^5.2.2",
+        "cordova-ios": "https://github.com/apache/cordova-ios"
+    },
+    //new cordova key
+    "cordova": {
+        "platforms": ["andoid","ios"],
+        "plugins": {
+          //store plugin variables if present
+          "cordova-plugin-facebook4": {"APP_ID":"123456", "APP_NAME":"myApp"},
+          "cordova-plugin-device": {}
+        }
+    }
+...
+}
+```
+
+* `--save` should save to `package.json` as well as `config.xml`. This is already possible with `cordova-fetch`. `cordova plugin/platform add/rm --save --fetch` will update `config.xml` and `package.json` if it exists. The `--fetch` flag allows us to pass the `--save` flag down to our `npm install PLUGIN/PLATFORM` command. Plugins and platforms get added as regular dependencies in `package.json` this way. The plan is to make `--fetch` default in **cordova@7**.
+* `cordova plugin/platform add/rm --save` will add/rm the plugin/platform to the new `cordova` key. If your plugin has variables, they will also be added/removed to the `cordova` key in this step.
+* restoring:  Look in both `config.xml` and `package.json` for plugin and platform dependencies. Use `cordova` key from `package.json` to restore. Restoring currently happens on a prepare. Restoring may become its own command in **cordova@7**. Read the proposal for that [here](https://github.com/cordova/cordova-discuss/pull/5://github.com/cordova/cordova-discuss/pull/54). 
+* autosave: remove functionality. Have docs telling users they can set autosave in npm config if they want it. `npm config set save=true`. `cordova-fetch` will use system *npm*, so this *should* work, but we will have to test it.
+* `cordova platform/plugin save`: Adds existing, unsaved platforms/plugins to `package.json`. Edits need to be made to the `cordova` key and `dependencies` key.
+
+My plan is to add the new save/restore `package.json` logic alongside the existing `config.xml` logic. If your project has a `package.json`, it will start saving to it as well as `config.xml`. 
+
+### Notes
+
+* cordova plugin fetching logic will still be respected. If you don't specify a plugin version, the proper version based on `cordovaDependencies` will be fetched.
+* cordova platform fetching logic will stay intact. cordova will grab the pinned platform version unless a different version is specified.
+* cordova plugin dependency resolution will work as it currently does. This includes making sure a plugin doesn't install twice. 
+
+### New Requirements
+
+* Need to create a easy way to migrate `config.xml` saved platforms and plugins into `package.json`. I'm thinking this happens during the restore phase. Alternatively, we could create a new command to do it (`cordova install`). In the PR, this is done during the restore phase (prepare)
+* Automatically add `package.json` to existing cordova projects which don't have it. This would happen in `prepare`. **cordova@7** feature.
+* After `cordova prepare`, the restore code will make platforms and plugins in `package.json` and `config.xml` match. The two files should contain the same information. In case of conflicts (say between spec or plugin variables), `package.json` wins. 
+
+### Quirks
+
+* Running `npm install` on your projects will fetch the dependencies in `package.json`, but a `cordova prepare` (restore) will be needed to install them to your cordova project.
+* Running `npm install cordova-plugin-device` will fetch the plugin, but won't install it. `cordova plugin add cordova-plugin-device --save` will still be required. Same goes for platforms. Positive is, the plugin/platform will already be fetched.
+* cordova git subdirectories syntax will not be supported anymore for adding plugins. Ex: http://cordova.apache.org/docs/en/latest/reference/cordova-cli/index.html#plugin-spec
+* If you add a plugin/platform with the `--save --fetch` flags, the spec will be saved as `^4.2.0` vs `~4.2.0`. This means we are telling our users it is safe to do minor plugin and platform updates when they have to restore. Our current policy has been to only allow patch updates. This is due to us letting npm handle the install under the hood.
+* If you add a plugin/platform with `--fetch` and then later want to restore the platform/plugin, you will have to use the `--fetch` flag. `cordova prepare --fetch`. This is because `--fetch` uses npm under the hood which saves gitURL + fileURL specs differently than how we have traditionally saved them in `config.xml`. If you try to restore platforms/plugins that were added via `--fetch` from gitURLs or fileURLs, and don't use `--fetch`, an error is expected. Original specs from `config.xml` don't have any problems working with `--fetch` for restore. 
+
+### Future goals
+
+* **Cordova@8** will drop save/restore support from `config.xml` and only use `package.json`. This should give ample time to downstreams and IDEs to prepare.
+
+### Links
+
+* https://issues.apache.org/jira/browse/CB-12001
+* https://issues.apache.org/jira/browse/CB-11960
+* PR: https://github.com/apache/cordova-lib/pull/499
+
+### Motivation
+
+1) Remove technical debt. We would remove a bunch of code in regards to managing our depenendencies and instead rely on **npm** to do the work.
+2) Update to a more modern/expected system for users to manage their dependencies
+3) We are going to add a `package.json`. Having a `package.json` may also encourage users to use other node modules in their development.