diff --git a/website2/Dockerfile b/website2/Dockerfile
index 076969b..8b9eb2e 100755
--- a/website2/Dockerfile
+++ b/website2/Dockerfile
@@ -22,5 +22,6 @@
 COPY ./docs /app/docs
 COPY ./website /app/website
 RUN yarn install
-
+RUN git config user.name "Heron Publish"
+RUN git config user.email "publish@heron.incubator.apache.org"
 CMD ["yarn", "start"]
diff --git a/website2/docs/getting-started-local-single-node.md b/website2/docs/getting-started-local-single-node.md
index 9a23a3e..4a958e8 100644
--- a/website2/docs/getting-started-local-single-node.md
+++ b/website2/docs/getting-started-local-single-node.md
@@ -28,7 +28,7 @@
 * [MacOS](#macos-homebrew)
 * [Ubuntu >= 14.04](#using-installation-scripts)
 * [CentOS](#using-installation-scripts)
-
+aa
 For other platforms, you need to build from source. Please refer to the [guide to compiling Heron](compiling-overview).
 
 ## Step 1 --- Download the Heron tools
diff --git a/website2/website/README.md b/website2/website/README.md
index 67a0d59..fcc4d46 100755
--- a/website2/website/README.md
+++ b/website2/website/README.md
@@ -16,6 +16,11 @@
     specific language governing permissions and limitations
     under the License.
 -->
+ perl -pi -e 's/^  */\t/' Makefile
+ chmod +x scripts/*
+ npm run version 0.21.2
+
+
 # The Heron website and documentation
 
 This `README` is basically the meta-documentation for the Heron website and documentation. You will find instructions on running the site locally.
diff --git a/website2/website/languages.js b/website2/website/languages.js
deleted file mode 100644
index 5a3a0cb..0000000
--- a/website2/website/languages.js
+++ /dev/null
@@ -1,9 +0,0 @@
-
-const languages = [
-    {
-      enabled: true,
-      name: 'English',
-      tag: 'en',
-    }
-];
-module.exports = languages;
\ No newline at end of file
diff --git a/website2/website/pages/en/index.js b/website2/website/pages/en/index.js
index 8e164f9..74760ce 100755
--- a/website2/website/pages/en/index.js
+++ b/website2/website/pages/en/index.js
@@ -67,7 +67,8 @@
         <div className="inner">
           <ProjectTitle siteConfig={siteConfig} />
           <PromoSection>
-            <Button href="/docs/en/getting-started-local-single-node">Documentation</Button>
+      < Button
+      href = "/docs/getting-started-local-single-node" > Documentation < /Button>
             {/* keep as reference for now <Button href={docUrl('doc1.html')}>Github</Button> */}
             <Button href="https://github.com/apache/incubator-heron" target="_blank">Github</Button>
           </PromoSection>
diff --git a/website2/website/pages/en/release-notes.js b/website2/website/pages/en/release-notes.js
new file mode 100644
index 0000000..0695cc1
--- /dev/null
+++ b/website2/website/pages/en/release-notes.js
@@ -0,0 +1,43 @@
+const React = require('react');
+
+const CompLibrary = require('../../core/CompLibrary');
+const MarkdownBlock = CompLibrary.MarkdownBlock; /* Used to read markdown */
+const Container = CompLibrary.Container;
+const GridBlock = CompLibrary.GridBlock;
+
+const CWD = process.cwd();
+
+const siteConfig = require(`${CWD}/siteConfig.js`);
+
+const releaseNotes = require('fs').readFileSync(`${CWD}/release-notes.md`, 'utf8')
+
+class ReleaseNotes extends React.Component {
+    render() {
+
+        return (
+            < div
+        className = "pageContainer" >
+            < Container
+        className = "mainContainer documentContainer postContainer" >
+            < div
+        className = "post" >
+            < header
+        className = "postHeader" >
+            < h1 > Apache
+        Heron(Incubating)
+        Release
+        Notes < /h1>
+        < hr / >
+        < /header>
+        < MarkdownBlock >
+        {releaseNotes}
+        < /MarkdownBlock>
+        < /div>
+        < /Container>
+        < /div>
+    )
+        ;
+    }
+}
+
+module.exports = ReleaseNotes;
\ No newline at end of file
diff --git a/website2/website/pages/en/versions.js b/website2/website/pages/en/versions.js
index b25ac50..db68518 100755
--- a/website2/website/pages/en/versions.js
+++ b/website2/website/pages/en/versions.js
@@ -45,7 +45,8 @@
                       props.language ? props.language + '/' : ''
                     }doc1`}> */}
                    <a
-                    href={`${siteConfig.baseUrl}docs/${props.language}/getting-started-local-single-node`}>
+    href = {`${siteConfig.baseUrl}docs/getting-started-local-single-node`
+}>
                     Documentation
                   </a>
                 </td>
@@ -68,7 +69,8 @@
                   {/* You are supposed to change this href where appropriate
                         Example: href="<baseUrl>/docs(/:language)/next/:id" */}
                   <a
-                    href={`${siteConfig.baseUrl}docs/${props.language}/next/getting-started-local-single-node`}>
+    href = {`${siteConfig.baseUrl}docs/next/getting-started-local-single-node`
+}>
                     Documentation
                   </a>
                 </td>
@@ -94,12 +96,15 @@
                         {/* You are supposed to change this href where appropriate
                         Example: href="<baseUrl>/docs(/:language)/:version/:id" */}
                         <a
-                          href={`${siteConfig.baseUrl}docs/${props.language}/${version}/getting-started-local-single-node`}>
+                  href = {`${siteConfig.baseUrl}docs/${version}/getting-started-local-single-node`
+              } >
                           Documentation
                         </a>
                       </td>
                       <td>
-                        <a href={`${repoUrl}/releases/tag/v${version}`}>
+        < a
+    href = {`${siteConfig.baseUrl}release-notes#${version}`
+}>
                           Release Notes
                         </a>
                       </td>
