You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@zeppelin.apache.org by kh...@apache.org on 2017/06/23 08:41:36 UTC

[02/10] zeppelin git commit: [ZEPPELIN-2596] Improving documentation page

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/display_system/angular_frontend.md
----------------------------------------------------------------------
diff --git a/docs/usage/display_system/angular_frontend.md b/docs/usage/display_system/angular_frontend.md
new file mode 100644
index 0000000..6ac7343
--- /dev/null
+++ b/docs/usage/display_system/angular_frontend.md
@@ -0,0 +1,170 @@
+---
+layout: page
+title: "Frontend Angular API in Apache Zeppelin"
+description: "In addition to the back-end API to handle Angular objects binding, Apache Zeppelin exposes a simple AngularJS z object on the front-end side to expose the same capabilities."
+group: usage/display_system
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# Frontend Angular API in Apache Zeppelin
+
+<div id="toc"></div>
+
+## Basic Usage
+In addition to the [backend Angular API](./angular_backend.html) to handle Angular objects binding, Apache Zeppelin also exposes a simple AngularJS <code>**z**</code> object on the front-end side to expose the same capabilities.
+This <code>**z**</code> object is accessible in the Angular isolated scope for each paragraph.
+
+
+### Bind / Unbind Variables
+
+Through the **`z`**, you can bind / unbind variables to **AngularJS view**.
+Bind a value to an angular object and a **mandatory** target paragraph:
+
+```html
+
+%angular
+
+<form class="form-inline">
+  <div class="form-group">
+    <label for="superheroId">Super Hero: </label>
+    <input type="text" class="form-control" id="superheroId" placeholder="Superhero name ..." ng-model="superhero"></input>
+  </div>
+  <button type="submit" class="btn btn-primary" ng-click="z.angularBind('superhero',superhero,'20160222-232336_1472609686')"> Bind</button>
+</form>
+
+```
+
+<img src="/assets/themes/zeppelin/img/screenshots/z_angularBind.gif" />
+
+<hr/>
+
+Unbind/remove a value from angular object and a **mandatory** target paragraph:
+
+```html
+
+%angular
+
+<form class="form-inline">
+  <button type="submit" class="btn btn-primary" ng-click="z.angularUnbind('superhero','20160222-232336_1472609686')"> UnBind</button>
+</form>
+
+```
+
+<img src="/assets/themes/zeppelin/img/screenshots/z_angularUnbind.gif" />
+
+The signature for the **`z.angularBind() / z.angularUnbind()`** functions are:
+
+```javascript
+// Bind
+z.angularBind(angularObjectName, angularObjectValue, paragraphId);
+
+// Unbind
+z.angularUnbind(angularObjectName, angularObjectValue, paragraphId);
+
+```
+
+All the parameters are mandatory.
+
+
+<br />
+### Run Paragraph
+
+You can also trigger paragraph execution by calling **`z.runParagraph()`** function passing the appropriate paragraphId: 
+
+```html
+
+%angular
+
+<form class="form-inline">
+  <div class="form-group">
+    <label for="paragraphId">Paragraph Id: </label>
+    <input type="text" class="form-control" id="paragraphId" placeholder="Paragraph Id ..." ng-model="paragraph"></input>
+  </div>
+  <button type="submit" class="btn btn-primary" ng-click="z.runParagraph(paragraph)"> Run Paragraph</button>
+</form>
+
+```
+
+<img src="/assets/themes/zeppelin/img/screenshots/z_runParagraph.gif" />
+
+<br />
+## Overriding dynamic form with Angular Object
+
+The front-end Angular Interaction API has been designed to offer richer form capabilities and variable binding. With the existing **Dynamic Form** system you can already create input text, select and checkbox forms but the choice is rather limited and the look & feel cannot be changed.
+
+The idea is to create a custom form using plain HTML/AngularJS code and bind actions on this form to push/remove Angular variables to targeted paragraphs using this new API. 
+
+Consequently if you use the **Dynamic Form** syntax in a paragraph and there is a bound Angular object having the same name as the `${formName}`, the Angular object will have higher priority and the **Dynamic Form** will not be displayed. Example: 
+ 
+
+<img src="/assets/themes/zeppelin/img/screenshots/z_angularJs_overriding_dynamic_form.gif" />
+
+
+<br />
+## Feature matrix comparison
+
+How does the front-end AngularJS API compares to the [backend Angular API](./angular_backend.html)? Below is a comparison matrix for both APIs:
+
+<table class="table-configuration">
+    <thead>
+        <tr>
+            <th>Actions</th>
+            <th>Front-end API</th>
+            <th>Back-end API</th>
+        </tr>
+    </thead>
+        <tr>
+            <td>Initiate binding</td>
+            <td>z.angularbind(var, initialValue, paragraphId)</td>
+            <td>z.angularBind(var, initialValue)</td>
+        </tr>
+        <tr>
+            <td>Update value</td>
+            <td>same to ordinary angularjs scope variable, or z.angularbind(var, newValue, paragraphId)</td>
+            <td>z.angularBind(var, newValue)</td>
+        </tr>
+        <tr>
+            <td>Watching value</td>
+            <td>same to ordinary angularjs scope variable</td>
+            <td>z.angularWatch(var, (oldVal, newVal) => ...)</td>
+        </tr>
+        <tr>
+            <td>Destroy binding</td>
+            <td>z.angularUnbind(var, paragraphId)</td>
+            <td>z.angularUnbind(var)</td>
+        </tr>
+        <tr>
+            <td>Executing Paragraph</td>
+            <td>z.runParagraph(paragraphId)</td>
+            <td>z.run(paragraphId)</td>
+        </tr>
+        <tr>
+            <td>Executing Paragraph (Specific paragraphs in other notes) (</td>
+            <td></td>
+            <td>z.run(noteid, paragraphId)</td>
+        </tr>
+        <tr>
+            <td>Executing note</td>
+            <td></td>
+            <td>z.runNote(noteId)</td>
+        </tr> 
+    <tbody>
+    <tbody>    
+</table>
+
+Both APIs are pretty similar, except for value watching where it is done naturally by AngularJS internals on the front-end and by user custom watcher functions in the back-end.
+
+There is also a slight difference in term of scope. Front-end API limits the Angular object binding to a paragraph scope whereas back-end API allows you to bind an Angular object at the global or note scope. This restriction has been designed purposely to avoid Angular object leaks and scope pollution.

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/display_system/basic.md
----------------------------------------------------------------------
diff --git a/docs/usage/display_system/basic.md b/docs/usage/display_system/basic.md
new file mode 100644
index 0000000..4d3d9e6
--- /dev/null
+++ b/docs/usage/display_system/basic.md
@@ -0,0 +1,164 @@
+---
+layout: page
+title: "Basic Display System in Apache Zeppelin"
+description: "There are 3 basic display systems in Apache Zeppelin. By default, Zeppelin prints interpreter responce as a plain text using text display system. With %html directive, Zeppelin treats your output as HTML. You can also simply use %table display system to leverage Zeppelin's built in visualization."
+group: usage/display_system
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# Basic Display System in Apache Zeppelin
+
+<div id="toc"></div>
+
+## Text
+
+By default, Apache Zeppelin prints interpreter response as a plain text using `text` display system.
+
+<img src="/assets/themes/zeppelin/img/screenshots/display_text.png" />
+
+You can explicitly say you're using `text` display system.
+
+<img src="/assets/themes/zeppelin/img/screenshots/display_text1.png" />
+
+## Html
+
+With `%html` directive, Zeppelin treats your output as HTML
+
+<img src="/assets/themes/zeppelin/img/screenshots/display_html.png" />
+
+### Mathematical expressions
+HTML display system automatically formats mathematical expression using [MathJax](https://www.mathjax.org/). You can use
+`\\( INLINE EXPRESSION \\)` and `$$ EXPRESSION $$` to format. For example
+
+<img src="/assets/themes/zeppelin/img/screenshots/display_formula.png" />
+
+
+## Table
+
+If you have data that row separated by `\n` (newline) and column separated by `\t` (tab) with first row as header row, for example
+
+<img src="/assets/themes/zeppelin/img/screenshots/display_table.png" />
+
+You can simply use `%table` display system to leverage Zeppelin's built in visualization.
+
+<img src="/assets/themes/zeppelin/img/screenshots/display_table1.png" />
+
+If table contents start with `%html`, it is interpreted as an HTML.
+
+<img src="/assets/themes/zeppelin/img/screenshots/display_table_html.png" />
+
+> **Note :** Display system is backend independent.
+
+## Network
+
+With the `%network` directive, Zeppelin treats your output as a graph. Zeppelin can leverage the Property Graph Model.
+
+### What is the Labelled Property Graph Model?
+
+A [Property Graph](https://github.com/tinkerpop/gremlin/wiki/Defining-a-Property-Graph) is a graph that has these elements:
+
+* a set of vertices
+    * each vertex has a unique identifier.
+    * each vertex has a set of outgoing edges.
+    * each vertex has a set of incoming edges.
+    * each vertex has a collection of properties defined by a map from key to value
+* a set of edges
+    * each edge has a unique identifier.
+    * each edge has an outgoing tail vertex.
+    * each edge has an incoming head vertex.
+    * each edge has a label that denotes the type of relationship between its two vertices.
+    * each edge has a collection of properties defined by a map from key to value.
+
+<img src="https://github.com/tinkerpop/gremlin/raw/master/doc/images/graph-example-1.jpg" />
+
+A [Labelled Property Graph](https://neo4j.com/developer/graph-database/#property-graph) is a Property Graph where the nodes can be tagged with **labels** representing their different roles in the graph model
+
+<img src="http://s3.amazonaws.com/dev.assets.neo4j.com/wp-content/uploads/property_graph_model.png" />
+
+### What are the APIs?
+
+The new NETWORK visualization is based on json with the following params:
+
+* "nodes" (mandatory): list of nodes of the graph every node can have the following params:
+    * "id" (mandatory): the id of the node (must be unique);
+    * "label": the main Label of the node;
+    * "labels": the list of the labels of the node;
+    * "data": the data attached to the node;
+* "edges": list of the edges of the graph;
+    * "id" (mandatory): the id of the edge (must be unique);
+    * "source" (mandatory): the id of source node of the edge;
+    * "target" (mandatory): the id of target node of the edge;
+    * "label": the main type of the edge;
+    * "data": the data attached to the edge;
+* "labels": a map (K, V) where K is the node label and V is the color of the node;
+* "directed": (true/false, default false) wich tells if is directed graph or not;
+* "types": a *distinct* list of the edge types of the graph
+
+If you click on a node or edge on the bottom of the paragraph you find a list of entity properties
+
+<img src="../assets/themes/zeppelin/img/screenshots/display_network.png" />
+
+This kind of graph can be easily *flatten* in order to support other visualization formats provided by Zeppelin.
+
+<img src="../assets/themes/zeppelin/img/screenshots/display_network_flatten.png" />
+
+### How to use it?
+
+An example of a simple graph
+
+```
+%spark
+print(s"""
+%network {
+    "nodes": [
+        {"id": 1},
+        {"id": 2},
+        {"id": 3}
+    ],
+    "edges": [
+		{"source": 1, "target": 2, "id" : 1},
+		{"source": 2, "target": 3, "id" : 2},
+		{"source": 1, "target": 2, "id" : 3},
+		{"source": 1, "target": 2, "id" : 4},
+		{"source": 2, "target": 1, "id" : 5},
+		{"source": 2, "target": 1, "id" : 6}
+	]
+}
+""")
+```
+
+that will look like:
+
+<img src="../assets/themes/zeppelin/img/screenshots/display_simple_network.png" />
+
+A little more complex graph:
+
+```
+%spark
+print(s"""
+%network {
+    "nodes": [{"id": 1, "label": "User", "data": {"fullName":"Andrea Santurbano"}},{"id": 2, "label": "User", "data": {"fullName":"Lee Moon Soo"}},{"id": 3, "label": "Project", "data": {"name":"Zeppelin"}}],
+    "edges": [{"source": 2, "target": 1, "id" : 1, "label": "HELPS"},{"source": 2, "target": 3, "id" : 2, "label": "CREATE"},{"source": 1, "target": 3, "id" : 3, "label": "CONTRIBUTE_TO", "data": {"oldPR": "https://github.com/apache/zeppelin/pull/1582"}}],
+	"labels": {"User": "#8BC34A", "Project": "#3071A9"},
+	"directed": true,
+	"types": ["HELPS", "CREATE", "CONTRIBUTE_TO"]
+}
+""")
+```
+
+that will look like:
+
+<img src="../assets/themes/zeppelin/img/screenshots/display_complex_network.png" />
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/dynamic_form/intro.md
----------------------------------------------------------------------
diff --git a/docs/usage/dynamic_form/intro.md b/docs/usage/dynamic_form/intro.md
new file mode 100644
index 0000000..d8449d6
--- /dev/null
+++ b/docs/usage/dynamic_form/intro.md
@@ -0,0 +1,186 @@
+---
+layout: page
+title: "Dynamic Form in Apache Zeppelin"
+description: "Apache Zeppelin dynamically creates input forms. Depending on language backend, there're two different ways to create dynamic form."
+group: usage/dynamic_form 
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# What is Dynamic Form?
+
+<div id="toc"></div>
+
+Apache Zeppelin dynamically creates input forms. Depending on language backend, there're two different ways to create dynamic form.
+Custom language backend can select which type of form creation it wants to use.
+
+## Using form Templates
+
+This mode creates form using simple template language. It's simple and easy to use. For example Markdown, Shell, Spark SQL language backend uses it.
+
+### Text input form
+
+To create text input form, use `${formName}` templates.
+
+for example
+
+<img class="img-responsive" src="/assets/themes/zeppelin/img/screenshots/form_input.png" width="450px" />
+
+
+Also you can provide default value, using `${formName=defaultValue}`.
+
+<img src="/assets/themes/zeppelin/img/screenshots/form_input_default.png" />
+
+### Select form
+
+To create select form, use `${formName=defaultValue,option1|option2...}`
+
+for example
+
+<img src="/assets/themes/zeppelin/img/screenshots/form_select.png" />
+
+Also you can separate option's display name and value, using `${formName=defaultValue,option1(DisplayName)|option2(DisplayName)...}`
+
+<img src="/assets/themes/zeppelin/img/screenshots/form_select_displayname.png" />
+
+The paragraph will be automatically run after you change your selection by default.
+But in case you have multiple types dynamic form in one paragraph, you might want to run the paragraph after changing all the selections.
+You can control this by unchecking the below **Run on selection change** option in the setting menu.
+
+Even if you uncheck this option, still you can run it by pressing `Enter`.
+
+<img src="/assets/themes/zeppelin/img/screenshots/selectForm-checkbox.png" />
+
+### Checkbox form
+
+For multi-selection, you can create a checkbox form using `${checkbox:formName=defaultValue1|defaultValue2...,option1|option2...}`. The variable will be substituted by a comma-separated string based on the selected items. For example:
+
+<img src="/assets/themes/zeppelin/img/screenshots/form_checkbox.png">
+
+You can specify the delimiter using `${checkbox(delimiter):formName=...}`:
+
+<img src="/assets/themes/zeppelin/img/screenshots/form_checkbox_delimiter.png">
+
+Like [select form](#select-form), the paragraph will be automatically run after you change your selection by default.
+But in case you have multiple types dynamic form in one paragraph, you might want to run the paragraph after changing all the selections.
+You can control this by unchecking the below **Run on selection change** option in the setting menu.
+
+Even if you uncheck this option, still you can run it by pressing `Enter`.
+
+<img src="/assets/themes/zeppelin/img/screenshots/selectForm-checkbox.png" />
+
+## Creates Programmatically
+
+Some language backends can programmatically create forms. For example [ZeppelinContext](../../interpreter/spark.html#zeppelincontext) provides a form creation API
+
+Here are some examples:
+
+### Text input form
+<div class="codetabs">
+    <div data-lang="scala" markdown="1">
+
+{% highlight scala %}
+%spark
+println("Hello "+z.input("name"))
+{% endhighlight %}
+
+    </div>
+    <div data-lang="python" markdown="1">
+
+{% highlight python %}
+%pyspark
+print("Hello "+z.input("name"))
+{% endhighlight %}
+
+    </div>
+</div>
+<img src="/assets/themes/zeppelin/img/screenshots/form_input_prog.png" />
+
+### Text input form with default value
+<div class="codetabs">
+    <div data-lang="scala" markdown="1">
+
+{% highlight scala %}
+%spark
+println("Hello "+z.input("name", "sun")) 
+{% endhighlight %}
+
+    </div>
+    <div data-lang="python" markdown="1">
+
+{% highlight python %}
+%pyspark
+print("Hello "+z.input("name", "sun"))
+{% endhighlight %}
+
+    </div>
+</div>
+<img src="/assets/themes/zeppelin/img/screenshots/form_input_default_prog.png" />
+
+### Select form
+<div class="codetabs">
+    <div data-lang="scala" markdown="1">
+
+{% highlight scala %}
+%spark
+println("Hello "+z.select("day", Seq(("1","mon"),
+                                    ("2","tue"),
+                                    ("3","wed"),
+                                    ("4","thurs"),
+                                    ("5","fri"),
+                                    ("6","sat"),
+                                    ("7","sun"))))
+{% endhighlight %}
+
+    </div>
+    <div data-lang="python" markdown="1">
+
+{% highlight python %}
+%pyspark
+print("Hello "+z.select("day", [("1","mon"),
+                                ("2","tue"),
+                                ("3","wed"),
+                                ("4","thurs"),
+                                ("5","fri"),
+                                ("6","sat"),
+                                ("7","sun")]))
+{% endhighlight %}
+
+    </div>
+</div>
+<img src="/assets/themes/zeppelin/img/screenshots/form_select_prog.png" />
+
+#### Checkbox form
+<div class="codetabs">
+    <div data-lang="scala" markdown="1">
+
+{% highlight scala %}
+%spark
+val options = Seq(("apple","Apple"), ("banana","Banana"), ("orange","Orange"))
+println("Hello "+z.checkbox("fruit", options).mkString(" and "))
+{% endhighlight %}
+
+    </div>
+    <div data-lang="python" markdown="1">
+
+{% highlight python %}
+%pyspark
+options = [("apple","Apple"), ("banana","Banana"), ("orange","Orange")]
+print("Hello "+ " and ".join(z.checkbox("fruit", options, ["apple"])))
+{% endhighlight %}
+
+    </div>
+</div>
+<img src="/assets/themes/zeppelin/img/screenshots/form_checkbox_prog.png" />

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/interpreter/dependency_management.md
----------------------------------------------------------------------
diff --git a/docs/usage/interpreter/dependency_management.md b/docs/usage/interpreter/dependency_management.md
new file mode 100644
index 0000000..b83426e
--- /dev/null
+++ b/docs/usage/interpreter/dependency_management.md
@@ -0,0 +1,75 @@
+---
+layout: page
+title: "Dependency Management for Interpreter"
+description: "Include external libraries to Apache Spark Interpreter by setting dependencies in interpreter menu."
+group: usage/interpreter 
+ 
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+## Dependency Management for Interpreter
+
+You can include external libraries to interpreter by setting dependencies in interpreter menu.
+
+When your code requires external library, instead of doing download/copy/restart Zeppelin, you can easily do following jobs in this menu.
+
+ * Load libraries recursively from Maven repository
+ * Load libraries from local filesystem
+ * Add additional maven repository
+ * Automatically add libraries to SparkCluster
+
+<hr>
+<div class="row">
+  <div class="col-md-6">
+    <a data-lightbox="compiler" href="/assets/themes/zeppelin/img/docs-img/interpreter-dependency-loading.png">
+      <img class="img-responsive" src="/assets/themes/zeppelin/img/docs-img/interpreter-dependency-loading.png" />
+    </a>
+  </div>
+  <div class="col-md-6" style="padding-top:30px">
+    <b> Load Dependencies to Interpreter </b>
+    <br /><br />
+    <ol>
+      <li> Click 'Interpreter' menu in navigation bar. </li>
+      <li> Click 'edit' button of the interpreter which you want to load dependencies to. </li>
+      <li> Fill artifact and exclude field to your needs.
+           You can enter not only groupId:artifactId:version but also local file in artifact field. </li>
+      <li> Press 'Save' to restart the interpreter with loaded libraries. </li>
+    </ol>
+  </div>
+</div>
+<hr>
+<div class="row">
+  <div class="col-md-6">
+    <a data-lightbox="compiler" href="/assets/themes/zeppelin/img/docs-img/interpreter-add-repo1.png">
+      <img class="img-responsive" src="/assets/themes/zeppelin/img/docs-img/interpreter-add-repo1.png" />
+    </a>
+    <a data-lightbox="compiler" href="/assets/themes/zeppelin/img/docs-img/interpreter-add-repo2.png">
+      <img class="img-responsive" src="/assets/themes/zeppelin/img/docs-img/interpreter-add-repo2.png" />
+    </a>
+  </div>
+  <div class="col-md-6" style="padding-top:30px">
+    <b> Add repository for dependency resolving </b>
+    <br /><br />
+    <ol>
+      <li> Press <i class="fa fa-cog"></i> icon in 'Interpreter' menu on the top right side.
+           It will show you available repository lists.</li>
+      <li> If you need to resolve dependencies from other than central maven repository or
+  	   local ~/.m2 repository, hit <i class="fa fa-plus"></i> icon next to repository lists. </li>
+      <li> Fill out the form and click 'Add' button, then you will be able to see that new repository is added. </li>
+      <li> Optionally, if you are behind a corporate firewall, you can specify also all proxy settings so that Zeppelin can download the dependencies using the given credentials</li>
+    </ol>
+  </div>
+</div>

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/interpreter/dynamic_loading.md
----------------------------------------------------------------------
diff --git a/docs/usage/interpreter/dynamic_loading.md b/docs/usage/interpreter/dynamic_loading.md
new file mode 100644
index 0000000..0564fd2
--- /dev/null
+++ b/docs/usage/interpreter/dynamic_loading.md
@@ -0,0 +1,125 @@
+---
+layout: page
+title: "Dynamic Interpreter Loading using REST API"
+description: "Apache Zeppelin provides pluggable interpreter architecture which results in a wide and variety of the supported backend system. In this page, we will introduce dynamic interpreter loading using REST API."
+group: usage/interpreter 
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# Dynamic Interpreter Loading using REST API
+
+<div id="toc"></div>
+
+Apache Zeppelin provides pluggable interpreter architecture which results in a wide and variety of the supported backend system. In this section, we will introduce **Dynamic interpreter loading** using **REST API**. This concept actually comes from [Zeppelin Helium Proposal](https://cwiki.apache.org/confluence/display/ZEPPELIN/Helium+proposal).
+Before we start, if you are not familiar with the concept of **Zeppelin interpreter**, you can check out [Overview: Zeppelin Interpreter](./overview.html) first.
+
+## Overview 
+In the past, Zeppelin was loading interpreter binaries from `/interpreter/[interpreter_name]` directory. They were configured by `zeppelin.interpreters` property in `conf/zeppelin-site.xml` or `ZEPPELIN_INTERPRETERS` env variables in `conf/zeppelin-env.sh`. They were loaded on Zeppelin server startup and stayed alive until the server was stopped.
+In order to simplify using 3rd party interpreters, we changed this way to **dynamically** load interpreters from **Maven Repository** using **REST API**. Hopefully, the picture below will help you to understand the process. 
+<center><img src="/assets/themes/zeppelin/img/docs-img/zeppelin_user.png" height="85%" width="85%"></center>
+
+## Load & Unload Interpreters Using REST API
+
+### Load 
+You can **load** interpreters located in Maven repository using REST API, like this:
+
+(Maybe, you are unfamiliar with `[interpreter_group_name]` or `[interpreter_name]`. If so, please checkout [Overview: Zeppelin Interpreter](./overview.html) again.)
+
+```
+http://[zeppelin-server]:[zeppelin-port]/api/interpreter/load/[interpreter_group_name]/[interpreter_name]
+```
+The Restful method will be <code>**POST**</code>. And the parameters you need are:
+
+  1.  **Artifact:** Maven artifact ( groupId:artifactId:version ) 
+
+  2.  **Class Name:** Package name + Interpreter class name
+
+  3. **Repository ( optional ):** Additional maven repository address
+
+For example, if you want to load `markdown` interpreter to your Zeppelin, the parameters and URL you need may look like:
+
+```
+http://127.0.0.1:8080/api/interpreter/load/md/markdown
+```
+
+```
+{
+  "artifact": "org.apache.zeppelin:zeppelin-markdown:0.6.0-SNAPSHOT",
+  "className": "org.apache.zeppelin.markdown.Markdown",
+  "repository": {
+    "url": "http://dl.bintray.com/spark-packages/maven",
+    "snapshot": false
+  }
+}
+```
+
+
+The meaning of each parameters is: 
+
+  1. **Artifact**
+  - groupId: org.apache.zeppelin
+  - artifactId: zeppelin-markdown
+  - version: 0.6.0-SNAPSHOT
+
+  2. **Class Name**
+  - Package Name: org.apache.zeppelin
+  - Interpreter Class Name: markdown.Markdown
+
+  3. **Repository ( optional )**
+  - Url: http://dl.bintray.com/spark-packages/maven
+  - Snapshot: false
+
+> <b>Please note: </b>The interpreters you downloaded need to be **reload**, when your Zeppelin server is down. 
+
+### Unload
+If you want to **unload** the interpreters using REST API, 
+
+```
+http://[zeppelin-server]:[zeppelin-port]/api/interpreter/unload/[interpreter_group_name]/[interpreter_name]
+```
+In this case, the Restful method will be <code>**DELETE**</code>.
+
+<br/>
+## What is the next step after Loading ?
+ 
+### Q1. Where is the location of interpreters you downloaded ?
+  
+Actually, the answer about this question is in the above picture. Once the REST API is called, the `.jar` files of interpreters you get are saved under `ZEPPELIN_HOME/local-repo` first. Then, they will be copied to `ZEPPELIN_HOME/interpreter` directory. So, please checkout your `ZEPPELIN_HOME/interpreter`.
+
+### Q2. Then, how can I use this interpreter ?
+
+After loading an interpreter, you can use it by creating and configuring it in Zeppelin's **Interpreter tab**.
+
+Oh, you don't need to restart your Zeppelin server. Because it is **Dynamic Loading**, you can configure and load it **at runtime** !
+
+1. After Zeppelin server up, browse Zeppelin home and click **Interpreter tab**.
+<center><img src="/assets/themes/zeppelin/img/docs-img/interpreter_setting_1.png" height="85%" width="85%"></center>
+
+2. At the **Interpreter** section, click **+Create** button. 
+<center><img src="/assets/themes/zeppelin/img/docs-img/interpreter_setting_2.png" height="85%" width="85%"></center>
+ 
+3. Then, you can verify the interpreter list that you loaded.
+<center><img src="/assets/themes/zeppelin/img/docs-img/interpreter_setting_3.png" height="85%" width="85%"></center>
+
+4. After choosing an interpreter, you can configure and use it. Don't forget to save it.
+
+5. Create a new notebook in the **Notebook** section, then you can bind the interpreters from your interpreter list. Just drag and drop !
+<center><img src="/assets/themes/zeppelin/img/docs-img/interpreter_binding_1.png" height="85%" width="85%"></center>
+<center><img src="/assets/themes/zeppelin/img/docs-img/interpreter_binding_2.png" height="85%" width="85%"></center>
+
+6. At last, you can use your interpreter !
+
+If you want to get the specific information about respective interpreters, please checkout each interpreter documentation. 

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/interpreter/execution_hooks.md
----------------------------------------------------------------------
diff --git a/docs/usage/interpreter/execution_hooks.md b/docs/usage/interpreter/execution_hooks.md
new file mode 100644
index 0000000..d2411aa
--- /dev/null
+++ b/docs/usage/interpreter/execution_hooks.md
@@ -0,0 +1,81 @@
+---
+layout: page
+title: "Interpreter Execution Hooks (Experimental)"
+description: "Apache Zeppelin allows for users to specify additional code to be executed by an interpreter at pre and post-paragraph code execution."
+group: manual
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# Interpreter Execution Hooks (Experimental)
+
+<div id="toc"></div>
+
+## Overview
+
+Apache Zeppelin allows for users to specify additional code to be executed by an interpreter at pre and post-paragraph code execution.
+This is primarily useful if you need to run the same set of code for all of the paragraphs within your notebook at specific times.
+Currently, this feature is only available for the spark and pyspark interpreters.
+To specify your hook code, you may use `z.registerHook()`. 
+For example, enter the following into one paragraph:
+
+```python
+%pyspark
+z.registerHook("post_exec", "print 'This code should be executed before the parapgraph code!'")
+z.registerHook("pre_exec", "print 'This code should be executed after the paragraph code!'")
+```
+
+These calls will not take into effect until the next time you run a paragraph. 
+
+
+In another paragraph, enter
+
+```python
+%pyspark
+print "This code should be entered into the paragraph by the user!"
+```
+
+The output should be:
+
+```
+This code should be executed before the paragraph code!
+This code should be entered into the paragraph by the user!
+This code should be executed after the paragraph code!
+```
+
+If you ever need to know the hook code, use `z.getHook()`:
+
+```python
+%pyspark
+print z.getHook("post_exec")
+
+print 'This code should be executed after the paragraph code!'
+```
+Any call to `z.registerHook()` will automatically overwrite what was previously registered.
+To completely unregister a hook event, use `z.unregisterHook(eventCode)`.
+Currently only `"post_exec"` and `"pre_exec"` are valid event codes for the Zeppelin Hook Registry system.
+
+Finally, the hook registry is internally shared by other interpreters in the same group.
+This would allow for hook code for one interpreter REPL to be set by another as follows:
+
+```scala
+%spark
+z.unregisterHook("post_exec", "pyspark")
+```
+
+The API is identical for both the spark (scala) and pyspark (python) implementations.
+
+### Caveats
+Calls to `z.registerHook("pre_exec", ...)` should be made with care. If there are errors in your specified hook code, this will cause the interpreter REPL to become unable to execute any code pass the pre-execute stage making it impossible for direct calls to `z.unregisterHook()` to take into effect. Current workarounds include calling `z.unregisterHook()` from a different interpreter REPL in the same interpreter group (see above) or manually restarting the interpreter group in the UI. 

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/interpreter/installation.md
----------------------------------------------------------------------
diff --git a/docs/usage/interpreter/installation.md b/docs/usage/interpreter/installation.md
new file mode 100644
index 0000000..8bc3b3d
--- /dev/null
+++ b/docs/usage/interpreter/installation.md
@@ -0,0 +1,230 @@
+---
+layout: page
+title: "Installing Interpreters"
+description: "Apache Zeppelin provides Interpreter Installation mechanism for whom downloaded Zeppelin netinst binary package, or just want to install another 3rd party interpreters."
+group: usage/interpreter 
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# Installing Interpreters 
+
+<div id="toc"></div>
+
+Apache Zeppelin provides **Interpreter Installation** mechanism for whom downloaded Zeppelin `netinst` binary package, or just want to install another 3rd party interpreters.
+
+## Community managed interpreters
+Apache Zeppelin provides several interpreters as [community managed interpreters](#available-community-managed-interpreters).
+If you downloaded `netinst` binary package, you need to install by using below commands.
+
+#### Install all community managed interpreters
+
+```
+./bin/install-interpreter.sh --all
+```
+
+#### Install specific interpreters
+
+```
+./bin/install-interpreter.sh --name md,shell,jdbc,python
+```
+
+You can get full list of community managed interpreters by running
+
+```
+./bin/install-interpreter.sh --list
+```
+
+#### Install interpreter built with Scala 2.10
+Zeppelin support both Scala 2.10 and 2.11 for several interpreters as below:
+
+<table class="table-configuration">
+  <tr>
+    <th>Name</th>
+    <th>Maven Artifact for Scala 2.10</th>
+    <th>Maven Artifact for Scala 2.11</th>
+  </tr>
+  <tr>
+    <td>cassandra</td>
+    <td>org.apache.zeppelin:zeppelin-cassandra_2.10:0.7.0</td>
+    <td>org.apache.zeppelin:zeppelin-cassandra_2.11:0.7.0</td>
+  </tr>
+  <tr>
+    <td>flink</td>
+    <td>org.apache.zeppelin:zeppelin-flink_2.10:0.7.0</td>
+    <td>org.apache.zeppelin:zeppelin-flink_2.11:0.7.0</td>
+  </tr>
+  <tr>
+    <td>ignite</td>
+    <td>org.apache.zeppelin:zeppelin-ignite_2.10:0.7.0</td>
+    <td>org.apache.zeppelin:zeppelin-ignite_2.11:0.7.0</td>
+  </tr>
+  <tr>
+    <td>scio</td>
+    <td>org.apache.zeppelin:zeppelin-scio_2.10:0.7.0</td>
+    <td>org.apache.zeppelin:zeppelin-scio_2.11:0.7.0</td>
+  </tr>
+  <tr>
+    <td>spark</td>
+    <td>org.apache.zeppelin:zeppelin-spark_2.10:0.7.0</td>
+    <td>org.apache.zeppelin:zeppelin-spark_2.11:0.7.0</td>
+  </tr>
+</table>
+
+If you install one of these interpreters only with `--name` option, installer will download interpreter built with Scala 2.11 by default. If you want to specify Scala version, you will need to add `--artifact` option. Here is the example of installing flink interpreter built with Scala 2.10.
+
+```
+./bin/install-interpreter.sh --name flink --artifact org.apache.zeppelin:zeppelin-flink_2.10:0.7.0
+```
+
+#### Install Spark interpreter built with Scala 2.10
+Spark distribution package has been built with Scala 2.10 until 1.6.2. If you have `SPARK_HOME` set pointing to Spark version earlier than 2.0.0, you need to download Spark interpreter packaged with Scala 2.10. To do so, use follow command:
+
+```
+rm -rf ./interpreter/spark
+./bin/install-interpreter.sh --name spark --artifact org.apache.zeppelin:zeppelin-spark_2.10:0.7.0
+```
+
+<br />
+Once you have installed interpreters, you need to restart Zeppelin. And then [create interpreter setting](./overview.html#what-is-zeppelin-interpreter) and [bind it with your notebook](./overview.html#what-is-zeppelin-interpreter-setting).
+
+
+## 3rd party interpreters
+
+You can also install 3rd party interpreters located in the maven repository by using below commands.
+
+#### Install 3rd party interpreters
+
+```
+./bin/install-interpreter.sh --name interpreter1 --artifact groupId1:artifact1:version1
+```
+
+The above command will download maven artifact `groupId1:artifact1:version1` and all of its transitive dependencies into `interpreter/interpreter1` directory.
+
+After restart Zeppelin, then [create interpreter setting](./overview.html#what-is-zeppelin-interpreter) and [bind it with your note](./overview.html#what-is-interpreter-setting).
+
+#### Install multiple 3rd party interpreters at once
+
+```
+./bin/install-interpreter.sh --name interpreter1,interpreter2 --artifact groupId1:artifact1:version1,groupId2:artifact2:version2
+```
+
+`--name` and `--artifact` arguments will recieve comma separated list.
+
+## Available community managed interpreters
+
+You can also find the below community managed interpreter list in `conf/interpreter-list` file.
+<table class="table-configuration">
+  <tr>
+    <th>Name</th>
+    <th>Maven Artifact</th>
+    <th>Description</th>
+  </tr>
+  <tr>
+    <td>alluxio</td>
+    <td>org.apache.zeppelin:zeppelin-alluxio:0.7.0</td>
+    <td>Alluxio interpreter</td>
+  </tr>
+  <tr>
+    <td>angular</td>
+    <td>org.apache.zeppelin:zeppelin-angular:0.7.0</td>
+    <td>HTML and AngularJS view rendering</td>
+  </tr>
+  <tr>
+    <td>beam</td>
+    <td>org.apache.zeppelin:zeppelin-beam:0.7.0</td>
+    <td>Beam interpreter</td>
+  </tr>
+  <tr>
+    <td>bigquery</td>
+    <td>org.apache.zeppelin:zeppelin-bigquery:0.7.0</td>
+    <td>BigQuery interpreter</td>
+  </tr>
+  <tr>
+    <td>cassandra</td>
+    <td>org.apache.zeppelin:zeppelin-cassandra\_2.11:0.7.0</td>
+    <td>Cassandra interpreter built with Scala 2.11</td>
+  </tr>
+  <tr>
+    <td>elasticsearch</td>
+    <td>org.apache.zeppelin:zeppelin-elasticsearch:0.7.0</td>
+    <td>Elasticsearch interpreter</td>
+  </tr>
+  <tr>
+    <td>file</td>
+    <td>org.apache.zeppelin:zeppelin-file:0.7.0</td>
+    <td>HDFS file interpreter</td>
+  </tr>
+  <tr>
+    <td>flink</td>
+    <td>org.apache.zeppelin:zeppelin-flink\_2.11:0.7.0</td>
+    <td>Flink interpreter built with Scala 2.11</td>
+  </tr>
+  <tr>
+    <td>hbase</td>
+    <td>org.apache.zeppelin:zeppelin-hbase:0.7.0</td>
+    <td>Hbase interpreter</td>
+  </tr>
+  <tr>
+    <td>ignite</td>
+    <td>org.apache.zeppelin:zeppelin-ignite\_2.11:0.7.0</td>
+    <td>Ignite interpreter built with Scala 2.11</td>
+  </tr>
+  <tr>
+    <td>jdbc</td>
+    <td>org.apache.zeppelin:zeppelin-jdbc:0.7.0</td>
+    <td>Jdbc interpreter</td>
+  </tr>
+  <tr>
+    <td>kylin</td>
+    <td>org.apache.zeppelin:zeppelin-kylin:0.7.0</td>
+    <td>Kylin interpreter</td>
+  </tr>
+  <tr>
+    <td>lens</td>
+    <td>org.apache.zeppelin:zeppelin-lens:0.7.0</td>
+    <td>Lens interpreter</td>
+  </tr>
+  <tr>
+    <td>livy</td>
+    <td>org.apache.zeppelin:zeppelin-livy:0.7.0</td>
+    <td>Livy interpreter</td>
+  </tr>
+  <tr>
+    <td>md</td>
+    <td>org.apache.zeppelin:zeppelin-markdown:0.7.0</td>
+    <td>Markdown support</td>
+  </tr>
+  <tr>
+    <td>pig</td>
+    <td>org.apache.zeppelin:zeppelin-pig:0.7.0</td>
+    <td>Pig interpreter</td>
+  </tr>
+  <tr>
+    <td>python</td>
+    <td>org.apache.zeppelin:zeppelin-python:0.7.0</td>
+    <td>Python interpreter</td>
+  </tr>
+  <tr>
+    <td>scio</td>
+    <td>org.apache.zeppelin:zeppelin-scio\_2.11:0.7.0</td>
+    <td>Scio interpreter built with Scala 2.11</td>
+  </tr>
+  <tr>
+    <td>shell</td>
+    <td>org.apache.zeppelin:zeppelin-shell:0.7.0</td>
+    <td>Shell command</td>
+  </tr>
+</table>

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/interpreter/interpreter_binding_mode.md
----------------------------------------------------------------------
diff --git a/docs/usage/interpreter/interpreter_binding_mode.md b/docs/usage/interpreter/interpreter_binding_mode.md
new file mode 100644
index 0000000..0981ad1
--- /dev/null
+++ b/docs/usage/interpreter/interpreter_binding_mode.md
@@ -0,0 +1,28 @@
+---
+layout: page
+title: "Interpreter Binding Mode"
+description: ""
+group: usage/interpreter 
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# Interpreter Binding Mode 
+
+<div id="toc"></div>
+
+## Overview
+
+

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/interpreter/overview.md
----------------------------------------------------------------------
diff --git a/docs/usage/interpreter/overview.md b/docs/usage/interpreter/overview.md
new file mode 100644
index 0000000..4e6eb74
--- /dev/null
+++ b/docs/usage/interpreter/overview.md
@@ -0,0 +1,125 @@
+---
+layout: page
+title: "Interpreter in Apache Zeppelin"
+description: "This document explains about the role of interpreters, interpreters group and interpreter settings in Apache Zeppelin. The concept of Zeppelin interpreter allows any language/data-processing-backend to be plugged into Zeppelin."
+group: usage/interpreter 
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# Interpreter in Apache Zeppelin
+
+<div id="toc"></div>
+
+## Overview
+
+In this section, we will explain about the role of interpreters, interpreters group and interpreter settings in Zeppelin.
+The concept of Zeppelin interpreter allows any language/data-processing-backend to be plugged into Zeppelin.
+Currently, Zeppelin supports many interpreters such as Scala ( with Apache Spark ), Python ( with Apache Spark ), Spark SQL, JDBC, Markdown, Shell and so on.
+
+## What is Zeppelin interpreter?
+Zeppelin Interpreter is a plug-in which enables Zeppelin users to use a specific language/data-processing-backend. For example, to use Scala code in Zeppelin, you need `%spark` interpreter.
+
+When you click the ```+Create``` button in the interpreter page, the interpreter drop-down list box will show all the available interpreters on your server.
+
+<img src="/assets/themes/zeppelin/img/screenshots/interpreter_create.png" width="280px">
+
+## What is interpreter setting?
+Zeppelin interpreter setting is the configuration of a given interpreter on Zeppelin server. For example, the properties are required for hive JDBC interpreter to connect to the Hive server.
+
+<img src="/assets/themes/zeppelin/img/screenshots/interpreter_setting.png" width="500px">
+
+Properties are exported as environment variables when property name is consisted of upper characters, numbers and underscore ([A-Z_0-9]). Otherwise set properties as JVM property. 
+
+You may use parameters from the context of interpreter by add #{contextParameterName} in value, parameter can be of the following types: string, number, boolean.
+
+###### Context parameters
+<table class="table-configuration">
+  <tr>
+    <th>Name</th>
+    <th>Type</th>
+  </tr>
+  <tr>
+    <td>user</td>
+    <td>string</td>
+  </tr>
+  <tr>
+    <td>noteId</td>
+    <td>string</td>
+  </tr>
+  <tr>
+    <td>replName</td>
+    <td>string</td>
+  </tr>
+  <tr>
+    <td>className</td>
+    <td>string</td>
+  </tr>
+</table>
+
+If context parameter is null then replaced by empty string.
+
+<img src="/assets/themes/zeppelin/img/screenshots/interpreter_setting_with_context_parameters.png" width="800px">
+
+<br>
+Each notebook can be bound to multiple Interpreter Settings using setting icon on upper right corner of the notebook.
+
+<img src="/assets/themes/zeppelin/img/screenshots/interpreter_binding.png" width="800px">
+
+
+
+## What is interpreter group?
+Every Interpreter is belonged to an **Interpreter Group**. Interpreter Group is a unit of start/stop interpreter.
+By default, every interpreter is belonged to a single group, but the group might contain more interpreters. For example, Spark interpreter group is including Spark support, pySpark, Spark SQL and the dependency loader.
+
+Technically, Zeppelin interpreters from the same group are running in the same JVM. For more information about this, please checkout [here](../development/writing_zeppelin_interpreter.html).
+
+Each interpreters is belonged to a single group and registered together. All of their properties are listed in the interpreter setting like below image.
+
+<img src="/assets/themes/zeppelin/img/screenshots/interpreter_setting_spark.png" width="500px">
+
+
+## Interpreter binding mode
+
+Each Interpreter Setting can choose one of 'shared', 'scoped', 'isolated' interpreter binding mode.
+In 'shared' mode, every notebook bound to the Interpreter Setting will share the single Interpreter instance. In 'scoped' mode, each notebook will create new Interpreter instance in the same interpreter process. In 'isolated' mode, each notebook will create new Interpreter process.
+
+For more information, check [Interpreter Binding Mode](./interpreter_binding_mode.html).
+
+<img src="/assets/themes/zeppelin/img/screenshots/interpreter_persession.png" width="400px">
+
+
+## Connecting to the existing remote interpreter
+
+Zeppelin users can start interpreter thread embedded in their service. This will provide flexibility to user to start interpreter on remote host. To start interpreter along with your service you have to create an instance of ``RemoteInterpreterServer`` and start it as follows:
+
+```
+RemoteInterpreterServer interpreter=new RemoteInterpreterServer(3678); 
+// Here, 3678 is the port on which interpreter will listen.    
+interpreter.start()  
+
+```
+
+The above code will start interpreter thread inside your process. Once the interpreter is started you can configure zeppelin to connect to RemoteInterpreter by checking **Connect to existing process** checkbox and then provide **Host** and **Port** on which interpreter process is listening as shown in the image below:
+
+<img src="/assets/themes/zeppelin/img/screenshots/existing_interpreter.png" width="450px">
+
+## Precode
+
+Snippet of code (language of interpreter) that executes after initialization of the interpreter depends on [Binding mode](#interpreter-binding-mode). To configure add parameter with class of interpreter (`zeppelin.<ClassName>.precode`) except JDBCInterpreter ([JDBC precode](../../interpreter/jdbc.html#usage-precode)). 
+
+<img src="/assets/themes/zeppelin/img/screenshots/interpreter_precode.png" width="800px">
+
+ 

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/interpreter/user_impersonation.md
----------------------------------------------------------------------
diff --git a/docs/usage/interpreter/user_impersonation.md b/docs/usage/interpreter/user_impersonation.md
new file mode 100644
index 0000000..810096e
--- /dev/null
+++ b/docs/usage/interpreter/user_impersonation.md
@@ -0,0 +1,84 @@
+---
+layout: page
+title: "Impersonation"
+description: "Set up zeppelin interpreter process as web front end user."
+group: usage/interpreter 
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# Impersonation
+
+User impersonation enables to run zeppelin interpreter process as a web frontend user
+
+## Setup
+
+#### 1. Enable Shiro auth in `conf/shiro.ini`
+
+```
+[users]
+user1 = password1, role1
+user2 = password2, role2
+```
+
+#### 2. Enable password-less ssh for the user you want to impersonate (say user1).
+
+```
+adduser user1
+#ssh-keygen (optional if you don't already have generated ssh-key.
+ssh user1@localhost mkdir -p .ssh
+cat ~/.ssh/id_rsa.pub | ssh user1@localhost 'cat >> .ssh/authorized_keys'
+```
+
+Alternatively instead of password-less, user can override ZEPPELIN_IMPERSONATE_CMD in zeppelin-env.sh
+
+```
+export ZEPPELIN_IMPERSONATE_CMD='sudo -H -u ${ZEPPELIN_IMPERSONATE_USER} bash -c '
+```
+
+
+#### 4. Restart zeppelin server.
+
+```
+# for OSX, linux
+bin/zeppelin-daemon restart
+
+# for windows
+bin\zeppelin.cmd
+```
+
+#### 5. Configure impersonation for interpreter 
+
+<div class="row">
+  <div class="col-md-12" >
+      <a data-lightbox="compiler" href="/assets/themes/zeppelin/img/screenshots/user-impersonation.gif">
+        <img class="img-responsive" src="/assets/themes/zeppelin/img/screenshots/user-impersonation.gif" />
+      </a>
+
+  </div>
+</div>
+
+<br/>
+
+Go to interpreter setting page, and enable "User Impersonate" in any of the interpreter (in my example its shell interpreter)
+
+#### 6. Test with a simple paragraph
+
+```
+%sh
+whoami
+```
+
+Note that usage of "User Impersonate" option will enable Spark interpreter to use `--proxy-user` option with current user by default. If you want to disable `--proxy-user` option, then refer to `ZEPPELIN_IMPERSONATE_SPARK_PROXY_USER` variable in `conf/zeppelin-env.sh`

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/other_features/customizing_homepage.md
----------------------------------------------------------------------
diff --git a/docs/usage/other_features/customizing_homepage.md b/docs/usage/other_features/customizing_homepage.md
new file mode 100644
index 0000000..c6495a2
--- /dev/null
+++ b/docs/usage/other_features/customizing_homepage.md
@@ -0,0 +1,89 @@
+---
+layout: page
+title: "Customizing Apache Zeppelin homepage"
+description: "Apache Zeppelin allows you to use one of the notes you create as your Zeppelin Homepage. With that you can brand your Zeppelin installation, adjust the instruction to your users needs and even translate to other languages."
+group: usage/other_features
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# Customizing Apache Zeppelin homepage
+
+<div id="toc"></div>
+
+Apache Zeppelin allows you to use one of the notes you create as your Zeppelin Homepage.
+With that you can brand your Zeppelin installation, adjust the instruction to your users needs and even translate to other languages.
+
+## How to set a note as your Zeppelin homepage
+
+The process for creating your homepage is very simple as shown below:
+
+1. Create a note using Zeppelin
+2. Set the note id in the config file
+3. Restart Zeppelin
+
+### Create a note using Zeppelin
+Create a new note using Zeppelin,
+you can use ```%md``` interpreter for markdown content or any other interpreter you like.
+You can also use the display system to generate [text](../display_system/basic.html#text), [html](../display_system/basic.html#html), [table](../display_system/basic.html#table) or
+Angular ([backend API](../display_system/angular_backend.html), [frontend API](../display_system/angular_frontend.html)).
+
+Run (shift+Enter) the note and see the output. Optionally, change the note view to report to hide
+the code sections.
+
+### Set the note id in the config file
+To set the note id in the config file, you should copy it from the last word in the note url.
+For example,
+
+<img src="/assets/themes/zeppelin/img/screenshots/homepage_notebook_id.png" width="400px" />
+
+Set the note id to the ```ZEPPELIN_NOTEBOOK_HOMESCREEN``` environment variable
+or ```zeppelin.notebook.homescreen``` property.
+
+You can also set the ```ZEPPELIN_NOTEBOOK_HOMESCREEN_HIDE``` environment variable
+or ```zeppelin.notebook.homescreen.hide``` property to hide the new note from the note list.
+
+### Restart Zeppelin
+Restart your Zeppelin server
+
+```
+./bin/zeppelin-daemon stop
+./bin/zeppelin-daemon start
+```
+That's it! Open your browser and navigate to Apache Zeppelin and see your customized homepage.
+
+<br />
+## Show note list in your custom homepage
+If you want to display the list of notes on your custom Apache Zeppelin homepage all
+you need to do is use our %angular support.
+
+Add the following code to a paragraph in your Apache Zeppelin note and run it.
+
+```javascript
+%spark
+
+println(
+"""%angular
+  <div ng-include="'app/home/notebook.html'"></div>
+""")
+```
+
+After running the paragraph, you will see output similar to this one:
+
+<img src="/assets/themes/zeppelin/img/docs-img/homepage_custom_notebook_list.png" />
+
+That's it! Voila! You have your note list.
+
+

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/other_features/personalized_mode.md
----------------------------------------------------------------------
diff --git a/docs/usage/other_features/personalized_mode.md b/docs/usage/other_features/personalized_mode.md
new file mode 100644
index 0000000..f25b5a7
--- /dev/null
+++ b/docs/usage/other_features/personalized_mode.md
@@ -0,0 +1,25 @@
+---
+layout: page
+title: "Personalized Mode"
+description: ""
+group: usage/other_features
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# What is Personalized Mode? 
+
+<div id="toc"></div>
+

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/other_features/publishing_paragraphs.md
----------------------------------------------------------------------
diff --git a/docs/usage/other_features/publishing_paragraphs.md b/docs/usage/other_features/publishing_paragraphs.md
new file mode 100644
index 0000000..ac854ee
--- /dev/null
+++ b/docs/usage/other_features/publishing_paragraphs.md
@@ -0,0 +1,49 @@
+---
+layout: page
+title: "How can you publish your paragraphs"
+description: "Apache Zeppelin provides a feature for publishing your notebook paragraph results. Using this feature, you can show Zeppelin notebook paragraph results in your own website."
+group: usage/other_features
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# How can you publish your paragraphs?
+
+<div id="toc"></div>
+
+Apache Zeppelin provides a feature for publishing your notebook paragraph results. Using this feature, you can show Zeppelin notebook paragraph results in your own website. 
+It's very straightforward. Just use `<iframe>` tag in your page.
+
+## Copy a Paragraph Link
+A first step to publish your paragraph result is **Copy a Paragraph Link**.
+
+  * After running a paragraph in your Zeppelin notebook, click a gear button located on the right side. Then, click **Link this Paragraph** menu like below image.
+<center><img src="/assets/themes/zeppelin/img/docs-img/link-the-paragraph.png" height="100%" width="100%"></center>
+  
+  * Just copy the provided link. 
+<center><img src="/assets/themes/zeppelin/img/docs-img/copy-the-link.png" height="100%" width="100%"></center>
+
+## Embed the Paragraph to Your Website
+For publishing the copied paragraph, you may use `<iframe>` tag in your website page.
+For example,
+
+```
+<iframe src="http://< ip-address >:< port >/#/notebook/2B3QSZTKR/paragraph/...?asIframe" height="" width="" ></iframe>
+```
+
+Finally, you can show off your beautiful visualization results in your website. 
+<center><img src="/assets/themes/zeppelin/img/docs-img/your-website.png" height="90%" width="90%"></center>
+
+> **Note**: To embed the paragraph in a website, Apache Zeppelin needs to be reachable by that website. And please use this feature with caution and in a trusted environment only, as Zeppelin entire Webapp could be accessible by whoever visits your website. 

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/rest_api/configuration.md
----------------------------------------------------------------------
diff --git a/docs/usage/rest_api/configuration.md b/docs/usage/rest_api/configuration.md
new file mode 100644
index 0000000..30e4c74
--- /dev/null
+++ b/docs/usage/rest_api/configuration.md
@@ -0,0 +1,133 @@
+---
+layout: page
+title: "Apache Zeppelin Configuration REST API"
+description: "This page contains Apache Zeppelin Configuration REST API information."
+group: usage/rest_api 
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# Apache Zeppelin Configuration REST API
+
+<div id="toc"></div>
+
+## Overview
+Apache Zeppelin provides several REST APIs for interaction and remote activation of zeppelin functionality.
+All REST APIs are available starting with the following endpoint `http://[zeppelin-server]:[zeppelin-port]/api`. 
+Note that Apache Zeppelin REST APIs receive or return JSON objects, it is recommended for you to install some JSON viewers such as [JSONView](https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc).
+
+If you work with Apache Zeppelin and find a need for an additional REST API, please [file an issue or send us an email](http://zeppelin.apache.org/community.html).
+
+
+## Configuration REST API list
+
+### List all key/value pair of configurations
+  <table class="table-configuration">
+    <col width="200">
+    <tr>
+      <td>Description</td>
+      <td>This ```GET``` method return all key/value pair of configurations on the server.<br/>
+       Note: For security reason, some pairs would not be shown.</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/configurations/all```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200</td>
+    </tr>
+    <tr>
+      <td> Fail code</td>
+      <td> 500 </td>
+    </tr>
+    <tr>
+      <td> sample JSON response
+      </td>
+      <td>
+        <pre>
+{
+  "status": "OK",
+  "message": "",
+  "body": {
+    "zeppelin.war.tempdir": "webapps",
+    "zeppelin.notebook.homescreen.hide": "false",
+    "zeppelin.interpreter.remoterunner": "bin/interpreter.sh",
+    "zeppelin.notebook.s3.user": "user",
+    "zeppelin.server.port": "8089",
+    "zeppelin.dep.localrepo": "local-repo",
+    "zeppelin.ssl.truststore.type": "JKS",
+    "zeppelin.ssl.keystore.path": "keystore",
+    "zeppelin.notebook.s3.bucket": "zeppelin",
+    "zeppelin.server.addr": "0.0.0.0",
+    "zeppelin.ssl.client.auth": "false",
+    "zeppelin.server.context.path": "/",
+    "zeppelin.ssl.keystore.type": "JKS",
+    "zeppelin.ssl.truststore.path": "truststore",
+    "zeppelin.interpreters": "org.apache.zeppelin.spark.SparkInterpreter,org.apache.zeppelin.spark.PySparkInterpreter,org.apache.zeppelin.spark.SparkRInterpreter,org.apache.zeppelin.spark.SparkSqlInterpreter,org.apache.zeppelin.spark.DepInterpreter,org.apache.zeppelin.markdown.Markdown,org.apache.zeppelin.angular.AngularInterpreter,org.apache.zeppelin.shell.ShellInterpreter,org.apache.zeppelin.flink.FlinkInterpreter,org.apache.zeppelin.lens.LensInterpreter,org.apache.zeppelin.ignite.IgniteInterpreter,org.apache.zeppelin.ignite.IgniteSqlInterpreter,org.apache.zeppelin.cassandra.CassandraInterpreter,org.apache.zeppelin.geode.GeodeOqlInterpreter,org.apache.zeppelin.kylin.KylinInterpreter,org.apache.zeppelin.elasticsearch.ElasticsearchInterpreter,org.apache.zeppelin.scalding.ScaldingInterpreter",
+    "zeppelin.ssl": "false",
+    "zeppelin.notebook.autoInterpreterBinding": "true",
+    "zeppelin.notebook.homescreen": "",
+    "zeppelin.notebook.storage": "org.apache.zeppelin.notebook.repo.VFSNotebookRepo",
+    "zeppelin.interpreter.connect.timeout": "30000",
+    "zeppelin.anonymous.allowed": "true",
+    "zeppelin.server.allowed.origins":"*",
+    "zeppelin.encoding": "UTF-8"
+  }
+}</pre></td>
+    </tr>
+  </table>
+
+<br/>
+
+### List all prefix matched key/value pair of configurations
+  <table class="table-configuration">
+    <col width="200">
+    <tr>
+      <td>Description</td>
+      <td>This ```GET``` method return all prefix matched key/value pair of configurations on the server.<br/>
+      Note: For security reason, some pairs would not be shown.</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/configurations/prefix/[prefix]```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200</td>
+    </tr>
+    <tr>
+      <td> Fail code</td>
+      <td> 500 </td>
+    </tr>
+    <tr>
+      <td> sample JSON response
+      </td>
+      <td><pre>
+{
+  "status": "OK",
+  "message": "",
+  "body": {
+    "zeppelin.ssl.keystore.type": "JKS",
+    "zeppelin.ssl.truststore.path": "truststore",
+    "zeppelin.ssl.truststore.type": "JKS",
+    "zeppelin.ssl.keystore.path": "keystore",
+    "zeppelin.ssl": "false",
+    "zeppelin.ssl.client.auth": "false"
+  }
+}</pre>
+      </td>
+    </tr>
+  </table>

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/rest_api/credential.md
----------------------------------------------------------------------
diff --git a/docs/usage/rest_api/credential.md b/docs/usage/rest_api/credential.md
new file mode 100644
index 0000000..1bbe1a5
--- /dev/null
+++ b/docs/usage/rest_api/credential.md
@@ -0,0 +1,185 @@
+---
+layout: page
+title: "Apache Zeppelin Credential REST API"
+description: "This page contains Apache Zeppelin Credential REST API information."
+group: usage/rest_api 
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# Apache Zeppelin Credential REST API
+
+<div id="toc"></div>
+
+## Overview
+Apache Zeppelin provides several REST APIs for interaction and remote activation of zeppelin functionality.
+All REST APIs are available starting with the following endpoint `http://[zeppelin-server]:[zeppelin-port]/api`. 
+Note that Apache Zeppelin REST APIs receive or return JSON objects, it is recommended for you to install some JSON viewers such as [JSONView](https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc).
+
+If you work with Apache Zeppelin and find a need for an additional REST API, please [file an issue or send us an email](http://zeppelin.apache.org/community.html).
+
+<br />
+## Credential REST API List
+
+### List Credential information
+  <table class="table-credential">
+    <col width="200">
+    <tr>
+      <td>Description</td>
+      <td>This ```GET``` method returns all key/value pairs of the credential information on the server.</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/credential```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200</td>
+    </tr>
+    <tr>
+      <td> Fail code</td>
+      <td> 500 </td>
+    </tr>
+    <tr>
+      <td> sample JSON response
+      </td>
+      <td>
+        <pre>
+{
+  "status": "OK",
+  "message": "",
+  "body": {
+    "userCredentials":{
+      "entity1":{
+        "username":"user1",
+        "password":"password1"
+      },
+      "entity2":{
+        "username":"user2",
+        "password":"password2"
+      }
+    }
+  }
+}</pre></td>
+    </tr>
+  </table>
+
+<br/>
+### Create an Credential Information
+  <table class="table-credential">
+    <col width="200">
+    <tr>
+      <td>Description</td>
+      <td>This ```PUT``` method creates the credential information with new properties.</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/credential/```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200</td>
+    </tr>
+    <tr>
+      <td>Fail code</td>
+      <td> 500 </td>
+    </tr>
+    <tr>
+      <td>Sample JSON input</td>
+      <td>
+        <pre>
+{
+  "entity": "e1",
+  "username": "user",
+  "password": "password"
+}
+        </pre>
+      </td>
+    </tr>
+    <tr>
+      <td>Sample JSON response</td>
+      <td>
+        <pre>
+{
+  "status": "OK"
+}
+        </pre>
+      </td>
+    </tr>
+  </table>
+
+
+<br/>
+### Delete all Credential Information
+
+  <table class="table-credential">
+    <col width="200">
+    <tr>
+      <td>Description</td>
+      <td>This ```DELETE``` method deletes the credential information.</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/credential```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200</td>
+    </tr>
+    <tr>
+      <td> Fail code</td>
+      <td> 500 </td>
+    </tr>
+    <tr>
+      <td>Sample JSON response</td>
+      <td>
+        <code>{"status":"OK"}</code>
+      </td>
+    </tr>
+  </table>
+
+
+<br/>
+### Delete an Credential entity
+
+  <table class="table-credential">
+    <col width="200">
+    <tr>
+      <td>Description</td>
+      <td>This ```DELETE``` method deletes a given credential entity.</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/credential/[entity]```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200</td>
+    </tr>
+    <tr>
+      <td> Fail code</td>
+      <td> 500 </td>
+    </tr>
+    <tr>
+      <td>Sample JSON response</td>
+      <td>
+        <code>{"status":"OK"}</code>
+      </td>
+    </tr>
+  </table>
+
+
+<br/>
+

http://git-wip-us.apache.org/repos/asf/zeppelin/blob/4b6d3e55/docs/usage/rest_api/helium.md
----------------------------------------------------------------------
diff --git a/docs/usage/rest_api/helium.md b/docs/usage/rest_api/helium.md
new file mode 100644
index 0000000..37f4bcb
--- /dev/null
+++ b/docs/usage/rest_api/helium.md
@@ -0,0 +1,378 @@
+---
+layout: page
+title: "Apache Zeppelin Helium REST API"
+description: "This page contains Apache Zeppelin Helium REST API information."
+group: usage/rest_api
+---
+<!--
+Licensed 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.
+-->
+{% include JB/setup %}
+
+# Apache Zeppelin Helium REST API
+
+<div id="toc"></div>
+
+## Overview
+Apache Zeppelin provides several REST APIs for interaction and remote activation of zeppelin functionality.
+All REST APIs are available starting with the following endpoint `http://[zeppelin-server]:[zeppelin-port]/api`. 
+Note that Apache Zeppelin REST APIs receive or return JSON objects, it is recommended for you to install some JSON viewers such as [JSONView](https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc).
+
+If you work with Apache Zeppelin and find a need for an additional REST API, please [file an issue or send us an email](http://zeppelin.apache.org/community.html).
+
+## Helium REST API List
+
+### List of all available helium packages
+
+  <table class="table-configuration">
+    <col width="200">
+    <tr>
+      <td>Description</td>
+      <td>This ```GET``` method returns all the available helium packages in configured registries.</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/helium/all```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200</td>
+    </tr>
+    <tr>
+      <td>Fail code</td>
+      <td> 500 </td>
+    </tr>
+    <tr>
+      <td>Sample JSON response</td>
+      <td>
+        <pre>
+{
+  "status": "OK",
+  "message": "",
+  "body": {
+    "zeppelin.clock": [
+      {
+        "registry": "local",
+        "pkg": {
+          "type": "APPLICATION",
+          "name": "zeppelin.clock",
+          "description": "Clock (example)",
+          "artifact": "zeppelin-examples\/zeppelin-example-clock\/target\/zeppelin-example-clock-0.7.0-SNAPSHOT.jar",
+          "className": "org.apache.zeppelin.example.app.clock.Clock",
+          "resources": [
+            [
+              ":java.util.Date"
+            ]
+          ],
+          "icon": "icon"
+        },
+        "enabled": false
+      }
+    ],
+    "zeppelin-bubblechart": [
+      {
+        "registry": "local",
+        "pkg": {
+          "type": "VISUALIZATION",
+          "name": "zeppelin-bubblechart",
+          "description": "Animated bubble chart",
+          "artifact": ".\/..\/helium\/zeppelin-bubble",
+          "icon": "icon"
+        },
+        "enabled": true
+      },
+      {
+        "registry": "local",
+        "pkg": {
+          "type": "VISUALIZATION",
+          "name": "zeppelin-bubblechart",
+          "description": "Animated bubble chart",
+          "artifact": "zeppelin-bubblechart@0.0.2",
+          "icon": "icon"
+        },
+        "enabled": false
+      }
+    ],
+    "zeppelin\_horizontalbar": [
+      {
+        "registry": "local",
+        "pkg": {
+          "type": "VISUALIZATION",
+          "name": "zeppelin_horizontalbar",
+          "description": "Horizontal Bar chart (example)",
+          "artifact": ".\/zeppelin-examples\/zeppelin-example-horizontalbar",
+          "icon": "icon"
+        },
+        "enabled": true
+      }
+    ]
+  }
+}
+        </pre>
+      </td>
+    </tr>
+  </table>
+
+<br/>
+### Suggest Helium application
+
+  <table class="table-configuration">
+    <col width="200">
+    <tr>
+      <td>Description</td>
+      <td>This ```GET``` method returns suggested helium application for the paragraph.</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/helium/suggest/[Note ID]/[Paragraph ID]```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200</td>
+    </tr>
+    <tr>
+      <td>Fail code</td>
+      <td>
+        404 on note or paragraph not exists <br />
+        500
+      </td>
+    </tr>
+    <tr>
+      <td>Sample JSON response</td>
+      <td>
+        <pre>
+{
+  "status": "OK",
+  "message": "",
+  "body": {
+    "available": [
+      {
+        "registry": "local",
+        "pkg": {
+          "type": "APPLICATION",
+          "name": "zeppelin.clock",
+          "description": "Clock (example)",
+          "artifact": "zeppelin-examples\/zeppelin-example-clock\/target\/zeppelin-example-clock-0.7.0-SNAPSHOT.jar",
+          "className": "org.apache.zeppelin.example.app.clock.Clock",
+          "resources": [
+            [
+              ":java.util.Date"
+            ]
+          ],
+          "icon": "icon"
+        },
+        "enabled": true
+      }
+    ]
+  }
+}
+        </pre>
+      </td>
+    </tr>
+  </table>
+  
+<br/>
+### Load helium Application on a paragraph
+
+  <table class="table-configuration">
+    <col width="200">
+    <tr>
+      <td>Description</td>
+      <td>This ```GET``` method returns a helium Application id on success.</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/helium/load/[Note ID]/[Paragraph ID]```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200</td>
+    </tr>
+    <tr>
+      <td>Fail code</td>
+      <td>
+          404 on note or paragraph not exists <br/>
+          500 for any other errors
+      </td>
+    </tr>
+    <tr>
+      <td>Sample JSON response</td>
+      <td>
+        <pre>
+{
+  "status": "OK",
+  "message": "",
+  "body": "app_2C5FYRZ1E-20170108-040449_2068241472zeppelin_clock"
+}
+        </pre>
+      </td>
+    </tr>
+  </table>
+
+<br/>
+### Load bundled visualization script
+
+  <table class="table-configuration">
+    <col width="200">
+    <tr>
+      <td>Description</td>
+      <td>This ```GET``` method returns bundled helium visualization javascript. When refresh=true (optional) is provided, Zeppelin rebuild bundle. otherwise, provided from cache</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/helium/visualizations/load[?refresh=true]```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200 reponse body is executable javascript</td>
+    </tr>
+    <tr>
+      <td>Fail code</td>
+      <td>
+          200 reponse body is error message string starts with ERROR:<br/>
+      </td>
+    </tr>
+  </table>
+
+<br/>
+### Enable package
+  <table class="table-configuration">
+    <col width="200">
+    <tr>
+      <td>Description</td>
+      <td>This ```POST``` method enables a helium package. Needs artifact name in input payload</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/helium/enable/[Package Name]```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200</td>
+    </tr>
+    <tr>
+      <td>Fail code</td>
+      <td> 500 </td>
+    </tr>
+    <tr>
+      <td>Sample input</td>
+      <td>
+        <pre>
+zeppelin-examples/zeppelin-example-clock/target/zeppelin-example-clock-0.7.0-SNAPSHOT.jar
+        </pre>
+      </td>
+    </tr>
+    <tr>
+      <td>Sample JSON response</td>
+      <td>
+        <pre>
+{"status":"OK"}
+        </pre>
+      </td>
+    </tr>
+  </table>
+
+<br/>
+### Disable package
+
+  <table class="table-configuration">
+    <col width="200">
+    <tr>
+      <td>Description</td>
+      <td>This ```POST``` method disables a helium package.</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/helium/disable/[Package Name]```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200</td>
+    </tr>
+    <tr>
+      <td> Fail code</td>
+      <td> 500 </td>
+    </tr>
+    <tr>
+      <td>Sample JSON response</td>
+      <td>
+        <code>{"status":"OK"}</code>
+      </td>
+    </tr>
+  </table>
+<br />
+
+### Get visualization display order
+
+  <table class="table-configuration">
+    <col width="200">
+    <tr>
+      <td>Description</td>
+      <td>This ```GET``` method returns display order of enabled visualization packages.</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/helium/visualizationOrder```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200</td>
+    </tr>
+    <tr>
+      <td> Fail code</td>
+      <td> 500 </td>
+    </tr>
+    <tr>
+      <td>Sample JSON response</td>
+      <td>
+        <code>{"status":"OK","body":["zeppelin_horizontalbar","zeppelin-bubblechart"]}</code>
+      </td>
+    </tr>
+  </table>
+
+
+<br />
+
+### Set visualization display order
+
+  <table class="table-configuration">
+    <col width="200">
+    <tr>
+      <td>Description</td>
+      <td>This ```POST``` method sets visualization packages display order.</td>
+    </tr>
+    <tr>
+      <td>URL</td>
+      <td>```http://[zeppelin-server]:[zeppelin-port]/api/helium/visualizationOrder```</td>
+    </tr>
+    <tr>
+      <td>Success code</td>
+      <td>200</td>
+    </tr>
+    <tr>
+      <td> Fail code</td>
+      <td> 500 </td>
+    </tr>
+    <tr>
+      <td>Sample JSON input</td>
+      <td>
+        <code>["zeppelin-bubblechart", "zeppelin_horizontalbar"]</code>
+      </td>
+    </tr>
+    <tr>
+      <td>Sample JSON response</td>
+      <td>
+        <code>{"status":"OK"}</code>
+      </td>
+    </tr>
+  </table>
\ No newline at end of file