diff --git a/.gitignore b/.gitignore
index 9e75cf3..fff1da3 100644
--- a/.gitignore
+++ b/.gitignore
@@ -5,3 +5,5 @@ npm-debug.log
test/unit/coverage
.coveralls.yml
.flowconfig
+docs/_book
+docs/node_modules
\ No newline at end of file
diff --git a/docs/Advanced/Vuex.md b/docs/Advanced/Vuex.md
new file mode 100644
index 0000000..c638457
--- /dev/null
+++ b/docs/Advanced/Vuex.md
@@ -0,0 +1,18 @@
+### Change Event Vuex Compatibility
+
+`vue-select` provides a `change` event. This function is passed the currently selected value(s) as it's only parameter.
+
+This is very useful when integrating with Vuex, as it will allow your to trigger an action to update your vuex state object. Choose a callback and see it in action.
+
+
+```html
+
+```
+
+```js
+methods: {
+ consoleCallback(val) {
+ console.dir(JSON.stringify(val))
+ },
+}
+```
diff --git a/docs/Ajax.md b/docs/Ajax/Ajax.md
similarity index 100%
rename from docs/Ajax.md
rename to docs/Ajax/Ajax.md
diff --git a/docs/AjaxExample.md b/docs/Ajax/AjaxExample.md
similarity index 100%
rename from docs/AjaxExample.md
rename to docs/Ajax/AjaxExample.md
diff --git a/docs/AjaxProps.md b/docs/Ajax/AjaxProps.md
similarity index 100%
rename from docs/AjaxProps.md
rename to docs/Ajax/AjaxProps.md
diff --git a/docs/Basics.md b/docs/Basics.md
new file mode 100644
index 0000000..7e69810
--- /dev/null
+++ b/docs/Basics.md
@@ -0,0 +1 @@
+## Getting Started
diff --git a/docs/Basics/Localization.md b/docs/Basics/Localization.md
new file mode 100644
index 0000000..e69de29
diff --git a/docs/Basics/Options.md b/docs/Basics/Options.md
new file mode 100644
index 0000000..6b5609e
--- /dev/null
+++ b/docs/Basics/Options.md
@@ -0,0 +1,36 @@
+## Dropdown Options {#options}
+
+`vue-select` accepts arrays of strings or objects to use as options through the `options` prop:
+
+```html
+
+```
+
+When provided an array of objects, `vue-select` will display a single value of the object. By default, `vue-select` will look for a key named `label` on the object to use as display text.
+
+```html
+
+```
+
+### Option Labels {#labels}
+
+When the `options` array contains objects, `vue-select` looks for the `label` key to display by default. You can set your own label to match your source data using the `label` prop.
+
+For example, consider an object with `countryCode` and `countryName` properties:
+
+```json
+{
+ countryCode: "CA",
+ countryName: "Canada"
+}
+```
+
+If you wanted to display `Canada` in the dropdown, you'd use the `countryName` key:
+
+```html
+
+```
+
+### Null / Empty Options {#emptyOptions}
+
+`vue-select` requires the `option` property to be an `array`. If you are using Vue in development mode, you will get warnings attempting to pass anything other than an `array` to the `options` prop. If you need a `null`/`empty` value, use an empty array `[]`.
diff --git a/docs/Basics/Values.md b/docs/Basics/Values.md
new file mode 100644
index 0000000..e8b596b
--- /dev/null
+++ b/docs/Basics/Values.md
@@ -0,0 +1,23 @@
+## Selecting Values {#values}
+
+The most common use case for `vue-select` is to have the chosen value synced with a parent component. `vue-select` takes advantage of the `v-model` syntax to sync values with a parent.
+
+```html
+
+```
+
+If you don't require the `value` to be synced, you can also pass the prop directly:
+
+```html
+
+```
+
+This method allows you to pre-select a value(s), without syncing any changes to the parent component.
+
+### Single/Multiple Selection {#multiple}
+
+By default, `vue-select` supports choosing a single value. If you need multiple values, use the `multiple` prop:
+
+```html
+
+```
diff --git a/docs/CustomLabels.md b/docs/CustomLabels.md
deleted file mode 100644
index 709a53c..0000000
--- a/docs/CustomLabels.md
+++ /dev/null
@@ -1,9 +0,0 @@
-### Custom Labels
-
-By default when the `options` array contains objects, `vue-select` looks for the `label` key for display. If your data source doesn't contain that key, you can set your own using the `label` prop.
-
-On this page, the list of countries used in the examples contains `value` and `label` properties: `{value: "CA", label: "Canada"}`. In this example, we'll display the country code instead of the label.
-
-``
-
-
diff --git a/docs/Examples.md b/docs/Examples.md
index e69de29..b41615c 100644
--- a/docs/Examples.md
+++ b/docs/Examples.md
@@ -0,0 +1,19 @@
+- [HTML5 Validation](#validation)
+- [Vuex](#vuex)
+- [AJAX](#ajax)
+- [Dependent vSelects](#dependent)
+- [Custom Component with Mixins](#customComponent)
+
+## HTML5 Validation {#validation}
+
+
+
+## Vuex {#vuex}
+
+[](codepen://sagalbot/aJQJyp?height=500&theme=0)
+
+## AJAX {#ajax}
+
+## Dependent vSelects {#dependent}
+
+## Custom Component with Mixins {#customComponent}
diff --git a/docs/Install.md b/docs/Install.md
index 4d870f8..19d570c 100644
--- a/docs/Install.md
+++ b/docs/Install.md
@@ -1,36 +1,20 @@
+## Vue Compatibility
+- `vue ~2.0` use `vue-select ~2.0`
+- `vue ~1.0` use `vue-select ~1.0`
+
## NPM Based WorkFlows
-``` bash
+```bash
$ npm install vue-select
```
-```html
-
-
-
-
-
-
-
-```
-
## Browser Globals
-`v1.3.0+` no longer requires any toolchain to use the component:
-
-Just include `vue` & `vue-select.js` - I recommend using [unpkg.com](https://unpkg.com/#/).
+Include `vue` & `vue-select.js` - I recommend using [unpkg.com](https://unpkg.com/#/).
```html
+
+
+
diff --git a/docs/Introduction.md b/docs/Introduction.md
new file mode 100644
index 0000000..85382da
--- /dev/null
+++ b/docs/Introduction.md
@@ -0,0 +1,26 @@
+# vue-select [](https://travis-ci.org/sagalbot/vue-select) [](https://lima.codeclimate.com/github/sagalbot/vue-select) [](https://codeclimate.com/github/sagalbot/vue-select) [](https://gemnasium.com/github.com/sagalbot/vue-select)  
+
+> A native Vue.js select component that provides similar functionality to Select2 without the overhead of jQuery.
+
+#### Features
+- AJAX Support
+- Tagging
+- List Filtering/Searching
+- Supports Vuex
+- Select Single/Multiple Options
+- Tested with Bootstrap 3/4, Bulma, Foundation
+- +95% Test Coverage
+- ~33kb minified with CSS
+- Zero dependencies
+
+## Documentation
+- **[Demo & Docs](http://sagalbot.github.io/vue-select/)**
+- **[Example on JSBin](http://jsbin.com/saxaru/8/edit?html,js,output)**
+- **[CodePen Template](http://codepen.io/sagalbot/pen/NpwrQO)**
+- **[Trello Roadmap](https://trello.com/b/vWvITNzS/vue-select)**
+
+## Install
+
+###### Vue Compatibility
+- `vue ~2.0` use `vue-select ~2.0`
+- `vue ~1.0` use `vue-select ~1.0`
diff --git a/docs/OnChange.md b/docs/OnChange.md
deleted file mode 100644
index 4b3ad49..0000000
--- a/docs/OnChange.md
+++ /dev/null
@@ -1,26 +0,0 @@
-### Change Event Vuex Compatibility
-
-vue-select provides a `change` event. This function is passed the currently selected value(s) as it's only parameter.
-
-This is very useful when integrating with Vuex, as it will allow your to trigger an action to update your vuex state object. Choose a callback and see it in action.
-
-
-
-
-
-
-```html
-
-```
-
-```js
-methods: {
- consoleCallback(val) {
- console.dir(JSON.stringify(val))
- },
-
- alertCallback(val) {
- alert(JSON.stringify(val))
- }
-}
-```
diff --git a/docs/Props/Props.md b/docs/Props/Props.md
new file mode 100644
index 0000000..e67b919
--- /dev/null
+++ b/docs/Props/Props.md
@@ -0,0 +1,223 @@
+```js
+/**
+ * Contains the currently selected value. Very similar to a
+ * `value` attribute on an .
+ * @type {Object||String||null}
+ */
+value: {
+ default: null
+}
+
+/**
+ * An array of strings or objects to be used as dropdown choices.
+ * If you are using an array of objects, vue-select will look for
+ * a `label` key (ex. [{label: 'This is Foo', value: 'foo'}]). A
+ * custom label key can be set with the `label` prop.
+ * @type {Array}
+ */
+options: {
+ type: Array,
+ default() {
+ return []
+ },
+}
+
+/**
+ * Sets the max-height property on the dropdown list.
+ * @deprecated
+ * @type {String}
+ */
+maxHeight: {
+ type: String,
+ default: '400px'
+},
+
+/**
+ * Enable/disable filtering the options.
+ * @type {Boolean}
+ */
+searchable: {
+ type: Boolean,
+ default: true
+},
+
+/**
+ * Equivalent to the `multiple` attribute on a `