diff --git a/website2/website/release-notes.md b/website2/website/release-notes.md
new file mode 100644
index 0000000..b755f23
--- /dev/null
+++ b/website2/website/release-notes.md
@@ -0,0 +1,24 @@
+
+## Releases
+
+### 0.20.0-incubating &mdash; 2018-11-21 <a id="0.20.0"></a>
+
+This is the first release of Heron as an Apache Incubating Project
+
+- Fix annotation processor (#3038)
+- Refactor heron_executor to make it easier to customize (#3043)
+- Remove libunwind patches (#3041)
+- cleanup README (#3037)
+- Fix Topology-API window documentation (#3039)
+- Nwang/update thirdparty license (#3042)
+- Fix 'Copyright 2015 The Heron Authors' in scripts (#3036)
+
+### 0.21.1-incubating &mdash; 2019-7-20 <a id="0.20.1"></a>
+
+- Example commit of 0.21.1
+
+### 0.21.2-incubating &mdash; 2019-08-27 <a id="0.21.2"></a>
+
+- Example Commit (#XXXX)
+
+
diff --git a/website2/website/scripts/build-site.sh b/website2/website/scripts/build-site.sh
old mode 100644
new mode 100755
diff --git a/website2/website/scripts/javadocs-overview.html b/website2/website/scripts/javadocs-overview.html
old mode 100644
new mode 100755
diff --git a/website2/website/scripts/replace.js b/website2/website/scripts/replace.js
old mode 100644
new mode 100755
index 71ed7ef..a1b9cbe
--- a/website2/website/scripts/replace.js
+++ b/website2/website/scripts/replace.js
@@ -8,7 +8,6 @@
 
 function getVersions() {
     try {
-      console.log(JSON.parse(require('fs').readFileSync(`${CWD}/versions.json`, 'utf8')))
       return JSON.parse(require('fs').readFileSync(`${CWD}/versions.json`, 'utf8'));
     } catch (error) {
       //console.error(error)
@@ -30,14 +29,37 @@
     });
 }
 
+
 const versions = getVersions();
 
 const latestVersion = versions[0];
 
+const bazelVersions = {
+    '0.20.0': '0.14.1',
+    '0.20.1': '0.26',
+    'latest': '0.26',
+}
+
+function replaceBazel(version) {
+    try {
+        if (version in bazelVersions) {
+            return bazelVersions[version]
+        } else {
+            throw new Error('Unable to find bazel Version');
+        }
+    } catch (error) {
+
+        console.error('no versions found defaulting to 0.26')
+    }
+    return '0.26'
+}
+
 console.log(latestVersion)
 const from = [
-    /{{heron:version_latest}}/g,
     /{{heron:version}}/g,
+    /{{bazel:version}}/g,
+    /{{% heronVersion %}}/g,
+    /{{% bazelVersion %}}/g
 ];
 
 const options = {
@@ -48,8 +70,10 @@
     ignore: versions.map(v => `${docsDir}/${v}/**/*`), // TODO add next and assets
     from: from,
     to: [
-      `${latestVersion}`,
-      `${versions}`,
+        `${latestVersion}`,
+        replaceBazel(`${latestVersion}`),
+        `${latestVersion}`,
+        replaceBazel(`${latestVersion}`),
     ],
     dry: false
   };
@@ -68,10 +92,12 @@
       ],
       from: from,
       to: [
-        `${latestVersion}`,
-        `${v}`,
+          `${v}`,
+          replaceBazel(`${v}`),
+          `${v}`,
+          replaceBazel(`${v}`),
       ],
-      dry: true
+        dry: false
     };
     doReplace(opts);
 }  
\ No newline at end of file
diff --git a/website2/website/versioned_docs/version-0.20.0/getting-started-local-single-node.md b/website2/website/versioned_docs/version-0.20.0/getting-started-local-single-node.md
index f600634..8e92019 100644
--- a/website2/website/versioned_docs/version-0.20.0/getting-started-local-single-node.md
+++ b/website2/website/versioned_docs/version-0.20.0/getting-started-local-single-node.md
@@ -23,7 +23,6 @@
 
 > The current version of Heron is **{{heron:version}}**
 
-
 The easiest way to get started learning Heron is to install the Heron client tools, which are currently available for:
 
 * [MacOS](#macos-homebrew)
diff --git a/website2/website/versioned_docs/version-0.21.1/getting-started-local-single-node.md b/website2/website/versioned_docs/version-0.21.1/getting-started-local-single-node.md
new file mode 100644
index 0000000..a9c9117
--- /dev/null
+++ b/website2/website/versioned_docs/version-0.21.1/getting-started-local-single-node.md
@@ -0,0 +1,286 @@
+---
+id: version-0.21.1-getting-started-local-single-node
+title: Local (Single Node)
+sidebar_label: Local (Single Node)
+original_id: getting-started-local-single-node
+---
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+      http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
+> The current version of Heron is {{heron:version}}
+
+
+The easiest way to get started learning Heron is to install the Heron client tools, which are currently available for:
+
+* [MacOS](#macos-homebrew)
+* [Ubuntu >= 14.04](#using-installation-scripts)
+* [CentOS](#using-installation-scripts)
+
+For other platforms, you need to build from source. Please refer to the [guide to compiling Heron](compiling-overview).
+
+## Step 1 --- Download the Heron tools
+
+Heron tools can be installed on [macOS](#macos-homebrew) using [Homebrew](https://brew.sh) and on Linux using [installation scripts](#using-installation-scripts).
+
+> You can install using [installation scripts](#using-installation-scripts) on macOS as well.
+
+## macOS/Homebrew
+
+The easiest way to get started with Heron on macOS is using [Homebrew](https://brew.sh):
+
+```bash
+$ brew tap streamlio/homebrew-formulae
+$ brew update
+$ brew install heron
+```
+
+This will install a variety of executables and other resources by default in `/usr/local/opt/heron`.
+
+> Homebrew may use a different folder than `/usr/local/opt/heron`. To check which folder is being used, run `brew --prefix heron`.
+
+## Using installation scripts
+
+To install Heron binaries directly, using installation scripts, go to Heron's [releases page](https://github.com/apache/incubator-heron/releases) on GitHub
+and see a full listing of Heron releases for each available platform. The installation script for macOS (`darwin`), for example, is named
+`heron-install-{{% heronVersion %}}-darwin.sh`.
+
+Download the for your platform either from the releases page or using [`wget`](https://www.gnu.org/software/wget/). Here's a `wget` example for Ubuntu:
+
+```bash
+$ wget https://github.com/apache/incubator-heron/releases/download/{{% heronVersion %}}/heron-install-{{% heronVersion %}}-ubuntu.sh
+```
+
+Once you've downloaded the script, make it executable using [chmod](https://en.wikipedia.org/wiki/Chmod):
+
+```bash
+$ chmod +x heron-*.sh
+```
+
+> The script will install executables in the `~/bin` folder. You should add that folder to your `PATH` using `export PATH=~/bin:$PATH`.
+
+Now run the [Heron client](user-manuals-heron-cli) installation script with the `--user` flag set. Here's an example for Ubuntu:
+
+```bash
+$ ./heron-install-{{% heronVersion %}}-ubuntu.sh --user
+Heron installer
+---------------
+
+Uncompressing...done
+...
+Heron is now installed!
+```
+
+To check that Heron is successfully installed, run `heron version`:
+
+```bash
+$ heron version
+heron.build.git.revision : 26bb4096130a05f9799510bbce6c37a69a7342ef
+heron.build.git.status : Clean
+heron.build.host : ...
+heron.build.time : Sat Aug  6 12:35:47 PDT {{% currentYear %}}
+heron.build.timestamp : 1470512147000
+heron.build.user : ...
+heron.build.version : {{% heronVersion %}}
+```
+
+## Step 2 --- Launch an example topology
+
+> #### Note for macOS users
+
+> If you want to run topologies locally on macOS, you may need to add your
+> hostname to your `/etc/hosts` file under `localhost`. Here's an example line:
+> `127.0.0.1 localhost My-Mac-Laptop.local`. You can fetch your hostname by simply
+> running `hostname` in your shell.
+
+If you set the `--user` flag when running the installation scripts, some example
+topologies will be installed in your `~/.heron/examples` directory. You can
+launch an example [topology](heron-topology-concepts) locally (on your machine)
+using the [Heron CLI tool](user-manuals-heron-cli):
+
+```bash
+$ heron submit local \
+  ~/.heron/examples/heron-streamlet-examples.jar \
+  org.apache.heron.examples.streamlet.WindowedWordCountTopology \
+  WindowedWordCountTopology \
+  --deploy-deactivated
+```
+
+The output should look something like this:
+
+```bash
+INFO: Launching topology 'WindowedWordCountTopology'
+
+...
+
+INFO: Topology 'WindowedWordCountTopology' launched successfully
+INFO: Elapsed time: 3.409s.
+```
+
+This will *submit* the topology to your locally running Heron cluster but it
+won't *activate* the topology because the `--deploy-deactivated` flag was set.
+Activating the topology will be explored in [step
+5](#step-5-explore-topology-management-commands) below.
+
+Note that the output shows whether the topology has been launched successfully as well
+the working directory for the topology.
+
+To check what's under the working directory, run:
+
+```bash
+$ ls -al ~/.herondata/topologies/local/${ROLE}/WindowedWordCountTopology
+-rw-r--r--   1 username  staff     6141 Oct 12 09:58 WindowedWordCountTopology.defn
+-rw-r--r--   1 username  staff        5 Oct 12 09:58 container_1_flatmap1_4.pid
+-rw-r--r--   1 username  staff        5 Oct 12 09:58 container_1_logger1_3.pid
+# etc.
+```
+
+All instances' log files can be found in `log-files` under the working directory:
+
+```bash
+$ ls -al ~/.herondata/topologies/local/${ROLE}/WindowedWordCountTopology/log-files
+total 408
+-rw-r--r--   1 username  staff   5055 Oct 12 09:58 container_1_flatmap1_4.log.0
+-rw-r--r--   1 username  staff      0 Oct 12 09:58 container_1_flatmap1_4.log.0.lck
+-rw-r--r--   1 username  staff   5052 Oct 12 09:58 container_1_logger1_3.log.0
+# etc.
+```
+
+## Step 3 --- Start Heron Tracker
+
+The [Heron Tracker](user-manuals-heron-tracker-runbook) is a web service that
+continuously gathers information about your Heron cluster. You can launch the
+tracker by running the `heron-tracker` command (which is already installed):
+
+```bash
+$ heron-tracker
+... Running on port: 8888
+... Using config file: $HOME/.herontools/conf/heron_tracker.yaml
+```
+
+You can reach Heron Tracker in your browser at [http://localhost:8888](http://localhost:8888)
+and see something like the following upon successful submission of the topology:
+![Heron Tracker](assets/heron-tracker.png)
+
+To explore Heron Tracker, please refer to [Heron Tracker Rest API](user-manuals-tracker-rest)
+
+## Step 4 --- Start Heron UI
+
+[Heron UI](user-manuals-heron-ui-runbook) is a user interface that uses Heron Tracker to
+provide detailed visual representations of your Heron topologies. To launch
+Heron UI:
+
+```bash
+$ heron-ui
+... Running on port: 8889
+... Using tracker url: http://localhost:8888
+```
+
+You can open Heron UI in your browser at [http://localhost:8889](http://localhost:8889)
+and see something like this upon successful submission of the topology:
+![Heron UI](assets/heron-ui.png)
+
+To play with Heron UI, please refer to [Heron UI Usage Guide](guides-ui-guide)
+
+## Step 5 --- Explore topology management commands
+
+In step 2 you submitted a topology to your local cluster. The `heron` CLI tool
+also enables you to activate, deactivate, and kill topologies and more.
+
+```bash
+$ heron activate local WindowedWordCountTopology
+$ heron deactivate local WindowedWordCountTopology
+$ heron kill local WindowedWordCountTopology
+```
+
+Upon successful actions, a message similar to the following will appear:
+
+```bash
+INFO: Successfully activated topology 'WindowedWordCountTopology'
+INFO: Elapsed time: 1.980s.
+```
+
+For more info on these commands, read about [topology
+lifecycles](heron-topology-concepts#topology-lifecycle).
+
+To list the available CLI commands, run `heron` by itself:
+
+```bash
+usage: heron <command> <options> ...
+
+Available commands:
+    activate           Activate a topology
+    deactivate         Deactivate a topology
+    help               Prints help for commands
+    kill               Kill a topology
+    restart            Restart a topology
+    submit             Submit a topology
+    version            Print version of heron-cli
+
+For detailed documentation, go to http://heronstreaming.io
+```
+
+To invoke help output for a command, run `heron help COMMAND`. Here's an
+example:
+
+```bash
+$ heron help submit
+usage: heron submit [options] cluster/[role]/[environ] topology-file-name topology-class-name [topology-args]
+
+Required arguments:
+  cluster/[role]/[env]  Cluster, role, and environ to run topology
+  topology-file-name    Topology jar/tar/zip file
+  topology-class-name   Topology class name
+
+Optional arguments:
+  --config-path (a string; path to cluster config; default: "$HOME/.heron/conf")
+  --config-property (key=value; a config key and its value; default: [])
+  --deploy-deactivated (a boolean; default: "false")
+  -D DEFINE             Define a system property to pass to java -D when
+                        running main.
+  --verbose (a boolean; default: "false")
+```
+
+## Step 6 --- Explore other example topologies
+
+The source code for the example topologies can be found
+[on
+GitHub]({{% githubMaster %}}/examples/src/java/org/apache/heron/examples).
+The included example topologies:
+
+* `AckingTopology.java` --- A topology with acking enabled.
+* `ComponentJVMOptionsTopology.java` --- A topology that supplies JVM options
+  for each component.
+* `CustomGroupingTopology.java` --- A topology that implements custom grouping.
+* `ExclamationTopology.java` --- A spout that emits random words to a bolt that
+  then adds an exclamation mark.
+* `MultiSpoutExclamationTopology.java` --- a topology with multiple spouts.
+* `MultiStageAckingTopology.java` --- A three-stage topology. A spout emits to a
+  bolt that then feeds to another bolt.
+* `TaskHookTopology.java` --- A topology that uses a task hook to subscribe to
+   event notifications.
+
+## Troubleshooting
+In case of any issues, please refer to [Quick Start Troubleshooting](getting-started-troubleshooting-guide).
+
+### Next Steps
+
+* [Migrate Storm topologies](getting-started-migrate-storm-topologies) to Heron with simple `pom.xml`
+  changes
+* [Deploy topologies](deployment-overview) in clustered, scheduler-driven
+  environments (such as on [Aurora](schedulers-aurora-cluster)
+  and [locally](schedulers-local))
+* [Develop topologies](heron-architecture) for Heron
\ No newline at end of file
diff --git a/website2/website/versioned_docs/version-0.21.2/getting-started-local-single-node.md b/website2/website/versioned_docs/version-0.21.2/getting-started-local-single-node.md
new file mode 100644
index 0000000..672509b
--- /dev/null
+++ b/website2/website/versioned_docs/version-0.21.2/getting-started-local-single-node.md
@@ -0,0 +1,286 @@
+---
+id: version-0.21.2-getting-started-local-single-node
+title: Local (Single Node)
+sidebar_label: Local (Single Node)
+original_id: getting-started-local-single-node
+---
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+      http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
+> The current version of Heron is {{heron:version}}
+
+The easiest way to get started learning Heron is to install the Heron client tools, which are currently available for:
+
+* [MacOS](#macos-homebrew)
+* [Ubuntu >= 14.04](#using-installation-scripts)
+* [CentOS](#using-installation-scripts)
+
+
+For other platforms, you need to build from source. Please refer to the [guide to compiling Heron](compiling-overview).
+
+## Step 1 --- Download the Heron tools
+
+Heron tools can be installed on [macOS](#macos-homebrew) using [Homebrew](https://brew.sh) and on Linux using [installation scripts](#using-installation-scripts).
+
+> You can install using [installation scripts](#using-installation-scripts) on macOS as well.
+
+## macOS/Homebrew
+
+The easiest way to get started with Heron on macOS is using [Homebrew](https://brew.sh):
+
+```bash
+$ brew tap streamlio/homebrew-formulae
+$ brew update
+$ brew install heron
+```
+
+This will install a variety of executables and other resources by default in `/usr/local/opt/heron`.
+
+> Homebrew may use a different folder than `/usr/local/opt/heron`. To check which folder is being used, run `brew --prefix heron`.
+
+## Using installation scripts
+
+To install Heron binaries directly, using installation scripts, go to Heron's [releases page](https://github.com/apache/incubator-heron/releases) on GitHub
+and see a full listing of Heron releases for each available platform. The installation script for macOS (`darwin`), for example, is named
+`heron-install-{{% heronVersion %}}-darwin.sh`.
+
+Download the for your platform either from the releases page or using [`wget`](https://www.gnu.org/software/wget/). Here's a `wget` example for Ubuntu:
+
+```bash
+$ wget https://github.com/apache/incubator-heron/releases/download/{{% heronVersion %}}/heron-install-{{% heronVersion %}}-ubuntu.sh
+```
+
+Once you've downloaded the script, make it executable using [chmod](https://en.wikipedia.org/wiki/Chmod):
+
+```bash
+$ chmod +x heron-*.sh
+```
+
+> The script will install executables in the `~/bin` folder. You should add that folder to your `PATH` using `export PATH=~/bin:$PATH`.
+
+Now run the [Heron client](user-manuals-heron-cli) installation script with the `--user` flag set. Here's an example for Ubuntu:
+
+```bash
+$ ./heron-install-{{% heronVersion %}}-ubuntu.sh --user
+Heron installer
+---------------
+
+Uncompressing...done
+...
+Heron is now installed!
+```
+
+To check that Heron is successfully installed, run `heron version`:
+
+```bash
+$ heron version
+heron.build.git.revision : 26bb4096130a05f9799510bbce6c37a69a7342ef
+heron.build.git.status : Clean
+heron.build.host : ...
+heron.build.time : Sat Aug  6 12:35:47 PDT {{% currentYear %}}
+heron.build.timestamp : 1470512147000
+heron.build.user : ...
+heron.build.version : {{% heronVersion %}}
+```
+
+## Step 2 --- Launch an example topology
+
+> #### Note for macOS users
+
+> If you want to run topologies locally on macOS, you may need to add your
+> hostname to your `/etc/hosts` file under `localhost`. Here's an example line:
+> `127.0.0.1 localhost My-Mac-Laptop.local`. You can fetch your hostname by simply
+> running `hostname` in your shell.
+
+If you set the `--user` flag when running the installation scripts, some example
+topologies will be installed in your `~/.heron/examples` directory. You can
+launch an example [topology](heron-topology-concepts) locally (on your machine)
+using the [Heron CLI tool](user-manuals-heron-cli):
+
+```bash
+$ heron submit local \
+  ~/.heron/examples/heron-streamlet-examples.jar \
+  org.apache.heron.examples.streamlet.WindowedWordCountTopology \
+  WindowedWordCountTopology \
+  --deploy-deactivated
+```
+
+The output should look something like this:
+
+```bash
+INFO: Launching topology 'WindowedWordCountTopology'
+
+...
+
+INFO: Topology 'WindowedWordCountTopology' launched successfully
+INFO: Elapsed time: 3.409s.
+```
+
+This will *submit* the topology to your locally running Heron cluster but it
+won't *activate* the topology because the `--deploy-deactivated` flag was set.
+Activating the topology will be explored in [step
+5](#step-5-explore-topology-management-commands) below.
+
+Note that the output shows whether the topology has been launched successfully as well
+the working directory for the topology.
+
+To check what's under the working directory, run:
+
+```bash
+$ ls -al ~/.herondata/topologies/local/${ROLE}/WindowedWordCountTopology
+-rw-r--r--   1 username  staff     6141 Oct 12 09:58 WindowedWordCountTopology.defn
+-rw-r--r--   1 username  staff        5 Oct 12 09:58 container_1_flatmap1_4.pid
+-rw-r--r--   1 username  staff        5 Oct 12 09:58 container_1_logger1_3.pid
+# etc.
+```
+
+All instances' log files can be found in `log-files` under the working directory:
+
+```bash
+$ ls -al ~/.herondata/topologies/local/${ROLE}/WindowedWordCountTopology/log-files
+total 408
+-rw-r--r--   1 username  staff   5055 Oct 12 09:58 container_1_flatmap1_4.log.0
+-rw-r--r--   1 username  staff      0 Oct 12 09:58 container_1_flatmap1_4.log.0.lck
+-rw-r--r--   1 username  staff   5052 Oct 12 09:58 container_1_logger1_3.log.0
+# etc.
+```
+
+## Step 3 --- Start Heron Tracker
+
+The [Heron Tracker](user-manuals-heron-tracker-runbook) is a web service that
+continuously gathers information about your Heron cluster. You can launch the
+tracker by running the `heron-tracker` command (which is already installed):
+
+```bash
+$ heron-tracker
+... Running on port: 8888
+... Using config file: $HOME/.herontools/conf/heron_tracker.yaml
+```
+
+You can reach Heron Tracker in your browser at [http://localhost:8888](http://localhost:8888)
+and see something like the following upon successful submission of the topology:
+![Heron Tracker](assets/heron-tracker.png)
+
+To explore Heron Tracker, please refer to [Heron Tracker Rest API](user-manuals-tracker-rest)
+
+## Step 4 --- Start Heron UI
+
+[Heron UI](user-manuals-heron-ui-runbook) is a user interface that uses Heron Tracker to
+provide detailed visual representations of your Heron topologies. To launch
+Heron UI:
+
+```bash
+$ heron-ui
+... Running on port: 8889
+... Using tracker url: http://localhost:8888
+```
+
+You can open Heron UI in your browser at [http://localhost:8889](http://localhost:8889)
+and see something like this upon successful submission of the topology:
+![Heron UI](assets/heron-ui.png)
+
+To play with Heron UI, please refer to [Heron UI Usage Guide](guides-ui-guide)
+
+## Step 5 --- Explore topology management commands
+
+In step 2 you submitted a topology to your local cluster. The `heron` CLI tool
+also enables you to activate, deactivate, and kill topologies and more.
+
+```bash
+$ heron activate local WindowedWordCountTopology
+$ heron deactivate local WindowedWordCountTopology
+$ heron kill local WindowedWordCountTopology
+```
+
+Upon successful actions, a message similar to the following will appear:
+
+```bash
+INFO: Successfully activated topology 'WindowedWordCountTopology'
+INFO: Elapsed time: 1.980s.
+```
+
+For more info on these commands, read about [topology
+lifecycles](heron-topology-concepts#topology-lifecycle).
+
+To list the available CLI commands, run `heron` by itself:
+
+```bash
+usage: heron <command> <options> ...
+
+Available commands:
+    activate           Activate a topology
+    deactivate         Deactivate a topology
+    help               Prints help for commands
+    kill               Kill a topology
+    restart            Restart a topology
+    submit             Submit a topology
+    version            Print version of heron-cli
+
+For detailed documentation, go to http://heronstreaming.io
+```
+
+To invoke help output for a command, run `heron help COMMAND`. Here's an
+example:
+
+```bash
+$ heron help submit
+usage: heron submit [options] cluster/[role]/[environ] topology-file-name topology-class-name [topology-args]
+
+Required arguments:
+  cluster/[role]/[env]  Cluster, role, and environ to run topology
+  topology-file-name    Topology jar/tar/zip file
+  topology-class-name   Topology class name
+
+Optional arguments:
+  --config-path (a string; path to cluster config; default: "$HOME/.heron/conf")
+  --config-property (key=value; a config key and its value; default: [])
+  --deploy-deactivated (a boolean; default: "false")
+  -D DEFINE             Define a system property to pass to java -D when
+                        running main.
+  --verbose (a boolean; default: "false")
+```
+
+## Step 6 --- Explore other example topologies
+
+The source code for the example topologies can be found
+[on
+GitHub]({{% githubMaster %}}/examples/src/java/org/apache/heron/examples).
+The included example topologies:
+
+* `AckingTopology.java` --- A topology with acking enabled.
+* `ComponentJVMOptionsTopology.java` --- A topology that supplies JVM options
+  for each component.
+* `CustomGroupingTopology.java` --- A topology that implements custom grouping.
+* `ExclamationTopology.java` --- A spout that emits random words to a bolt that
+  then adds an exclamation mark.
+* `MultiSpoutExclamationTopology.java` --- a topology with multiple spouts.
+* `MultiStageAckingTopology.java` --- A three-stage topology. A spout emits to a
+  bolt that then feeds to another bolt.
+* `TaskHookTopology.java` --- A topology that uses a task hook to subscribe to
+   event notifications.
+
+## Troubleshooting
+In case of any issues, please refer to [Quick Start Troubleshooting](getting-started-troubleshooting-guide).
+
+### Next Steps
+
+* [Migrate Storm topologies](getting-started-migrate-storm-topologies) to Heron with simple `pom.xml`
+  changes
+* [Deploy topologies](deployment-overview) in clustered, scheduler-driven
+  environments (such as on [Aurora](schedulers-aurora-cluster)
+  and [locally](schedulers-local))
+* [Develop topologies](heron-architecture) for Heron
\ No newline at end of file
diff --git a/website2/website/versioned_docs/version-0.21.2/guides-ui-guide.md b/website2/website/versioned_docs/version-0.21.2/guides-ui-guide.md
new file mode 100644
index 0000000..9a029b4
--- /dev/null
+++ b/website2/website/versioned_docs/version-0.21.2/guides-ui-guide.md
@@ -0,0 +1,206 @@
+---
+id: version-0.21.2-guides-ui-guide
+title: Heron UI Guide
+sidebar_label: Heron UI Guide
+original_id: guides-ui-guide
+---
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+      http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
+### Overview
+
+This guide describes how to make best use of Heron UI for monitoring and
+debugging topologies.
+
+The UI provides a lot of information about a topology or a part of it quickly,
+thus reducing debugging time considerably. Some of these features are
+listed below. A complete set of features can be found in following sections.
+
+1. See logical plan of a topology
+2. See physical plan of a topology
+3. Configs of a topology
+4. See some basic metrics for each of the instances and components
+5. Links to get logs, memory histogram, jstack, heapdump and exceptions of
+   a particular instance
+
+#### Topologies Page
+
+Heron UI is a user interface that uses the Heron Tracker to display detailed, colorful visual representations of topologies, including the logical and physical plan for each topology. 
+
+Start the Heron tracker using `heron-tracker &` which uses default heron_tracker.yaml configuration file. It's a centralized gateway for cluster-wide information about topologies, including which topologies are running, being launched, being killed, etc. It exposes Json Restful endpoint and relies on Zookeeper nodes.
+
+Launc the Heron UI by the command:
+
+```bash
+heron-ui &
+```
+
+By default Heron UI will be started at `http://localhost:8889`
+
+Below is the home page of Heron UI.
+
+The following information or actions can be found on this page.
+
+1. List of all topologies
+2. Number of topologies filtered after search (total by default)
+3. A topology's overview
+4. Filter the topologies using `cluster`
+5. Filter the topologies using string matching in names, clusters, environs,
+   roles, versions, or submitters
+6. Sort the topologies based on a particular column
+7. Click on the topology name to find more info about the topology
+
+![All topologies](assets/all-topologies.png)
+
+#### Topology Page
+
+Below is the main page to monitor a topology.
+
+1. Name of the topology
+2. [Logical plan](heron-topology-concepts#logical-plan) of the topology
+3. [Physical plan](heron-topology-concepts#physical-plan) of the topology
+4. Health metrics for the topology
+5. General info about the topology
+6. General metrics for the topology
+7. Click components for more details
+8. Click instances for more details
+9. Click on aggregated metrics to color instances by metrics
+10. Link to topology level configs
+11. Link to job page  only if the scheduler provides a link
+   <!-- (TODO: Link to this guide) -->
+12. Link to viz dashboard for this topology only if Tracker is configured with
+   one. <!-- (TODO: Link to this configuration) -->
+
+![Topology1](assets/topology1.png)
+
+![Topology2](assets/topology2.png)
+
+Each node in logical plan can be clicked for more specific info about that
+component.
+
+1. Averaged or max metrics for all instances of this component
+2. Aggregated metrics for all instances of this component
+3. List of all instances and their aggregated metrics
+4. [Instance level operations](#instance-actions-pages), which are described in more details below
+
+![Topology Component](assets/topology-component.png)
+
+Clicking on an instance will highlight that instance in the list.
+
+1. Aggregated metrics are only for this instance
+2. Quick access to logs, exceptions and job pages for this instance
+3. Component counters are still aggregated for all instances
+4. The selected instance is highlighted
+
+![Topology Instance](assets/topology-instance.png)
+
+#### Aggregate Topology Metrics
+
+Selecting a metric will highlight the components and instances based on their
+health with respect to the metric, green being healthy, red indicating a problem.
+This is a quick way to find out which instances are having issues.
+
+![Topology Capacity](assets/topology-capacity.png)
+
+![Topology Failures](assets/topology-failures.png)
+
+#### Config Page
+
+These are the topology configurations <!-- (TODO: Add link to Topology
+Configurations) --> that your topology is configured with. Note that spout and
+bolt level configurations are not part of topology config.
+
+![Config](assets/config.png)
+
+#### <a name="instance-actions-pages">Instance Action Pages</a>
+
+These actions are available for all the instances. They are described in the
+next sections.
+
+![Instance Links](assets/topology-instance-links.png)
+
+#### Logs Page
+
+These are the logs generated by the selected instance. The whole logs file can
+also be downloaded.
+
+![Logs](assets/logs.png)
+
+#### Job Page
+
+Below is the directory view of the container. All instances from a container
+will point to the same job page. Following information is available on this page,
+amongst other things.
+
+1. The jar or tar file associated with this topology
+2. Logs for heron-executor <!-- TODO: Link heron-executor -->
+3. `log-files` folder which has instance logs, as well as `stream manager` or
+   `tmaster` logs.
+
+![Jobpage](assets/jobpage1.png)
+
+![Jobpage logfiles](assets/jobpage2-logfiles.png)
+
+#### Exceptions Page
+
+This page lists all exceptions logged by this instance. The exceptions are
+deduplicated, and for each exception, the page shows the number of times this
+exception occurred, the latest and the oldest occurance times.
+
+![Exceptions](assets/exceptions.png)
+
+#### PID Page
+
+This link can be used to find the process ID for an instance. Since each instance
+runs in its own JVM process, this will be unique for a host. The PID is also
+used for other tasks, such as getting jstack or heap dump for an instance.
+
+![PID](assets/pid.png)
+
+#### Jstack Page
+
+Click on this link to run the `jstack` command on the host against the PID for
+the instance. The output of the command is printed on the page in the browser
+itself.
+
+![Jstack](assets/jstack.png)
+
+#### Memory Histogram Page
+
+Click on this link to run the `jmap -histo` command on the host against the PID
+for the instance. The output of the command is printed on the page in the
+browser itself.
+
+![Histo](assets/histo.png)
+
+#### Memory Dump page
+
+Click on this link to run the `jmap -dump:format=b,file=/tmp/heap.bin` command
+agaist the PID for the instance. Follow the instructions on the page to download
+the heap dump file. This link does not download the file.
+
+![Memory Dump](assets/dump.png)
+
+#### Kill Heron UI server
+
+To kill Heron UI server run the following command:
+
+```bash
+kill $(pgrep -f heron-ui)
+```
+
+To stop all the Heron tools, kill the Heron Tracker as well using `kill $(pgrep -f heron-tracker)`.
diff --git a/website2/website/versioned_docs/version-0.21.2/user-manuals-heron-ui.md b/website2/website/versioned_docs/version-0.21.2/user-manuals-heron-ui.md
new file mode 100644
index 0000000..c293fe1
--- /dev/null
+++ b/website2/website/versioned_docs/version-0.21.2/user-manuals-heron-ui.md
@@ -0,0 +1,62 @@
+---
+id: version-0.21.2-user-manuals-heron-ui-runbook
+title: Heron UI Runbook
+sidebar_label: Heron UI Runbook
+original_id: user-manuals-heron-ui-runbook
+---
+<!--
+    Licensed to the Apache Software Foundation (ASF) under one
+    or more contributor license agreements.  See the NOTICE file
+    distributed with this work for additional information
+    regarding copyright ownership.  The ASF licenses this file
+    to you under the Apache License, Version 2.0 (the
+    "License"); you may not use this file except in compliance
+    with the License.  You may obtain a copy of the License at
+      http://www.apache.org/licenses/LICENSE-2.0
+    Unless required by applicable law or agreed to in writing,
+    software distributed under the License is distributed on an
+    "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+    KIND, either express or implied.  See the License for the
+    specific language governing permissions and limitations
+    under the License.
+-->
+
+**Heron UI** is a user interface that uses the [Heron Tracker](heron-architecture#heron-tracker) to display detailed,
+colorful visual representations of topologies, including the
+[logical](heron-topology-concepts#logical-plan) and [physical
+plan](heron-topology-concepts#physical-plan) for each topology. Check out
+[Heron UI Usage Guide](guides-ui-guide) for more information about
+various elements that UI exposes.
+
+### Building Heron UI
+
+Heron uses [bazel](http://bazel.io/) for compiling.
+[This page](compiling-overview) describes how to setup bazel
+for heron.
+
+```bash
+# Build heron-ui
+$ bazel build heron/tools/ui/src/python:heron-ui
+
+# The location of heron-ui pex executable is
+# bazel-bin/heron/tools/ui/src/python/heron-ui
+# To run using default options:
+$ ./bazel-bin/heron/tools/ui/src/python/heron-ui
+```
+
+`heron-ui` is a self executable
+[pex](https://pex.readthedocs.io/en/latest/whatispex.html) archive.
+
+### Heron UI Args
+
+* `--port` - Port to run the heron-ui on. Default port is `8889`.
+* `--tracker_url` - The base url for tracker. All the information about the
+  topologies is fetched from tracker. Default url is `http://localhost:8888`.
+* `--address` - Address to listen; Default address is `0.0.0.0`
+* `--base_url` - The base url path if operating behind proxy; Default is [`None`](https://github.com/apache/incubator-heron/blob/master/heron/tools/ui/src/python/main.py#L145)
+
+```bash
+$ heron-ui
+# is equivalent to
+$ heron-ui --port=8889 --tracker_url=http://localhost:8888
+```
diff --git a/website2/website/versions.json b/website2/website/versions.json
index 0340361..6ed5017 100644
--- a/website2/website/versions.json
+++ b/website2/website/versions.json
@@ -1,3 +1,5 @@
 [
+  "0.21.1",
+  "0.21.2",
   "0.20.0"
 ]
