diff --git a/build.js b/build.js
index 08244bfae503cc331dfa5cf84c04bc068d495024..f6a266bb44dc63939fb63466531cc5276178dbb9 100644
--- a/build.js
+++ b/build.js
@@ -9,12 +9,7 @@ const https = require('https')
 const Parser = require('kado/lib/Parser')
 const showdown = require('showdown')
 const Validate = require('kado/lib/Validate')
-const sha1Exp = /^[0-9a-f]{40}$/
-const opt = GetOpt.getInstance(process.argv)
-const op = opt.opts()
-const docRoot = fs.path.join(__dirname, 'main/views')
-let foldersCreated = 0
-const startTime = new Date()
+
 const highlightExp = new RegExp('<pre>(<code[^>]+?>)(.+?)</code></pre>', 'igs')
 const highlightExt = () => {
   return [{
@@ -39,10 +34,52 @@ const highlightExtension = highlightExt()
 Assert.isType('Array', highlightExtension)
 Assert.isType('Function', highlightExtension[0].filter)
 showdown.extension('highlight', highlightExt)
-const convert = new showdown.Converter({
-  extensions: ['highlight'],
+
+let uriMaps = {}
+const re1 = new RegExp('^([./].*/)([^/]+\\.md)$')
+const linkfixExp = new RegExp('( href=")([^"]+)(")', 'igs')
+const linkfixExt = () => {
+  return [{
+    type: 'output',
+    filter: (text, converter) => {
+      let part = null
+      do {
+        part = linkfixExp.exec(text)
+        if (part) {
+          const part1 = text.slice(0, part.index) + part[1]
+          const part2 = part[3] + text.slice(part.index + part[0].length)
+          const href = Parser.htmlUnescape(part[2])
+          const m = href.match(re1)
+          if (m && m[1] && m[2]) {
+            for (const uri of Object.keys(converter.uriMap).sort().filter((v) => v.indexOf('/' + m[2]) > -1)) {
+              const newHref = ['/', '/'].join(converter.uriMap[uri][0])
+              text = `${part1}${newHref}${part2}`
+            }
+          }
+        }
+      } while (part)
+      return text
+    }
+  }]
+}
+const linkfixExtension = linkfixExt()
+Assert.isType('Array', linkfixExtension)
+Assert.isType('Function', linkfixExtension[0].filter)
+showdown.extension('linkfix', linkfixExt)
+
+const converterOpts = {
+  extensions: ['highlight', 'linkfix'],
   tables: true
-})
+}
+
+const sha1Exp = /^[0-9a-f]{40}$/
+const opt = GetOpt.getInstance(process.argv)
+const op = opt.opts()
+const docRoot = fs.path.join(__dirname, 'main/views')
+const subs = ['article', 'doc', 'guide', 'info']
+let foldersCreated = 0
+const startTime = new Date()
+
 if (op.help || op.h) {
   console.log('build <options> <arguments>')
   console.log('  -h --help    Display help menu')
@@ -59,6 +96,7 @@ if (!op.i || op.info) {
   console.log('No document information defined, exiting!')
   process.exit(1)
 }
+
 function getRemoteFile (url) {
   return new Promise((resolve, reject) => {
     function remoteFileErrorHandler (e) {
@@ -118,12 +156,29 @@ function compareContent (base, against) {
     hashAgainst: sha1Against
   }
 }
+function infoToUriMaps (info) {
+  const uriMaps = {}
+  for (const v in info) {
+    if (!Object.prototype.hasOwnProperty.call(info, v)) continue
+    const doc = info[v]
+    uriMaps[v] = {}
+    for (const sub of subs) {
+      if (typeof doc[sub] === 'object') {
+        for (const name of Object.keys(doc[sub])) {
+          if (!uriMaps[v][doc[sub][name]]) uriMaps[v][doc[sub][name]] = []
+          uriMaps[v][doc[sub][name]].push([sub, name].join('/'))
+        }
+      }
+    }
+  }
+  return uriMaps
+}
 let pending = 0
 let skipped = 0
 let written = 0
 let bytesReceived = 0
 let bytesWritten = 0
-function processDocuments (vInfo, type) {
+function processDocuments (vInfo, type, v) {
   const docPromises = []
   if (!vInfo.docMap) vInfo.docMap = {}
   for (const name in vInfo[type]) {
@@ -145,6 +200,8 @@ function processDocuments (vInfo, type) {
     const promise = getRemoteFile(doc.remoteRawUrl)
       .then((text) => {
         bytesReceived += text.length
+        const convert = new showdown.Converter(converterOpts)
+        convert.uriMap = uriMaps[v]
         html = convert.makeHtml(text)
         // now retrieve the locally saved content so we can compare
         const promises = []
@@ -209,6 +266,7 @@ try {
   const infoFile = op.i || op.info
   Assert.isOk(fs.exists(infoFile), 'Information file does not exist')
   const info = JSON.parse(fs.readFileSync(infoFile))
+  uriMaps = infoToUriMaps(info)
   let versionsProcessed = 0
   const promises = []
   for (const v in info) {
@@ -223,10 +281,9 @@ try {
         vInfo.baseVersion = pkg.version.split('.')[0]
         if (vInfo.latest === true) info.latestVersion = vInfo.docVersion
         const queue = []
-        if (vInfo.article) queue.push(processDocuments(vInfo, 'article'))
-        if (vInfo.doc) queue.push(processDocuments(vInfo, 'doc'))
-        if (vInfo.guide) queue.push(processDocuments(vInfo, 'guide'))
-        if (vInfo.info) queue.push(processDocuments(vInfo, 'info'))
+        for (const sub of subs) {
+          if (vInfo[sub]) queue.push(processDocuments(vInfo, sub, v))
+        }
         return Promise.all(queue)
       })
     promises.push(promise)
@@ -235,7 +292,7 @@ try {
     .then(() => {
       if (op.u || op.update) {
         fs.writeFileSync(
-          fs.path.join(docRoot, 'info.json'), JSON.stringify(info)
+          fs.path.join(docRoot, 'info.json'), JSON.stringify(info, null, '  ')
         )
         console.log('Updated information file.')
       }
diff --git a/doc.json b/doc.json
index 09f52b7e06ae4de9248b7a398253102959871f4a..bcc6eee0f2c51668af0debbb8b7fc2f6f563f68b 100644
--- a/doc.json
+++ b/doc.json
@@ -1,18 +1,19 @@
 {
   "v4": {
-    "remoteUrl": "https://git.nullivex.com/nullivex/kado/tree/master/",
-    "remoteBaseUrl": "https://git.nullivex.com/nullivex/kado/blob/master",
-    "remoteRawUrl": "https://git.nullivex.com/nullivex/kado/raw/master",
+    "remoteUrl": "https://git.nullivex.com/kado/kado/tree/master/",
+    "remoteBaseUrl": "https://git.nullivex.com/kado/kado/blob/master",
+    "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master",
     "latest": true,
     "article": {
       "kado-4-released": "/doc/article/Kado4Released.md",
+      "kado-4.2-released": "/doc/article/Kado4.2Released.md",
       "thesis": "/doc/article/Thesis.md",
       "upgrading-from-kado-3": "/doc/article/UpgradingFromKado3.md"
     },
     "doc": {
       "application": "/doc/Application.md",
-      "asset": "/doc/Asset.md",
       "assert": "/doc/Assert.md",
+      "asset": "/doc/Asset.md",
       "child-process": "/doc/ChildProcess.md",
       "cluster": "/doc/Cluster.md",
       "command": "/doc/Command.md",
@@ -36,13 +37,18 @@
       "mapper": "/doc/Mapper.md",
       "message": "/doc/Message.md",
       "mime": "/doc/Mime.md",
+      "model": "/doc/Model.md",
       "module": "/doc/Module.md",
+      "mustache": "/doc/Mustache.md",
       "navigation": "/doc/Navigation.md",
       "parser": "/doc/Parser.md",
       "path-exp": "/doc/PathExp.md",
       "permission": "/doc/Permission.md",
       "profiler": "/doc/Profiler.md",
+      "query": "/doc/Query.md",
+      "query-cache": "/doc/QueryCache.md",
       "router": "/doc/Router.md",
+      "schema": "/doc/Schema.md",
       "search": "/doc/Search.md",
       "session": "/doc/Session.md",
       "test-runner": "/doc/TestRunner.md",
@@ -51,11 +57,11 @@
       "view": "/doc/View.md"
     },
     "guide": {
-      "advanced-techniques": "/doc/guide/AdvancedTechniques.md",
       "build-admin-panel": "/doc/guide/BuildAdminPanel.md",
       "database-work-flow": "/doc/guide/DatabaseWorkFlow.md",
       "getting-started": "/doc/guide/GettingStarted.md",
       "hello-world": "/doc/guide/HelloWorld.md",
+      "introduction": "/doc/guide/Introduction.md",
       "make-simple-website": "/doc/guide/MakeSimpleWebsite.md",
       "quick-start": "/doc/guide/QuickStart.md",
       "views-rendering": "/doc/guide/ViewsRendering.md",
diff --git a/main/views/api.html b/main/views/api.html
index 7a45e5f85b91cf416a2f090604f4c69886a5b7e2..bbf62132ec63cb6bdb1518703856e20e6cdb747d 100644
--- a/main/views/api.html
+++ b/main/views/api.html
@@ -1,6 +1,7 @@
 {{#docVersion.v4}}
   <h3>Articles</h3>
   <ul class="list-simple">
+    <li><a href="/article/kado-4.2-released/">Kado 4.2 Released</a></li>
     <li><a href="/article/kado-4-released/">Kado 4 Released</a></li>
     <li><a href="/article/upgrading-from-kado-3/">Upgrading from Kado 3</a></li>
   </ul>
@@ -13,13 +14,13 @@
     <li><a href="/guide/database-work-flow/">Database Work Flows</a></li>
     <li><a href="/guide/working-with-email/">Working with Email</a></li>
     <li><a href="/guide/views-rendering/">Views and Rendering</a></li>
-    <li><a href="/guide/advanced-techniques/">Advanced Techniques</a></li>
+    <li><a href="/guide/writing-tests/">Writing Tests</a></li>
   </ul>
   <h3>API</h3>
   <ul class="list-simple">
     <li><a href="/doc/application/">Application</a></li>
-    <li><a href="/doc/asset/">Asset</a></li>
     <li><a href="/doc/assert/">Assert</a></li>
+    <li><a href="/doc/asset/">Asset</a></li>
     <li><a href="/doc/child-process/">ChildProcess</a></li>
     <li><a href="/doc/cluster/">Cluster</a></li>
     <li><a href="/doc/command/">Command</a></li>
@@ -41,15 +42,20 @@
     <li><a href="/doc/lifecycle/">Lifecycle</a></li>
     <li><a href="/doc/log/">Log</a></li>
     <li><a href="/doc/mapper/">Mapper</a></li>
-    <li><a href="/doc/mime/">Mime</a></li>
     <li><a href="/doc/message/">Message</a></li>
+    <li><a href="/doc/mime/">Mime</a></li>
+    <li><a href="/doc/model/">Model</a></li>
     <li><a href="/doc/module/">Module</a></li>
+    <li><a href="/doc/mustache/">Mustache</a></li>
     <li><a href="/doc/navigation/">Navigation</a></li>
     <li><a href="/doc/parser/">Parser</a></li>
     <li><a href="/doc/path-exp/">PathExp</a></li>
     <li><a href="/doc/permission/">Permission</a></li>
     <li><a href="/doc/profiler/">Profiler</a></li>
+    <li><a href="/doc/query/">Query</a></li>
+    <li><a href="/doc/query-cache/">QueryCache</a></li>
     <li><a href="/doc/router/">Router</a></li>
+    <li><a href="/doc/schema/">Schema</a></li>
     <li><a href="/doc/search/">Search</a></li>
     <li><a href="/doc/session/">Session</a></li>
     <li><a href="/doc/test-runner/">TestRunner</a></li>
diff --git a/main/views/article/4/kado-4-released.html b/main/views/article/4/kado-4-released.html
index 733992a4d4ea854a90de4f95bfc428c891ebba9e..d660ea16e16df13511b2d32c96a8a8979513965f 100644
--- a/main/views/article/4/kado-4-released.html
+++ b/main/views/article/4/kado-4-released.html
@@ -26,8 +26,8 @@ the <strong>Guides</strong> section at the left. The guides link together to for
 by step introduction into using Kado 4 in your application.</p>
 <h2 id="builtintesting">Built in Testing</h2>
 <p>Kado 4 is proud to announce the ability to write and run tests directly using
-the included <a href="../TestRunner.md">TestRunner</a> library. Also see the
-<a href="../guide/WritingTests.md">Writing Tests</a> guide to gain more understanding
+the included <a href="/doc/test-runner/">TestRunner</a> library. Also see the
+<a href="/guide/writing-tests/">Writing Tests</a> guide to gain more understanding
 on constructing test suites.</p>
 <h2 id="opendevelopmentwithgitlab">Open Development with Gitlab</h2>
 <p>All our coding is done openly on <a href="https://git.nullivex.com/kado/kado">Gitlab</a>
diff --git a/main/views/article/4/kado-4.2-released.html b/main/views/article/4/kado-4.2-released.html
new file mode 100644
index 0000000000000000000000000000000000000000..35078541f18dbd150d4438615fa9e70a791d3f67
--- /dev/null
+++ b/main/views/article/4/kado-4.2-released.html
@@ -0,0 +1,32 @@
+<h1 id="kado42released">Kado 4.2 Released</h1>
+<p><em>By Bryan Tong 4/15/20</em></p>
+<p>Our new release of Kado has been in development for a little over one month.
+However, it feels like we have done years of work! This release is jam packed
+with essentials for creating Websites, API Servers, CLI applications and
+whatever else you might imagine. Chances are you can probably build it with
+Kado 4.2.</p>
+<p>Here is an overview of the primary additions:</p>
+<ul>
+<li>Add new Model.js for creating and working with Database records.</li>
+<li>Add new Mustache.js for string templating.</li>
+<li>Add new MySQL database engine.</li>
+<li>Add new Query.js for building queries for databases.</li>
+<li>Add new QueryCache.js for caching queries from a database in a database.</li>
+<li>Add new Schema.js for building tables for databases.</li>
+<li>Validate.isType upgraded to be more consistent and predictable.</li>
+<li>Parser adds <code>requestBody</code> parser to assist with input decoding.</li>
+<li>Router adds <code>res.json()</code> for JSON output.</li>
+<li>Router adds <code>res.redirect()</code> for location changes.</li>
+<li>Router adds <code>res.sendFile()</code> for sending files.</li>
+<li>Session adds <code>SessionStoreSQL</code> for SQL backed sessions from databases.
+Add <code>HyperText.Proxy</code> to HyperText.js which provides an HTTP reverse proxy.</li>
+</ul>
+<p>There are more! See our <a href="/info/changelog/">CHANGELOG</a></p>
+<p>As our team continues to build new applications on Kado 4 we are continuously
+evaluating and engineering the development of Kado. This means we use Kado every
+day on our own projects and work diligently to improve developer efficiency. We
+also believe all these factors combined make Kado "fun" to develop against.</p>
+<p>That is all for the hype, now get out there and see what Kado 4.2 can do for
+you!</p>
+<p>Sincerely,</p>
+<p>The Kado Team</p>
\ No newline at end of file
diff --git a/main/views/article/4/upgrading-from-kado-3.html b/main/views/article/4/upgrading-from-kado-3.html
index 632eca03ecf4af9dc1e088fd21ea045814967437..cbf3a45955174408b17a084e15ce9399d23cc543 100644
--- a/main/views/article/4/upgrading-from-kado-3.html
+++ b/main/views/article/4/upgrading-from-kado-3.html
@@ -13,7 +13,7 @@ release of Kado version 3. Please keep in mind there will be no more Kado 3
 releases on NPM. Now on with the upgrade notes.</p>
 <p>Kado 4 is a major improvement over Kado 3 and you will not find many
 similarities between the two. Kado 4 is an entirely new approach to solving
-the problem originally presented in our <a href="./Thesis.md">Thesis</a>. We have looked
+the problem originally presented in our <a href="/article/thesis/">Thesis</a>. We have looked
 backwards into how to write high quality libraries that are used for C++ and
 other languages. Afterwards, we came to a new conclusion on how the Kado
 functionality should be presented to the end user.</p>
diff --git a/main/views/doc/3/command-line-interface.html b/main/views/doc/3/command-line-interface.html
index 0e3c4ac34231d852512cc4ace47e55a3f99dc209..b9102e3dcd1cd4203aff84639daa0fac692bc3be 100644
--- a/main/views/doc/3/command-line-interface.html
+++ b/main/views/doc/3/command-line-interface.html
@@ -54,7 +54,7 @@ lot easier to see Kado up and running.</p>
 <pre><code>$ node app kado generate
 </code></pre>
 <p>Create a new module within your Kado application see
-<a href="./Module.md">Module Guide</a> for more information. |</p>
+<a href="/doc/module/">Module Guide</a> for more information. |</p>
 <pre><code>$ node app staff create --email sample@kado.org --password sample --name Kado
 </code></pre>
 <p>Create a new staff member with the email <code>sample@kado.org</code> password <code>sample</code> and
diff --git a/main/views/doc/3/module.html b/main/views/doc/3/module.html
index d73d458a8e38b440d854e645c8b5e267b3a0eec3..6bf92bbd967b615e6cf7a5fa575d475205ab4ee6 100644
--- a/main/views/doc/3/module.html
+++ b/main/views/doc/3/module.html
@@ -9,8 +9,8 @@ It all starts with a module generator that will ask questions and then create a
 working module for you to edit into perfection.</p>
 <h2 id="modulecreation">Module Creation</h2>
 <p>To create a module first create an app by either
-<a href="./InstallTheDemo.md">installing the demo</a> or by following the
-<a href="./GettingStarted.md">getting-started</a> guide. Once complete, issue the following
+<a href="/guide/install-the-demo/">installing the demo</a> or by following the
+<a href="/guide/getting-started/">getting-started</a> guide. Once complete, issue the following
 command to start the module generation process.</p>
 <pre><code>$ node app kado generate
 </code></pre>
diff --git a/main/views/doc/4/assert.html b/main/views/doc/4/assert.html
index 47ca593fa7384e5d66d4e4435197a9b4378b3566..29f9cecddbe80fdd3e57f7cd898354991908749a 100644
--- a/main/views/doc/4/assert.html
+++ b/main/views/doc/4/assert.html
@@ -55,7 +55,7 @@ return boolean <code>true</code> or throw.</p>
 </ul>
 <h3 id="assertbelowceiling"><code>Assert.below(ceiling)</code></h3>
 <ul>
-<li><code>ceiling</code> {number} value for upper limit </li>
+<li><code>ceiling</code> {number} value for upper limit</li>
 <li>Returns: {boolean} <code>true</code> when below the <code>ceiling</code></li>
 </ul>
 <h3 id="assertequalagainst"><code>Assert.equal(against)</code></h3>
@@ -190,7 +190,7 @@ than provided milliseconds to be considered valid.</p>
 </ul>
 <h3 id="staticassertcatchv1v2msgmethod"><code>static Assert.catch(v1, v2, msg, method)</code></h3>
 <ul>
-<li><code>v1</code> {mixed} first argument to <code>method</code> </li>
+<li><code>v1</code> {mixed} first argument to <code>method</code></li>
 <li><code>v2</code> {mixed} second argument to <code>method</code></li>
 <li><code>msg</code> {mixed} compare this to <code>Error.message</code> when caught.</li>
 <li><code>method</code> {string} class method to execute in try/catch</li>
diff --git a/main/views/doc/4/cluster.html b/main/views/doc/4/cluster.html
index c4fd046b090da761147e3a63b08e3f2994e1be38..c77661d6dba4c98fced19aec429c983a2fe3cbf2 100644
--- a/main/views/doc/4/cluster.html
+++ b/main/views/doc/4/cluster.html
@@ -99,10 +99,64 @@ process.</p>
 <li><code>options</code> {object} Runtime options to configure the cluster</li>
 <li>Return {Cluster} new cluster management object</li>
 </ul>
-<h3 id="clusterismaster">Cluster.isMaster()</h3>
-<ul>
+<p>Available Options:</p>
+<ul>
+<li><code>count</code> {number} the number of workers to start
+NOTE: By default the system will start 1 worker during development and will
+automatically grow to all available CPUs + 1 in production. This is controlled
+with the environment variable <code>NODE_ENV=production</code>. To change to manual
+behavior simply pass any number to the <code>count</code> option.</li>
+<li><code>delayHeartbeat</code> {number} how many ms before each heartbeat check,
+default: 5000</li>
+<li><code>delayRespawn</code> {number} how many ms before respawning a failed process,
+default: 1000</li>
+<li><code>disableMaster</code> {boolean} disable the master process and force single user
+mode.</li>
+<li><code>silent</code> {boolean} Control output to parent's stdio.
+Default: false</li>
+<li><code>maxConnections</code> {number} When workers serve more than this many connections
+they automatically respawn. 0 is the default which is OFF.</li>
+<li><code>recycleTimeout</code> {number} Time in ms before forcibly killing a worker being
+recycled. Default is <code>null</code> which is no timeout.</li>
+<li><code>stopTimeout</code> {number} Time in ms before forcibly killing a worker to
+stop the application. Default is <code>5000</code></li>
+<li><code>respawnTimeout</code> {number} Time in ms to wait for a respawned process to come
+online, default is <code>5000</code></li>
+<li><code>startTimeout</code> {number} Time in ms to wait for a process to start on
+application start. Default is <code>5000</code></li>
+<li><code>watchTimeout</code> {number} The time to wait before restarting on a watched
+file change. Default is <code>5000</code></li>
+<li><code>path</code> {string} The path to the worker program file. By default it calls back
+into itself. Use an if statement to separate master from worker.</li>
+<li><code>cluster</code> {object} Any of the settings from <a href="https://nodejs.org/dist/latest-v13.x/docs/api/cluster.html#cluster_cluster_settings">cluster settings</a></li>
+</ul>
+<h3 id="clusterismasteroptions">Cluster.isMaster(options)</h3>
+<ul>
+<li><code>options</code> {Object} containing options about the isMaster check.</li>
 <li>Return {boolean} <code>true</code> when this process is the master</li>
 </ul>
+<p>Available Options</p>
+<ul>
+<li><code>maxArguments</code> {number} the maximum length of <code>process.argv</code> to enable cluster
+support. When <code>process.argv</code> has more arguments than <code>maxArguments</code> {boolean}
+<code>false</code> is returned which should trigger single worker mode in standard setups
+and cause the command to be executed within the original process. This results
+in a lean single process CLI applet by using a single check on the argv length.</li>
+</ul>
+<p>NOTE: This will always return false when <code>disableMaster</code> is set to true which
+enables single process mode.</p>
+<p>Example Usage for Development:</p>
+<pre><code class="js language-js"><span class="hljs-keyword">const</span> <span class="hljs-keyword">Cluster</span> = require('kado/lib/<span class="hljs-keyword">Cluster</span>')
+<span class="hljs-keyword">const</span> <span class="hljs-keyword">cluster</span> = <span class="hljs-keyword">Cluster</span>.getInstance()
+<span class="hljs-keyword">if</span> (<span class="hljs-keyword">cluster</span>.isMaster()) {
+ <span class="hljs-comment">// watch files, set process title, start other children</span>
+} <span class="hljs-keyword">else</span> {
+  <span class="hljs-comment">// worker operations, listening routing, cli processing etc</span>
+}
+</code></pre>
+<p>The above code provides a single process system in development and a fully
+concurrent ready for load system in production. The scaling in this example is
+fully automatic.</p>
 <h3 id="clusterisworker">Cluster.isWorker()</h3>
 <ul>
 <li>Return {boolean} <code>true</code> when this process is the worker</li>
diff --git a/main/views/doc/4/command-server.html b/main/views/doc/4/command-server.html
index 70a1cae61c8e803629a1e307c0df3ea795c3ccba..ee2710552632048958cbbe869b20faec3de5ed1f 100644
--- a/main/views/doc/4/command-server.html
+++ b/main/views/doc/4/command-server.html
@@ -54,7 +54,7 @@ Return {string} name of the command requested for removal.</li>
 <li>Return {string} name of the command added.</li>
 </ul>
 <p>This actually uses the <code>Command</code> library to setup the new command
-based on te options and is a shortcut for.</p>
+based on the options and is a shortcut for.</p>
 <pre><code class="js language-js"><span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">CommandSerer</span>.</span></span>add<span class="hljs-constructor">Command('<span class="hljs-params">someModule</span>','<span class="hljs-params">someCommand</span>',<span class="hljs-params">new</span> Command()</span>)
 </code></pre>
 <h3 id="commandserverruncommand">CommandServer.run(command)</h3>
diff --git a/main/views/doc/4/command.html b/main/views/doc/4/command.html
index 2c8ed12c17b447ccc4c2acad4989614653b7cf43..a2220944df70edd505d9ba161b778b970472397e 100644
--- a/main/views/doc/4/command.html
+++ b/main/views/doc/4/command.html
@@ -10,16 +10,16 @@ through the <code>parse()</code> method.</p>
 </code></pre>
 <h2 id="classcommand">Class Command</h2>
 <p>This class is a super class that is extended by the command section
-within the <code>kado-ui</code> core object. Let us take a look at that usage snippet.</p>
+within the <code>Application</code> core object. Let us take a look at that usage snippet.</p>
 <pre><code class="js language-js">const <span class="hljs-type">CommandSuper</span> = require('./<span class="hljs-type">Command</span>')
 <span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Command</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">CommandSuper</span> </span>{
-  constructor(){
+  constructor () {
     <span class="hljs-keyword">super</span>()
     <span class="hljs-keyword">this</span>.name = name
     <span class="hljs-keyword">this</span>.options = options
     <span class="hljs-keyword">this</span>.version = that.version
   }
-  action(opts){
+  action (opts) {
     <span class="hljs-keyword">return</span> options.action.call(<span class="hljs-keyword">this</span>,opts)
   }
 }
@@ -35,9 +35,9 @@ which could be defined in a number of ways.</p>
 <pre><code class="js language-js">const <span class="hljs-keyword">options</span> = {
   <span class="hljs-keyword">description</span>: <span class="hljs-string">'Some command description'</span>,
   <span class="hljs-keyword">options</span>: [
-    {definition: <span class="hljs-string">'-s, --something &lt;s&gt;'</span>, <span class="hljs-keyword">description</span>: <span class="hljs-string">'Some thing'</span>}
+    { definition: <span class="hljs-string">'-s, --something &lt;s&gt;'</span>, <span class="hljs-keyword">description</span>: <span class="hljs-string">'Some thing'</span> }
   ],
-  action: (opts)=&gt;{
+  action: (opts) =&gt; {
     <span class="hljs-keyword">return</span> Promise.resolve(opts)
   }
 }
diff --git a/main/views/doc/4/database.html b/main/views/doc/4/database.html
index a633e26bb73dba80a2763d89fef891d6c75ad04d..ebb813771701adbc9296b2de500024de20a4ea12 100644
--- a/main/views/doc/4/database.html
+++ b/main/views/doc/4/database.html
@@ -8,7 +8,7 @@
 <p>This library manages Database connections that are stored through
 instances registered to this library.</p>
 <h2 id="classdatabase">Class: Database</h2>
-<p><code>Database</code> extends <code>Connect</code> see <a href="./Connect.md">Connect.md</a> for more engine
+<p><code>Database</code> extends <code>Connect</code> see <a href="/doc/connect/">Connect.md</a> for more engine
 management and more.</p>
 <h3 id="staticdatabasequeryoptionsconfigprofiler">static Database.queryOptions(config, profiler)</h3>
 <ul>
@@ -45,9 +45,32 @@ connections <code>connect()</code> method.</li>
 <p>Note: when no <code>name</code> is provided all connections will be closed.</p>
 <h2 id="classdatabaseengine">Class: DatabaseEngine</h2>
 <p><code>DatabaseEngine</code> extends <code>ConnectEngine</code> see
-<a href="./ConnectEngine.md">ConnectEngine.md</a> for more engine management and more.</p>
+<a href="/doc/connect-engine/">ConnectEngine.md</a> for more engine management and more.</p>
 <h3 id="databaseengineconnect">DatabaseEngine.connect()</h3>
 <p>Must be extended and used to connect to underlying database.</p>
 <h3 id="databaseengineclose">DatabaseEngine.close()</h3>
 <p>By default will try and call <code>engine.close()</code> and then call
-<code>ConnectEngine.resetEngine()</code>. Which should be sufficient for most underlays.</p>
\ No newline at end of file
+<code>ConnectEngine.resetEngine()</code>. Which should be sufficient for most underlays.</p>
+<h2 id="classdatabasemysql">Class: DatabaseMySQL</h2>
+<p><code>DatabaseMySQL</code> extends <code>DatabaseEngine</code> extends <code>ConnectEngine</code> and implements
+a relationship with the JavaScript <code>mysql2</code> driver available on NPM and Github.</p>
+<p>See the <a href="https://github.com/sidorares/node-mysql2">mysql2 package</a></p>
+<p>To use this engine it should be required at application startup. Example:</p>
+<pre><code class="js language-js"><span class="hljs-keyword">const</span> app = <span class="hljs-built_in">require</span>(<span class="hljs-string">'kado'</span>).getInstance()
+<span class="hljs-keyword">const</span> MySQL = <span class="hljs-built_in">require</span>(<span class="hljs-string">'kado/lib/Database'</span>).MySQL
+<span class="hljs-keyword">const</span> mysqlConfig = { <span class="hljs-attr">host</span>: <span class="hljs-string">'localhost'</span>, <span class="hljs-attr">user</span>: <span class="hljs-string">'test'</span>, <span class="hljs-attr">database</span>: <span class="hljs-string">'test'</span> }
+app.database.addEngine(<span class="hljs-string">'mysql'</span>, <span class="hljs-keyword">new</span> MySQL(mysqlConfig))
+</code></pre>
+<h3 id="databasemysqlconstructoroptions">DatabaseMySQL.constructor(options)</h3>
+<ul>
+<li><code>options</code> {Object} containing connection options.</li>
+<li>Return {DatabaseMySQL} new driver instance ready to be passed to the
+<code>app.database.addEngine()</code> call.</li>
+</ul>
+<p>The currently supported options are:</p>
+<ul>
+<li><code>host</code> {string} hostname of the database server, default <code>localhost</code></li>
+<li><code>user</code> {string} the username used to identify the connection</li>
+<li><code>password</code> {string} the password used to authenticate the connection</li>
+<li><code>database</code> {string} the database desired to select after connecting</li>
+</ul>
\ No newline at end of file
diff --git a/main/views/doc/4/email.html b/main/views/doc/4/email.html
index f78079583e99b49943c131d1ecd8fbf78fc67858..d5f94ba570e5e375f3798b867559413c6f056f69 100644
--- a/main/views/doc/4/email.html
+++ b/main/views/doc/4/email.html
@@ -8,7 +8,7 @@
 <p>This library provides a register for Email handlers to register and receive
 email messages through the system.</p>
 <h2 id="classemail">Class: Email</h2>
-<p><code>Email</code> extends <code>Connect</code> see <a href="./Connect.md">Connect.md</a> for more engine
+<p><code>Email</code> extends <code>Connect</code> see <a href="/doc/connect/">Connect.md</a> for more engine
 management and more.</p>
 <h3 id="staticemailgetinstance">static Email.getInstance()</h3>
 <ul>
@@ -27,6 +27,6 @@ Return {Promise} that resolves when the message is sent.</li>
 <p>Note: when no <code>name</code> is provided all handlers are executed.</p>
 <h2 id="classemailengine">Class: EmailEngine</h2>
 <p><code>EmailEngine</code> extends <code>ConnectEngine</code> see
-<a href="./ConnectEngine.md">ConnectEngine.md</a> for more engine management and more.</p>
+<a href="/doc/connect-engine/">ConnectEngine.md</a> for more engine management and more.</p>
 <h3 id="emailenginesend">EmailEngine.send()</h3>
 <p>Must be extended and used to send to underlying email system.</p>
\ No newline at end of file
diff --git a/main/views/doc/4/event.html b/main/views/doc/4/event.html
index 817ec3ccb991fbd0b99be102d13e77418e6ae1ac..ea0171904fa1f4562fe95a9e709a9d03e27ef225 100644
--- a/main/views/doc/4/event.html
+++ b/main/views/doc/4/event.html
@@ -12,7 +12,7 @@ used for tracking user behavior such as database changes etc.</p>
 <p>Note: This is not to be confused with the core Node.JS <code>EventEmitter</code> which
 serves a much different programmable purpose.</p>
 <h2 id="classevent">Class: Event</h2>
-<p><code>Event</code> extends <code>Connect</code> see <a href="./Connect.md">Connect.md</a> for more engine
+<p><code>Event</code> extends <code>Connect</code> see <a href="/doc/connect/">Connect.md</a> for more engine
 management and more.</p>
 <h3 id="staticeventgetinstance">static Event.getInstance()</h3>
 <ul>
@@ -98,6 +98,6 @@ handler can read.</li>
 </ul>
 <h2 id="classeventengine">Class: EventEngine</h2>
 <p><code>EventEngine</code> extends <code>ConnectEngine</code> see
-<a href="./ConnectEngine.md">ConnectEngine.md</a> for more engine management and more.</p>
+<a href="/doc/connect-engine/">ConnectEngine.md</a> for more engine management and more.</p>
 <h3 id="eventengineevent">EventEngine.event()</h3>
 <p>Must be extended and used to send to underlying event system.</p>
\ No newline at end of file
diff --git a/main/views/doc/4/hyper-text.html b/main/views/doc/4/hyper-text.html
index 0dbeb0f16ddd7aa0e8e7d2da4be83d7a28e60420..dd335cf32aade3b480c249f397792c69f874de96 100644
--- a/main/views/doc/4/hyper-text.html
+++ b/main/views/doc/4/hyper-text.html
@@ -11,7 +11,7 @@ within the system.</p>
 <p>There is a <code>HyperTextEngine</code> library that provides the needed implementation to
 setup traditional web servers into this abstraction layer.</p>
 <h2 id="classhypertext">Class: HyperText</h2>
-<p><code>HyperText</code> extends <code>Connect</code> see <a href="./Connect.md">Connect.md</a> for more engine
+<p><code>HyperText</code> extends <code>Connect</code> see <a href="/doc/connect/">Connect.md</a> for more engine
 management and more.</p>
 <h3 id="statichypertextgetinstance">static HyperText.getInstance()</h3>
 <ul>
@@ -29,7 +29,7 @@ management and more.</p>
 </ul>
 <h2 id="classhypertextengine">Class: HyperTextEngine</h2>
 <p><code>HyperTextEngine</code> extends <code>ConnectEngine</code> see
-<a href="./ConnectEngine.md">ConnectEngine.md</a> for more engine management and more.</p>
+<a href="/doc/connect-engine/">ConnectEngine.md</a> for more engine management and more.</p>
 <h3 id="hypertextenginestart">HyperTextEngine.start()</h3>
 <p>Must be extended and used to start the underlying server.</p>
 <h3 id="hypertextenginestop">HyperTextEngine.stop()</h3>
@@ -51,8 +51,8 @@ HTTP web server for use with <code>Application</code></p>
 </ul>
 <h3 id="hypertextserversethosthost">HyperTextServer.setHost(host)</h3>
 <ul>
-<li><code>host</code> {string} or <code>null</code>, host to listen on such as <code>localhost</code> or
-<code>127.0.0.1</code>.</li>
+<li><code>host</code> {string|Array} or <code>null</code>, host to listen on such as <code>localhost</code> or
+<code>127.0.0.1</code>. When an array of hosts is given, each on will be listened on.</li>
 <li>Return {HyperTextServer} this instance</li>
 </ul>
 <h3 id="hypertextserversetportport">HyperTextServer.setPort(port)</h3>
@@ -121,4 +121,22 @@ an instance of <code>StaticServer</code> instantiated with <code>root</code> and
 <li><code>res</code> {Response} An HTTP Response object.</li>
 <li>Return {Promise} resolved when either a file is found or the stack should
 continue.</li>
+</ul>
+<h2 id="classproxy">Class: Proxy</h2>
+<h3 id="staticproxypassreqresoptions">static Proxy.pass(req, res, options)</h3>
+<ul>
+<li><code>req</code> {IncomingMessage} request object from an HTTP(s) request</li>
+<li><code>res</code> {ServerResponse} response object from an HTTP(s) request</li>
+<li><code>options</code> {Object} options controlling the proxy request</li>
+<li>Return {Promise} resolved when request is handled.</li>
+</ul>
+<p>Available options:</p>
+<ul>
+<li><code>host</code> {string} the hostname or IP address to request from</li>
+<li><code>port</code> {string} the port of the host to connect to</li>
+<li><code>ssl</code> {boolean} enable HTTPS requests</li>
+<li><code>rejectUnauthorized</code> {boolean} set <code>true</code> to trust invalid SSL hosts.</li>
+<li><code>referrer</code> {string} A referrer to pass, otherwise uses <code>req.referer</code></li>
+<li><code>method</code> {string} The type of request to make defaults to <code>req.method</code></li>
+<li><code>maxRedirects</code> {number} Maximum times to follow redirects, default: 8</li>
 </ul>
\ No newline at end of file
diff --git a/main/views/doc/4/log.html b/main/views/doc/4/log.html
index d29b0ec9a9f4ebd8bc5cd120eb9c977f531ef59b..bf561bb5c80d9d7ae904285ee22150eb92b46dd0 100644
--- a/main/views/doc/4/log.html
+++ b/main/views/doc/4/log.html
@@ -8,7 +8,7 @@
 <p>This library provides logging abstraction to use different log transports
 for system level log messages.</p>
 <h2 id="classlog">Class: Log</h2>
-<p><code>Log</code> extends <code>Connect</code> see <a href="./Connect.md">Connect.md</a> for more engine
+<p><code>Log</code> extends <code>Connect</code> see <a href="/doc/connect/">Connect.md</a> for more engine
 management and more.</p>
 <h3 id="staticlogappendfilepathdata">static Log.appendFile(path, data)</h3>
 <ul>
@@ -32,4 +32,4 @@ management and more.</p>
 </ul>
 <h2 id="classlogengine">Class: LogEngine</h2>
 <p><code>LogEngine</code> extends <code>ConnectEngine</code> see
-<a href="./ConnectEngine.md">ConnectEngine.md</a> for more engine management and more.</p>
\ No newline at end of file
+<a href="/doc/connect-engine/">ConnectEngine.md</a> for more engine management and more.</p>
\ No newline at end of file
diff --git a/main/views/doc/4/message.html b/main/views/doc/4/message.html
index c2ca76024d0da5230482e7a0fe464c3a7da35000..8045b63b5dfb33560e932129c9e58ec3ef06c7f7 100644
--- a/main/views/doc/4/message.html
+++ b/main/views/doc/4/message.html
@@ -8,7 +8,7 @@
 <p>This library provides a register for Message handlers that may register to both
 send and receive messages through the system.</p>
 <h2 id="classmessage">Class: Message</h2>
-<p><code>Message</code> extends <code>Connect</code> see <a href="./Connect.md">Connect.md</a> for more engine
+<p><code>Message</code> extends <code>Connect</code> see <a href="/doc/connect/">Connect.md</a> for more engine
 management and more.</p>
 <h3 id="staticmessagegetinstance">static Message.getInstance()</h3>
 <ul>
@@ -27,6 +27,6 @@ Return {Promise} that resolves when the message is sent.</li>
 <p>Note: when no <code>name</code> is provided all handlers are executed.</p>
 <h2 id="classmessageengine">Class: MessageEngine</h2>
 <p><code>MessageEngine</code> extends <code>ConnectEngine</code> see
-<a href="./ConnectEngine.md">ConnectEngine.md</a> for more engine management and more.</p>
+<a href="/doc/connect-engine/">ConnectEngine.md</a> for more engine management and more.</p>
 <h3 id="messageenginesend">MessageEngine.send()</h3>
 <p>Must be extended and used to send to underlying message system.</p>
\ No newline at end of file
diff --git a/main/views/doc/4/model.html b/main/views/doc/4/model.html
new file mode 100644
index 0000000000000000000000000000000000000000..a0361c14e6afe84aaf5650a6b247e26546d08ef6
--- /dev/null
+++ b/main/views/doc/4/model.html
@@ -0,0 +1,82 @@
+<h1 id="model">Model</h1>
+<p><em>Introduced in 4.2.0</em></p>
+<blockquote>
+  <p>Stability: 1 - Experimental</p>
+</blockquote>
+<pre><code class="js language-js"><span class="hljs-variable">const</span> <span class="hljs-variable">Model</span> = <span class="hljs-function"><span class="hljs-title">require</span>(<span class="hljs-string">'kado/lib/Model'</span>)</span>
+</code></pre>
+<p>The <code>Model</code> is a super class made for building new data models used for
+interacting with data sets produced by data queries.</p>
+<p>By default the <code>Model</code> class is a dry extension of the <code>Mapper</code> library provides
+the data access and writing methods needed for a data model. Specific methods
+should be then added to the model. Queries shall be <code>static</code> while operations on
+a record should be <code>methods</code> of the model.</p>
+<p>Example Model</p>
+<pre><code class="js language-js">const <span class="hljs-type">Model</span> = require(<span class="hljs-symbol">'kado</span>/lib/<span class="hljs-type">Model</span>')
+<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">MyModel</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Model</span> </span>{
+  static getData () { <span class="hljs-keyword">return</span> [{ test: <span class="hljs-symbol">'tes</span>t' }] }
+  print () { console.log(`${<span class="hljs-keyword">this</span>.test} is working`)}
+}
+</code></pre>
+<h2 id="classmodel">Class: Model</h2>
+<p>This is the <code>Model</code> class which extends <code>Mapper</code>.</p>
+<h3 id="staticmodelbyidquerytableidfieldsidfield">static Model.byIdQuery(table, id, fields, idField)</h3>
+<ul>
+<li><code>table</code> {string} literal name of the table to select from</li>
+<li><code>id</code> {string|number} the id of the record to be selected</li>
+<li><code>fields</code> {array|null} a list of fields to select default is null or <code>*</code></li>
+<li><code>idField</code> {string|undefined} if the field is called something other than <code>id</code>
+it should be passed here.</li>
+<li>Return {QuerySQL} query ready for use with database driver.</li>
+</ul>
+<h3 id="staticmodeldeletequerytable">static Model.deleteQuery(table)</h3>
+<ul>
+<li><code>table</code> {string} literal name of the table to delete from</li>
+<li>Return {QuerySQL} query ready for predicates and execution.</li>
+</ul>
+<h3 id="staticmodelfilterfieldsfieldsoptions">static Model.filterFields(fields, options)</h3>
+<ul>
+<li><code>fields</code> {object} fieldList defined in model</li>
+<li><code>options</code> {object} what fields to filter from the list</li>
+</ul>
+<p>Available Options</p>
+<ul>
+<li><code>insert</code> {boolean} when false fields with insert set to <code>false</code> are skipped</li>
+<li><code>writable</code> {boolean} when false fields with writable set to <code>false</code> are skipped</li>
+</ul>
+<h3 id="staticmodelinsertquerytablefields">static Model.insertQuery(table, fields)</h3>
+<ul>
+<li><code>table</code> {string} literal name of the table to delete from</li>
+<li><code>fields</code>{array} list of fields to insert</li>
+</ul>
+<h3 id="staticmodellistquerytable">static Model.listQuery(table)</h3>
+<ul>
+<li><code>table</code> {string} literal name of the table to delete from</li>
+</ul>
+<h3 id="staticasyncmodelsavemodeldbidfieldsdata">static async Model.save(Model, db, id, fields, data)</h3>
+<ul>
+<li><code>Model</code> {Model} instance of a model to use for saving</li>
+<li><code>db</code> {MySQL2} database connection</li>
+<li><code>id</code> {number|string} id of the record, can be null for new</li>
+<li><code>fields</code> {array} list of fields to insert</li>
+<li><code>data</code> {object} containing fieldNames and values</li>
+<li><code>idField</code> {string} if the primary key is not <code>id</code> pass the name here</li>
+<li>Return {Promise} that is resolved with id of the record inserted or updated</li>
+</ul>
+<p>This method is used to save records to the database, it will handle updating
+records that already exist or creating records that dont exist. This is useful
+when creating administration functions that need to create / edit records.</p>
+<h3 id="staticmodelsearchquerytablephrasefields">static Model.searchQuery(table, phrase, fields)</h3>
+<ul>
+<li><code>table</code> {string} literal name of the table to delete from</li>
+<li><code>phrase</code> {string} the search phrase</li>
+<li><code>fields</code> {array} list of fields to select</li>
+<li>Return {QuerySQL} search query ready for predicates and execution</li>
+</ul>
+<h3 id="staticmodelupdatequerytablefields">static Model.updateQuery(table, fields)</h3>
+<ul>
+<li><code>table</code> {string} literal name of the table to delete from</li>
+<li><code>fields</code> {array} list of fields to update</li>
+<li>Return {QuerySQL} query needing values set and predicates added, then
+execution.</li>
+</ul>
\ No newline at end of file
diff --git a/main/views/doc/4/mustache.html b/main/views/doc/4/mustache.html
new file mode 100644
index 0000000000000000000000000000000000000000..fa3028f3c7839efba524c27642ebf6bf9c90fe89
--- /dev/null
+++ b/main/views/doc/4/mustache.html
@@ -0,0 +1,333 @@
+<h1 id="mustache">Mustache</h1>
+<p><em>Introduced in 4.2.0</em></p>
+<blockquote>
+  <p>Stability: 2 - Stable</p>
+</blockquote>
+<pre><code class="js language-js"><span class="hljs-variable">const</span> <span class="hljs-variable">Mustache</span> = <span class="hljs-function"><span class="hljs-title">require</span>(<span class="hljs-string">'kado/lib/Mustache'</span>)</span>
+</code></pre>
+<p>Mustache provides a logic-less templating system for use in providing any kind
+of text rendering.</p>
+<p>This code is based largely on the work done at <a href="https://github.com/janl/mustache.js">mustache.js</a>
+and many thanks go to <a href="https://github.com/janl">janl</a> for his hard work!</p>
+<h2 id="classmustache">Class: Mustache</h2>
+<p>This class works in two parts. First, by providing the traditional static
+interface to <code>parse</code> and <code>render</code>. Second, by creating an instance with special
+options such as custom tags and using the instance to <code>parse</code> and <code>render</code>
+templates.</p>
+<h3 id="staticmustacheparsetemplatetags">static Mustache.parse(template, tags)</h3>
+<ul>
+<li><code>template</code> {string} the actual template to parse</li>
+<li><code>tags</code> {array} optional set of tags eg <code>['{{', '}}']</code> which is the equivalent
+of the default tags.</li>
+<li>Return {Array} of parsed tokens from the template.</li>
+</ul>
+<p>Notes from the author</p>
+<pre><code>Parses and caches the given template in the default writer and returns the
+array of tokens it contains. Doing this ahead of time avoids the need to
+parse templates on the fly as they are rendered.
+</code></pre>
+<h3 id="staticmustacherendertemplateviewpartialstags">static Mustache.render(template, view, partials, tags)</h3>
+<ul>
+<li><code>template</code> {string} the actual template to render</li>
+<li><code>view</code> {object} parameters to replace tokens with in the template</li>
+<li><code>partials</code> {object} with names of partials and values containing the template
+for the partial.</li>
+<li><code>tags</code> {array} optional set of tags eg <code>['{{', '}}']</code> which is the equivalent
+of the default tags.</li>
+<li>Return {string} the rendered template ready to send to the destination.</li>
+</ul>
+<p>Notes from the author</p>
+<pre><code>Renders the `template` with the given `view` and `partials` using the
+default writer. If the optional `tags` argument is given here it must be an
+array with two string values: the opening and closing tags used in the
+template (e.g. [ "&lt;%", "%&gt;" ]). The default is to mustache.tags.
+</code></pre>
+<h3 id="staticmustachegetinstanceoptions">static Mustache.getInstance(options)</h3>
+<ul>
+<li><code>options</code> {object} Options to pass to the mustache instance.</li>
+<li>Return {Mustache} new instance of the mustache object with applied options.</li>
+</ul>
+<p>Available options:</p>
+<ul>
+<li><code>tags</code> {Array} tags to use when parsing and rendering templates.</li>
+</ul>
+<h3 id="mustacheparsetemplatetags">Mustache.parse(template, tags)</h3>
+<ul>
+<li><code>template</code> {string} the actual template to parse</li>
+<li><code>tags</code> {Array} optional one time tags to use on parse.</li>
+<li>Return {Array} of parsed tokens from the template.</li>
+</ul>
+<p>See the notes from <code>static Mustache.parse()</code> above.</p>
+<h3 id="mustacherendertemplateviewpartialstags">Mustache.render(template, view, partials, tags)</h3>
+<ul>
+<li><code>template</code> {string} the actual template to parse</li>
+<li><code>view</code> {object} parameters to replace tokens with in the template</li>
+<li><code>partials</code> {object} with names of partials and values containing the template
+for the partial.</li>
+<li><code>tags</code> {Array} optional one time tags to use on parse.</li>
+<li>Return {string} the rendered template ready to send to the destination.</li>
+</ul>
+<p>See the notes from <code>static Mustache.render()</code> above.</p>
+<h2 id="mustachemanual">Mustache Manual</h2>
+<p>This is a repeat of the known mustache manual for explanation purposes.</p>
+<h3 id="mustache5">Mustache(5)</h3>
+<div class='mp' id='man'>
+<ol class='man-decor man-head man head'>
+<li class='tl'>mustache(5)</li>
+<li class='tc'>Mustache Manual</li>
+<li class='tr'>mustache(5)</li>
+</ol>
+
+<h2 id="NAME">NAME</h2>
+<p class="man-name">
+<code>mustache</code> - <span class="man-whatis">Logic-less templates.</span>
+</p>
+
+<h2 id="SYNOPSIS">SYNOPSIS</h2>
+<p>A typical Mustache template:</p>
+<pre><code>Hello {{name}}
+You have just won {{value}} dollars!
+{{#in_ca}}
+Well, {{taxed_value}} dollars, after taxes.
+{{/in_ca}}
+</code></pre>
+<p>Given the following hash:</p>
+<pre><code>{
+"name": "Bryan",
+"value": 10000,
+"taxed_value": 10000 - (10000 * 0.4),
+"in_ca": true
+}
+</code></pre>
+<p>Will produce the following:</p>
+<pre><code>Hello Bryan
+You have just won 10000 dollars!
+Well, 6000.0 dollars, after taxes.
+</code></pre>
+
+<h2 id="DESCRIPTION">DESCRIPTION</h2>
+<p>Mustache can be used for HTML, config files, source code -
+anything. It works by expanding tags in a template using values
+provided in a hash or object.</p>
+<p>We call it "logic-less" because there are no if statements, else
+clauses, or for loops. Instead there are only tags. Some tags are
+replaced with a value, some nothing, and others a series of
+values. This document explains the different types of Mustache tags.</p>
+
+<h2 id="TAG-TYPES">TAG TYPES</h2>
+<p>Tags are indicated by the double mustaches. <code>{{person}}</code> is a tag, as
+is <code>{{#person}}</code>. In both examples, we'd refer to <code>person</code> as the key
+or tag key. Let's talk about the different types of tags.</p>
+
+<h3 id="Variables">Variables</h3>
+<p>The most basic tag type is the variable. A <code>{{name}}</code> tag in a basic
+template will try to find the <code>name</code> key in the current context. If
+there is no <code>name</code> key, the parent contexts will be checked recursively.
+If the top context is reached and the <code>name</code> key is still not found,
+nothing will be rendered.</p>
+<p>All variables are HTML escaped by default. If you want to return
+unescaped HTML, use the triple mustache: <code>{{{name}}}</code>.</p>
+<p>You can also use <code>&amp;</code> to unescape a variable: <code>{{&amp; name}}</code>. This may be
+useful when changing delimiters (see "Set Delimiter" below).</p>
+<p>By default a variable "miss" returns an empty string. This can usually
+be configured in your Mustache library. The Ruby version of Mustache
+supports raising an exception in this situation, for instance.</p>
+<p>Template:</p>
+<pre><code>* {{name}}
+* {{age}}
+* {{company}}
+* {{{company}}}
+</code></pre>
+<p>Object:</p>
+<pre><code>{
+"name": "Bryan",
+"company": "&amp;lt;b&amp;gt;Kado&amp;lt;/b&amp;gt;"
+}
+</code></pre>
+<p>Output:</p>
+<pre><code>* Bryan
+*
+* &amp;amp;lt;b&amp;amp;gt;Kado&amp;amp;lt;/b&amp;amp;gt;
+* &amp;lt;b&amp;gt;Kado&amp;lt;/b&amp;gt;
+</code></pre>
+<h3 id="Sections">Sections</h3>
+<p>Sections render blocks of text one or more times, depending on the
+value of the key in the current context.</p>
+<p>A section begins with a pound and ends with a slash. That is,
+<code>{{#person}}</code> begins a "person" section while <code>{{/person}}</code> ends it.</p>
+<p>The behavior of the section is determined by the value of the key.</p>
+<p><strong>False Values or Empty Lists</strong></p>
+<p>If the <code>person</code> key exists and has a value of false or an empty
+list, the HTML between the pound and slash will not be displayed.</p>
+<p>Template:</p>
+<pre><code>Shown.
+{{#person}}
+Never shown!
+{{/person}}
+</code></pre>
+<p>Object:</p>
+<pre><code>{
+"person": false
+}
+</code></pre>
+<p>Output:</p>
+<pre><code>Shown.
+</code></pre>
+<p><strong>Non-Empty Lists</strong></p>
+<p>If the <code>person</code> key exists and has a non-false value, the HTML between
+the pound and slash will be rendered and displayed one or more times.</p>
+<p>When the value is a non-empty list, the text in the block will be
+displayed once for each item in the list. The context of the block
+will be set to the current item for each iteration. In this way we can
+loop over collections.</p>
+<p>Template:</p>
+<pre><code>{{#repo}}
+&amp;lt;b&amp;gt;{{name}}&amp;lt;/b&amp;gt;
+{{/repo}}
+</code></pre>
+<p>Object:</p>
+<pre><code>{
+"repo": [
+{ "name": "resque" },
+{ "name": "hub" },
+{ "name": "rip" }
+]
+}
+</code></pre>
+<p>Output:</p>
+<pre><code>&amp;lt;b&amp;gt;resque&amp;lt;/b&amp;gt;
+&amp;lt;b&amp;gt;hub&amp;lt;/b&amp;gt;
+&amp;lt;b&amp;gt;rip&amp;lt;/b&amp;gt;
+</code></pre>
+<p><strong>Lambdas</strong></p>
+<p>When the value is a callable object, such as a function or lambda, the
+object will be invoked and passed the block of text. The text passed
+is the literal block, unrendered. <code>{{tags}}</code> will not have been expanded
+- the lambda should do that on its own. In this way you can implement
+filters or caching.</p>
+<p>Template:</p>
+<pre><code>{{#wrapped}}
+{{name}} is awesome.
+{{/wrapped}}
+</code></pre>
+<p>Hash:</p>
+<pre><code>{
+"name": "Willy",
+"wrapped": function() {
+return function(text, render) {
+  return "&amp;lt;b&amp;gt;" + render(text) + "&amp;lt;/b&amp;gt;"
+}
+}
+}
+</code></pre>
+<p>Output:</p>
+<pre><code>&amp;lt;b&amp;gt;Willy is awesome.&amp;lt;/b&amp;gt;
+</code></pre>
+<p><strong>Non-False Values</strong></p>
+<p>When the value is non-false but not a list, it will be used as the
+context for a single rendering of the block.</p>
+<p>Template:</p>
+<pre><code>{{#person?}}
+Hi {{name}}!
+{{/person?}}
+</code></pre>
+<p>Hash:</p>
+<pre><code>{
+"person?": { "name": "Jon" }
+}
+</code></pre>
+<p>Output:</p>
+<pre><code>Hi Jon!
+</code></pre>
+
+<h3 id="Inverted-Sections">Inverted Sections</h3>
+<p>An inverted section begins with a caret (hat) and ends with a
+slash. That is <code>{{^person}}</code> begins a "person" inverted section while
+<code>{{/person}}</code> ends it.</p>
+<p>While sections can be used to render text one or more times based on the
+value of the key, inverted sections may render text once based
+on the inverse value of the key. That is, they will be rendered
+if the key doesn't exist, is false, or is an empty list.</p>
+<p>Template:</p>
+<pre><code>{{#repo}}
+&amp;lt;b&amp;gt;{{name}}&amp;lt;/b&amp;gt;
+{{/repo}}
+{{^repo}}
+No repos :(
+{{/repo}}
+</code></pre>
+<p>Object:</p>
+<pre><code>{
+"repo": []
+}
+</code></pre>
+<p>Output:</p>
+<pre><code>No repos :(
+</code></pre>
+
+<h3 id="Comments">Comments</h3>
+<p>Comments begin with a bang and are ignored. The following template:</p>
+<pre><code>&amp;lt;h1&amp;gt;Today{{! ignore me }}.&amp;lt;/h1&amp;gt;
+</code></pre>
+<p>Will render as follows:</p>
+<pre><code>&amp;lt;h1&amp;gt;Today.&amp;lt;/h1&amp;gt;
+</code></pre>
+<p>Comments may contain newlines.</p>
+
+<h3 id="Partials">Partials</h3>
+<p>Partials begin with a greater than sign, like <code>{{&gt; box}}</code>.</p>
+<p>Partials are rendered at runtime (as opposed to compile time), so
+recursive partials are possible. Just avoid infinite loops.</p>
+<p>They also inherit the calling context. Whereas in an [ERB](http://en.wikipedia.org/wiki/ERuby) file you may have
+this:</p>
+<pre><code>&amp;lt;%= partial :next_more, :start =&amp;gt; start, :size =&amp;gt; size %&amp;gt;
+</code></pre>
+<p>Mustache requires only this:</p>
+<pre><code>{{&amp;gt; next_more}}
+</code></pre>
+<p>Why? Because the <code>next_more.mustache</code> file will inherit the <code>size</code> and
+<code>start</code> methods from the calling context.</p>
+<p>In this way you may want to think of partials as includes, imports, template
+expansion, nested templates, or subtemplates, even though those aren't literally the case here.</p>
+<p>For example, this template and partial:</p>
+<pre><code>base.mustache:
+&amp;lt;h2&amp;gt;Names&amp;lt;/h2&amp;gt;
+{{#names}}
+{{&amp;gt; user}}
+{{/names}}
+user.mustache:
+&amp;lt;strong&amp;gt;{{name}}&amp;lt;/strong&amp;gt;
+</code></pre>
+<p>Can be thought of as a single, expanded template:</p>
+<pre><code>&amp;lt;h2&amp;gt;Names&amp;lt;/h2&amp;gt;
+{{#names}}
+&amp;lt;strong&amp;gt;{{name}}&amp;lt;/strong&amp;gt;
+{{/names}}
+</code></pre>
+
+<h3 id="Set-Delimiter">Set Delimiter</h3>
+<p>Set Delimiter tags start with an equal sign and change the tag
+delimiters from <code>{{</code> and <code>}}</code> to custom strings.</p>
+<p>Consider the following contrived example:</p>
+<pre><code>* {{default_tags}}
+{{=&amp;lt;% %&gt;=}}
+* &amp;lt;% erb_style_tags %&gt;
+&amp;lt;%={{ }}=%&gt;
+* {{ default_tags_again }}
+</code></pre>
+<p>Here we have a list with three items. The first item uses the default
+tag style, the second uses erb style as defined by the Set Delimiter
+tag, and the third returns to the default style after yet another Set
+Delimiter declaration.</p>
+<p>According to <a href="http://google-ctemplate.googlecode.com/svn/trunk/doc/howto.html">ctemplates</a>, this "is useful for languages like TeX, where
+double-braces may occur in the text and are awkward to use for
+markup."</p>
+<p>Custom delimiters may not contain whitespace or the equals sign.</p>
+<h2 id="COPYRIGHT">COPYRIGHT</h2>
+<p>Mustache is Copyright</p>
+<p>(C) 2009 Chris Wanstrath</p>
+<p>(C) 2010-2020 Jan Lehnardt (JavaScript)</p>
+<p>(C) 2010-2020 The mustache.js community</p>
+<p>(C) 2020 Bryan Tong, Kado (JavaScript ES6 Upgrades)</p>
+<p>Original CTemplate by Google</p>
+</div>
\ No newline at end of file
diff --git a/main/views/doc/4/navigation.html b/main/views/doc/4/navigation.html
index edc771cc106525daa8bbef3076a8d3417082d70c..be1e2fcfe46cbafbaa94fa28dcf37d919e2e9c4e 100644
--- a/main/views/doc/4/navigation.html
+++ b/main/views/doc/4/navigation.html
@@ -4,7 +4,7 @@
   <p>Stability: 2 - Stable</p>
 </blockquote>
 <p>The <code>Navigation</code> library provides a way to build a navigation bars in your
-application. </p>
+application.</p>
 <pre><code class="js language-js"><span class="hljs-variable">const</span> <span class="hljs-variable">Navigation</span> = <span class="hljs-function"><span class="hljs-title">require</span>(<span class="hljs-string">'kado/lib/Navigation'</span>)</span>
 </code></pre>
 <h2 id="classnavigation">Class: Navigation</h2>
diff --git a/main/views/doc/4/parser.html b/main/views/doc/4/parser.html
index ca04acf4787e637d8d63bd0dc7f4c5ffbeae4b8a..4484f49df032b97ca545f442d30c2b599b4e3c72 100644
--- a/main/views/doc/4/parser.html
+++ b/main/views/doc/4/parser.html
@@ -58,7 +58,7 @@ keys with.</li>
 <ul>
 <li><code>d</code> {Date} subject date in proper object OR other input will be best-effort
 coerced into Date object</li>
-<li><code>emptyString</code> {string} (Default: <code>'Never'</code>) text to use when <code>d</code> unclear </li>
+<li><code>emptyString</code> {string} (Default: <code>'Never'</code>) text to use when <code>d</code> unclear</li>
 <li>Returns: {string} equivalent of input in sorting friendly format</li>
 </ul>
 <p>Reformat date to a string with a nice format; such as:
@@ -99,4 +99,13 @@ Like "The Title of a Book".</li>
 again a space <code></code>.</li>
 <li>Return {string} Parsed into a title string with conjunctions, articles and
 prepositions accounted for.</li>
-</ul>
\ No newline at end of file
+</ul>
+<h3 id="staticparserrequestbodyreq">static Parser.requestBody(req)</h3>
+<ul>
+<li><code>req</code> {IncomingMessage} HTTP incoming request object.</li>
+<li>Return {Promise} resolved with body parsing is complete and <code>req.body</code> will
+be populated with the result.</li>
+</ul>
+<p>Example</p>
+<pre><code class="js language-js">app.use(req =&gt; <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Parser</span>.</span></span>request<span class="hljs-constructor">Body(<span class="hljs-params">req</span>)</span>)
+</code></pre>
\ No newline at end of file
diff --git a/main/views/doc/4/query-cache.html b/main/views/doc/4/query-cache.html
new file mode 100644
index 0000000000000000000000000000000000000000..1a560a611f051593015aebb6b3935bc3e591c98c
--- /dev/null
+++ b/main/views/doc/4/query-cache.html
@@ -0,0 +1,66 @@
+<h1 id="querycache">QueryCache</h1>
+<ul>
+<li>Introduced in 4.2.0</li>
+</ul>
+<blockquote>
+  <p>Stability: 2 - Stable</p>
+</blockquote>
+<pre><code class="js language-js"><span class="hljs-variable">const</span> <span class="hljs-variable">QueryCache</span> = <span class="hljs-function"><span class="hljs-title">require</span>(<span class="hljs-string">'kado/lib/QueryCache'</span>)</span>
+</code></pre>
+<p>The Kado Query Cache system is for use with SQL based systems and will
+generate unique keys against queries and store them for quick reads over a
+chosen period.</p>
+<p>This method of caching greatly reduces load on frequently used queries where the
+output does not change. Expensive display queries should always look at this as
+an option. The nature of this caching system is much more predictable than the
+built into MySQL and deprecated query_cache there.</p>
+<h2 id="classquerycache">Class: QueryCache</h2>
+<h3 id="staticquerycachegeneratekeysqlvaluesoptions">static QueryCache.generateKey(sql, values, options)</h3>
+<ul>
+<li><code>sql</code></li>
+<li><code>values</code></li>
+<li><code>options</code></li>
+<li>Return {string} hexadecimal SHA1 hash of the input</li>
+</ul>
+<h3 id="staticquerycachegetinstanceoptions">static QueryCache.getInstance(options)</h3>
+<ul>
+<li><code>options</code></li>
+<li>Return {QueryCache} instance</li>
+</ul>
+<h3 id="querycacheconstructoroptions">QueryCache.constructor(options)</h3>
+<ul>
+<li><code>options</code></li>
+<li>Return {QueryCache} instance</li>
+</ul>
+<h3 id="querycachegetmodel">QueryCache.getModel()</h3>
+<ul>
+<li>Return {Model} the provided QueryCache model.</li>
+</ul>
+<h3 id="querycachereadkey">QueryCache.read(key)</h3>
+<ul>
+<li><code>key</code></li>
+<li>Return {Promise} resolve when cache read is complete</li>
+</ul>
+<h3 id="querycachewritekeyvaluettl">QueryCache.write(key, value, ttl)</h3>
+<ul>
+<li><code>key</code></li>
+<li><code>value</code></li>
+<li><code>ttl</code></li>
+<li>Return {Promise} resolved when cache read is complete</li>
+</ul>
+<h3 id="querycacheexecutesqlvaluesoptions">QueryCache.execute(sql, values, options)</h3>
+<ul>
+<li><code>sql</code></li>
+<li><code>values</code></li>
+<li><code>options</code></li>
+<li>Return {Promise} resolved when database query and cache write or cache read is
+complete.</li>
+</ul>
+<h3 id="querycacheprune">QueryCache.prune()</h3>
+<ul>
+<li>Return {Promise} resolved when cache prune completes.</li>
+</ul>
+<h3 id="querycacheflush">QueryCache.flush()</h3>
+<ul>
+<li>Return {Promise} resolved when query cache flush finishes.</li>
+</ul>
\ No newline at end of file
diff --git a/main/views/doc/4/query.html b/main/views/doc/4/query.html
new file mode 100644
index 0000000000000000000000000000000000000000..4bd40dbf4b430545df53226b23b08c00470704b7
--- /dev/null
+++ b/main/views/doc/4/query.html
@@ -0,0 +1,166 @@
+<h1 id="query">Query</h1>
+<p><em>Introduced in 4.2.0</em></p>
+<blockquote>
+  <p>Stability: 1 - Experimental</p>
+</blockquote>
+<pre><code class="js language-js"><span class="hljs-variable">const</span> <span class="hljs-variable">Query</span> = <span class="hljs-function"><span class="hljs-title">require</span>(<span class="hljs-string">'kado/lib/Query'</span>)</span>
+</code></pre>
+<p>The <code>Query</code> class implements a super class for constructing query builders that
+are customized for a specific query language.</p>
+<h2 id="classquery">Class: Query</h2>
+<h3 id="staticqueryaddbasetableselectionconstructtableconstruct">static Query.addBase(table, selection, construct, tableConstruct)</h3>
+<ul>
+<li><code>table</code> {string} name of the table to query against</li>
+<li><code>selection</code> {string} the fields to select from the table</li>
+<li><code>construct</code> {string} the wording used to construct the query such as <code>SELECT</code></li>
+<li><code>tableConstruct</code> {string} the wording used to identify a table such as <code>FROM</code></li>
+<li>Return {string} containing a suitable base query. Such as <code>SELECT * FROM x</code></li>
+</ul>
+<h3 id="staticqueryaddcomparisoncontextconstructitemoperatorvaluejoiner">static Query.addComparison(context, construct, item, operator, value, joiner)</h3>
+<ul>
+<li><code>context</code> {string|null} the existing comparison operators for this condition</li>
+<li><code>construct</code> {string} the wording used to start the condition such as <code>WHERE</code></li>
+<li><code>item</code> {string} the name of the field to compare against</li>
+<li><code>operator</code> {string} the operator to be used to compare the values</li>
+<li><code>value</code> {string} a <code>?</code> or <code>:label</code> to use to identify the value, this method
+only works on prepared statements.</li>
+<li><code>joiner</code> {string} that denotes how to join multiple comparison operators
+together.</li>
+<li>Return {string} a complete comparison string including the construct and all
+available parameters based on the context.</li>
+</ul>
+<h3 id="staticqueryaddlimitconstructstartlimit">static Query.addLimit(construct, start, limit)</h3>
+<ul>
+<li><code>construct</code> {string} the wording used to start the limit such as <code>LIMIT</code></li>
+<li><code>start</code> {number} the starting index</li>
+<li><code>limit</code> {number} the limit on rows to return (when omitted, <code>start</code>
+becomes <code>limit</code>)</li>
+<li>Return {string} a new limit statement to be appended to the query.</li>
+</ul>
+<h3 id="staticqueryaddordercontextconstructbydirectionjoiner">static Query.addOrder(context, construct, by, direction, joiner)</h3>
+<ul>
+<li><code>context</code> {string} the existing order conditions already saved</li>
+<li><code>construct</code> {string} the wording used to start the order clause such
+as <code>ORDER BY</code></li>
+<li><code>by</code> {string|Array} an array of sort conditions or a field name to sort by,
+multiples such as: <code>[['fieldOne', 'DESC'], 'fieldTwo', ['fieldThree', 'ASC']]</code>.
+Where each entry can either be an Array containing a field name and direction or
+it can be a {string} that contains only a field name, in which case, the
+direction is assumed to be Ascending or ASC.</li>
+<li><code>direction</code> {string} the direction of the sort <code>ASC</code> for Ascending or <code>DESC</code>
+for Descending.</li>
+<li><code>joiner</code> {string} the separator that denotes multiple order conditions the
+default is a comma <code>,</code>.</li>
+<li>Return {string} a complete order clause with included conditions that were
+saved to the <code>context</code> parameter.</li>
+</ul>
+<h3 id="staticqueryaddjoinquerydirection">static Query.addJoin(query, direction)</h3>
+<ul>
+<li><code>query</code> {Query} A complete Query object that implements a <code>to&lt;Direction&gt;Join</code>
+method eg: <code>Query.toLeftJoin()</code></li>
+<li><code>direction</code> {string} The direction of the join such as
+<code>LEFT, RIGHT, INNER, OUTER, UNION</code></li>
+<li>Return {string} a complete join clause that can be appended to a base Query.</li>
+</ul>
+<h3 id="staticqueryprintjointableconditionconstruct">static Query.printJoin(table, condition, construct)</h3>
+<ul>
+<li><code>table</code> {string} the name of the table to join</li>
+<li><code>condition</code> {string} the complete conditional statement for the join</li>
+<li><code>construct</code> {string} the wording used to prefix the join such as <code>LEFT</code></li>
+<li>Return {string} a ready to save join statement save for passing from
+<code>to&lt;Direction&gt;Join</code></li>
+</ul>
+<h3 id="staticqueryprintbasejoinwhereorderlimit">static Query.print(base, join, where, order, limit)</h3>
+<ul>
+<li><code>base</code> {string} the base query usually made from a select, or delete method.</li>
+<li><code>join</code> {string} an optional join statement or collection of join statements
+which have already been joined together</li>
+<li><code>where</code> {string} the conditional statement to identify rows</li>
+<li><code>order</code> {string} an optional order statement to sort results</li>
+<li><code>limit</code> {string} an optional limit to reduce the number of results</li>
+<li>Return {string} a complete ready to execute query.</li>
+</ul>
+<h3 id="queryconstructortablename">Query.constructor(tableName)</h3>
+<ul>
+<li><code>tableName</code> {string} the table name to work against.</li>
+<li>Return {Query} a new Query instance.</li>
+</ul>
+<h3 id="querytostring">Query.toString()</h3>
+<ul>
+<li>Return {string} of the fully constructed query ready for execution.</li>
+</ul>
+<h2 id="classquerysql">Class: QuerySQL</h2>
+<h3 id="querysqlconstructor">QuerySQL.constructor()</h3>
+<ul>
+<li>Return {QuerySQL} a new instance of the QuerySQL builder.</li>
+</ul>
+<h3 id="querysqlonitemoperatorvaluejoiner">QuerySQL.on(item, operator, value, joiner)</h3>
+<ul>
+<li><code>item</code> {string} the field name to compare against.</li>
+<li><code>operator</code> {string} the operator to use to compare the values.</li>
+<li><code>value</code> {string} the value to compare against which must be a <code>?</code> or <code>:label</code>
+the Query builder only supports prepared statements.</li>
+<li><code>joiner</code> {string} the wording used to join multiple comparison operators
+together by default <code>AND</code></li>
+<li>Return {QuerySQL} this instance</li>
+</ul>
+<h3 id="querysqlselectselection">QuerySQL.select(selection)</h3>
+<ul>
+<li><code>selection</code> {string} the selection statement for the query which can contain
+field names, functions, sub queries etc.</li>
+<li>Return {QuerySQL} this instance</li>
+</ul>
+<h3 id="querysqllog">QuerySQL.log()</h3>
+<p>Prints the query to process.stdout via console.log, equivalent of
+<code>console.log(query.toString(), query.toArray())</code></p>
+<h3 id="querysqlleftjoinquery">QuerySQL.leftJoin(query)</h3>
+<ul>
+<li><code>query</code> {Query} a fully prepared Query object to obtain a leftJoin from.</li>
+<li>Return {QuerySQL} this instance</li>
+</ul>
+<h3 id="querysqlwhereitemoperatorvaluejoiner">QuerySQL.where(item, operator, value, joiner)</h3>
+<ul>
+<li><code>item</code> {string} the field name of the data to compare against</li>
+<li><code>operator</code> {string} the operator used to compare the values</li>
+<li><code>value</code> {string} the value do compare against the database</li>
+<li><code>joiner</code> {string} the string used to join multiple comparisons together
+by default <code>AND</code></li>
+<li>Return {QuerySQL} this instance</li>
+</ul>
+<h3 id="querysqllimitstartlimit">QuerySQL.limit(start, limit)</h3>
+<ul>
+<li><code>start</code> {number} the starting index to return results from when limit is
+omitted start is assumed to be the limit and start is the assumed to be 0.</li>
+<li><code>limit</code> {number} the limit of the results to be returned</li>
+<li>Return {QuerySQL} this instance</li>
+</ul>
+<h3 id="querysqlorderbydirectionjoiner">QuerySQL.order(by, direction, joiner)</h3>
+<ul>
+<li><code>by</code> {string|Array} a string with a field name or an array or sort fields</li>
+<li><code>direction</code> {string} the direction to sort by either <code>ASC</code> for Ascending or
+<code>DESC</code> for Descending.</li>
+<li><code>joiner</code> {string} the wording used to join multiple order statements together
+by default a comma <code>,</code></li>
+<li>Return {QuerySQL} this instance</li>
+</ul>
+<h3 id="querysqltoleftjoin">QuerySQL.toLeftJoin()</h3>
+<ul>
+<li>Return {string} the complete left join statement.</li>
+</ul>
+<h3 id="querysqltostring">QuerySQL.toString()</h3>
+<ul>
+<li>Return {string} the complete query ready for execution.</li>
+</ul>
+<h3 id="querysqlexecutedboptions">QuerySQL.execute(db, options)</h3>
+<ul>
+<li><code>db</code> {MySQL2} Current connection to MySQL</li>
+<li><code>options</code> {object} options passed to the <code>db.execute()</code> call.</li>
+<li>Return {Promise} resolved when the database query is complete</li>
+</ul>
+<p>This is a convenience method to make executing queries involve less typing.</p>
+<p>Original Method</p>
+<pre><code class="js language-js">db.execute(query.<span class="hljs-keyword">to</span><span class="hljs-constructor">String()</span>, query.<span class="hljs-keyword">to</span><span class="hljs-constructor">Array()</span>, options)
+</code></pre>
+<p>Better Method</p>
+<pre><code class="js language-js"><span class="hljs-keyword">query</span>.execute(<span class="hljs-keyword">db</span>)
+</code></pre>
\ No newline at end of file
diff --git a/main/views/doc/4/router.html b/main/views/doc/4/router.html
index faab2f457aa655a7ad7dbdfdc6dbf0dfa093b133..168810bf2b6e17647853acf64a07b49c941ed5a8 100644
--- a/main/views/doc/4/router.html
+++ b/main/views/doc/4/router.html
@@ -1,12 +1,61 @@
-<h1 id="profiler">Profiler</h1>
+<h1 id="router">Router</h1>
 <p><em>Introduced in 4.0.0</em></p>
 <blockquote>
   <p>Stability: 2 - Stable</p>
 </blockquote>
 <pre><code class="js language-js"><span class="hljs-variable">const</span> <span class="hljs-variable">Router</span> = <span class="hljs-function"><span class="hljs-title">require</span>(<span class="hljs-string">'kado/lib/Router'</span>)</span>
 </code></pre>
-<p>The Router library provides assistance for matching paths or URIs to real locations within the system.</p>
-<h3 id="staticroutergetinstance">static router.getInstance()</h3>
+<p>The Router library provides assistance for matching paths or URIs to real
+locations within the system.</p>
+<h2 id="staticrouterredirectrequestres">static Router.redirectRequest (res)</h2>
+<ul>
+<li><code>res</code> {Response} the HTTP response</li>
+<li>Return {Function} used to redirect requests</li>
+</ul>
+<h3 id="staticrouterrenderjsonres">static Router.renderJSON (res)</h3>
+<ul>
+<li><code>res</code> {Response} the HTTP response</li>
+<li>Return {Function} used to render JSON responses.</li>
+</ul>
+<h3 id="staticroutersendfilereqres">static Router.sendFile (req, res)</h3>
+<ul>
+<li><code>req</code> {Request} the HTTP request</li>
+<li><code>res</code> {Response} the HTTP response</li>
+<li>Return {Function} used to send files to the response.</li>
+</ul>
+<p>Usage:</p>
+<pre><code class="js language-js"><span class="hljs-keyword">const</span> filepath = <span class="hljs-string">'./foo.txt'</span>
+res.sendFile(filepath)
+</code></pre>
+<p>This method will set the Content-Length, Content-Type and ETag for the file
+as well as handle responding properly to HEAD requests. Useful for sending
+files back to the consumer.</p>
+<h3 id="staticrouterrenderappreqres">static Router.render(app, req, res)</h3>
+<ul>
+<li><code>app</code> {Application} an application instance</li>
+<li><code>req</code> {Request} the HTTP request</li>
+<li><code>res</code> {Response} the HTTP response</li>
+<li>Return {Function} used to render responses with the view engine</li>
+</ul>
+<p>If there is no view engine <code>false</code> is returned.</p>
+<h3 id="staticroutergetremoteipappreq">static Router.getRemoteIP (app, req)</h3>
+<ul>
+<li><code>app</code> {Application} an application instance</li>
+<li><code>req</code> {Request} the HTTP request</li>
+<li>Return {string} remote IP address.</li>
+</ul>
+<h3 id="staticroutersetpoweredbyres">static Router.setPoweredBy (res)</h3>
+<ul>
+<li><code>res</code> {Response} the HTTP response</li>
+<li>Return {void}</li>
+</ul>
+<p>Sets the powered by Kado header for the response.</p>
+<h3 id="staticrouterstandardpreparationapp">static Router.standardPreparation(app)</h3>
+<ul>
+<li><code>app</code> {Application} current application instance</li>
+<li>Return {Function} to be set as the route preparer.</li>
+</ul>
+<h3 id="staticroutergetinstance">static Router.getInstance()</h3>
 <ul>
 <li>Return {router} new instance of the router system</li>
 </ul>
@@ -14,6 +63,15 @@
 <ul>
 <li>Return {router} new instance of the router system</li>
 </ul>
+<h3 id="routersetpreparerpreparer">Router.setPreparer(preparer)</h3>
+<ul>
+<li><code>preparer</code> {function} used to prepare new request for routing</li>
+<li>Return {Router} this instance</li>
+</ul>
+<h3 id="routergetpreparer">Router.getPreparer()</h3>
+<ul>
+<li>Return {preparer} the current registered preparation method</li>
+</ul>
 <h3 id="routerusefn">Router.use(fn)</h3>
 <ul>
 <li><code>fn</code> {function} function to be called as middleware and should return a
@@ -55,13 +113,20 @@ Promise.</li>
 <li><code>uri</code> {string} the uri of the route to remove</li>
 <li>Return {boolean} <code>true</code> when a route is matched and deleted, otherwise <code>false</code></li>
 </ul>
-<h3 id="routergetmethoduriparams">Router.get(method, uri, params)</h3>
+<h3 id="routergethttpmethoduriparams">Router.get(httpMethod, uri, params)</h3>
 <ul>
-<li><code>method</code> {string} the method of the route</li>
+<li><code>httpMethod</code> {string} the method of the route</li>
 <li><code>uri</code> {string} the uri of the route to get</li>
 <li><code>params</code> {object} blank object to be populated by found path keys</li>
 <li>Return {object} when a route is found, otherwise {boolean} <code>false</code></li>
 </ul>
+<h3 id="routercallpreparerreqres">Router.callPreparer(req, res)</h3>
+<ul>
+<li><code>req</code> {Request} HTTP Request object</li>
+<li><code>res</code> {Response} HTTP Response obje</li>
+<li>Return {Promise} resolved when the preparation is complete</li>
+</ul>
+<p><em>Internal Use</em></p>
 <h3 id="routercallmiddlewarereqresmiddlewarekeys">Router.callMiddleware(req, res, middlewareKeys)</h3>
 <ul>
 <li><code>req</code> {Request} HTTP Request object</li>
@@ -77,7 +142,7 @@ Promise.</li>
 <li>Return {Promise} resolved when all middleware, route, and optional final
 handler have been executed.</li>
 </ul>
-<p>This method is typically invoked by the <code>HyperTextServer.onRequest()</code> method.</p>
+<p>Used by the <code>HyperTextServer.onRequest()</code> method.</p>
 <h3 id="routerall">Router.all()</h3>
 <ul>
 <li>Return {object} all routes</li>
diff --git a/main/views/doc/4/schema.html b/main/views/doc/4/schema.html
new file mode 100644
index 0000000000000000000000000000000000000000..f5e5b39339b20ccfdecde2ac91425efa6f4ebba9
--- /dev/null
+++ b/main/views/doc/4/schema.html
@@ -0,0 +1,78 @@
+<h1 id="schema">Schema</h1>
+<p><em>Introduced in 4.2.0</em></p>
+<blockquote>
+  <p>Stability: 1 - Experimental</p>
+</blockquote>
+<pre><code class="js language-js"><span class="hljs-variable">const</span> <span class="hljs-variable">Schema</span> = <span class="hljs-function"><span class="hljs-title">require</span>(<span class="hljs-string">'kado/lib/Schema'</span>)</span>
+</code></pre>
+<p>The <code>Schema</code> class implements a super class for constructing schema builders that
+are customized for a specific schema language.</p>
+<h2 id="classschemaextendsquery">Class: Schema extends Query</h2>
+<p>For usage of the <code>Query</code> library, see the <a href="/doc/query/">Query</a> documentation.</p>
+<h2 id="classschemasql">Class: SchemaSQL</h2>
+<h3 id="staticschemasqlcreatetablename">static SchemaSQL.create(tableName)</h3>
+<ul>
+<li><code>tableName</code> {string} name of the table to work with a schema on.</li>
+<li>Return {SchemaSQL} a new instance of the SchemaSQL builder.</li>
+</ul>
+<h3 id="staticschemasqlaltertablename">static SchemaSQL.alter(tableName)</h3>
+<ul>
+<li><code>tableName</code> {string} name of the table to work with a schema on.</li>
+<li>Return {SchemaSQL} a new instance of the SchemaSQL builder.</li>
+</ul>
+<h3 id="schemasqlconstructortablename">SchemaSQL.constructor(tableName)</h3>
+<ul>
+<li><code>tableName</code> {string} name of the table to work with a schema on.</li>
+<li>Return {SchemaSQL} a new instance of the SchemaSQL builder.</li>
+</ul>
+<h3 id="schemasqlaltertableoptions">SchemaSQL.alterTable(options)</h3>
+<ul>
+<li><code>options</code> {object} options to control table alterations</li>
+<li>Return {SchemaSQL} this instance</li>
+</ul>
+<h3 id="schemasqlcreatetableoptions">SchemaSQL.createTable(options)</h3>
+<ul>
+<li><code>options</code> {object} options to control table creation</li>
+<li>Return {SchemaSQL} this instance</li>
+</ul>
+<h3 id="schemasqlfieldnameoptions">SchemaSQL.field(name, options)</h3>
+<ul>
+<li><code>name</code> {string} name of the new field.</li>
+<li><code>options</code> {Object|string} an object with field options, or a string containing
+only the field type.</li>
+<li>Return {QuerySQL} this instance</li>
+</ul>
+<p>Available Options:</p>
+<ul>
+<li><code>type</code> {string} type of the field</li>
+<li><code>length</code> {string|number} length of the field</li>
+<li><code>signed</code> {boolean} set to <code>false</code> for <code>UNSIGNED</code> integers</li>
+<li><code>nullable</code> {boolean} set to <code>false</code> for <code>NOT NULL</code> fields</li>
+<li><code>default</code> {string|null} define the default value of the field</li>
+<li><code>autoIncrement</code> {boolean} set to <code>true</code> to add the <code>AUTO_INCREMENT</code> flag</li>
+</ul>
+<h3 id="schemasqlindexnamefieldsoptions">SchemaSQL.index(name, fields, options)</h3>
+<ul>
+<li><code>name</code> {string} name of the new index</li>
+<li><code>fields</code> {Array} an array of fields to contain in the index</li>
+<li><code>options</code> {Object} containing index options</li>
+<li>Return {QuerySQL} this instance</li>
+</ul>
+<p>Available Options:</p>
+<ul>
+<li><code>unique</code> {boolean} set to <code>TRUE</code> to have a <code>UNIQUE KEY</code></li>
+</ul>
+<h3 id="schemasqlprimaryfieldname">SchemaSQL.primary(fieldName)</h3>
+<ul>
+<li><code>fieldName</code> {string} the field to define as the primary key.</li>
+<li>Return {QuerySQL} this instance</li>
+</ul>
+<h3 id="schemasqltoarray">SchemaSQL.toArray()</h3>
+<ul>
+<li>Return {Array} containing three entries, the first being an Array of fields,
+the second being an array of indexes and finally the primary key.</li>
+</ul>
+<h3 id="schemasqltostring">SchemaSQL.toString()</h3>
+<ul>
+<li>Return {string} the complete query ready for execution.</li>
+</ul>
\ No newline at end of file
diff --git a/main/views/doc/4/search.html b/main/views/doc/4/search.html
index a9f9e5295d1b906d272bd62e9e0fe76d6f192ef7..7d7603736b0ad170eda103451e32c945ce842e25 100644
--- a/main/views/doc/4/search.html
+++ b/main/views/doc/4/search.html
@@ -8,7 +8,7 @@
 <p>This library provides engine driven search that can be implemented by modules
 directly or by other providers.</p>
 <h2 id="classsearch">Class: Search</h2>
-<p><code>Search</code> extends <code>Connect</code> see <a href="./Connect.md">Connect.md</a> for more engine
+<p><code>Search</code> extends <code>Connect</code> see <a href="/doc/connect/">Connect.md</a> for more engine
 management and more.</p>
 <h3 id="staticsearchgetinstance">static Search.getInstance()</h3>
 <ul>
@@ -28,6 +28,6 @@ Return {Promise} that resolves when the search is complete.</li>
 <p>Note: when no <code>name</code> is provided all handlers are executed.</p>
 <h2 id="classsearchengine">Class: SearchEngine</h2>
 <p><code>SearchEngine</code> extends <code>ConnectEngine</code> see
-<a href="./ConnectEngine.md">ConnectEngine.md</a> for more engine management and more.</p>
+<a href="/doc/connect-engine/">ConnectEngine.md</a> for more engine management and more.</p>
 <h3 id="searchenginesearch">SearchEngine.search()</h3>
 <p>Must be extended and used to send to underlying search system.</p>
\ No newline at end of file
diff --git a/main/views/doc/4/session.html b/main/views/doc/4/session.html
index 26d7643f845ea60a6629449b86fc639807ffa571..389a0ab57cff282db6f065474d88a6d8f00611f5 100644
--- a/main/views/doc/4/session.html
+++ b/main/views/doc/4/session.html
@@ -227,4 +227,66 @@ will be resolved with an {object} containing the session data.</li>
 <li>Return {number} total number of pruned entries.</li>
 </ul>
 <p>This method uses the duration and timestamps on the session data to prune the
+records.</p>
+<h2 id="classsessionstoremodel">Class: SessionStoreModel</h2>
+<h3 id="staticsessionstoremodelfieldlist">static SessionStoreModel.fieldList()</h3>
+<ul>
+<li>Return {Object} field definitions for the model</li>
+</ul>
+<h3 id="staticsessionstoremodelcreatetable">static SessionStoreModel.createTable()</h3>
+<ul>
+<li>Return {Schema} used to execute a create table query.</li>
+</ul>
+<h3 id="staticsessionstoremodelinsertfields">static SessionStoreModel.insert(fields)</h3>
+<ul>
+<li><code>fields</code> {Array} of field names to insert</li>
+<li>Return {Query} insert query ready for values</li>
+</ul>
+<h3 id="staticsessionstoremodelupdatefields">static SessionStoreModel.update(fields)</h3>
+<ul>
+<li><code>fields</code> {Array} of field names to insert</li>
+<li>Return {Query} update query ready for values</li>
+</ul>
+<h3 id="staticsessionstoremodelbyidid">static SessionStoreModel.byId(id)</h3>
+<ul>
+<li>Return {Query} to find session by id</li>
+</ul>
+<h3 id="staticsessionstoremodelbysidsid">static SessionStoreModel.bySid(sid)</h3>
+<ul>
+<li>Return {Query} to find session by sid (session id)</li>
+</ul>
+<h3 id="staticsessionstoremodelprunesessionboundary">static SessionStoreModel.pruneSession(boundary)</h3>
+<ul>
+<li><code>boundary</code> {Date} entries updated prior to this are removed.</li>
+<li>Return {Query} used to delete old session</li>
+</ul>
+<h2 id="classsessionstoresql">Class: SessionStoreSQL</h2>
+<h3 id="sessionstoresqlconstructoroptions">SessionStoreSQL.constructor(options)</h3>
+<ul>
+<li><code>options</code> {object} Settings for this store instance</li>
+<li>Return {SessionStoreMemory} new instance</li>
+</ul>
+<p>Available Settings:</p>
+<ul>
+<li>Includes the settings from <code>SessionStore.constructor()</code></li>
+<li><code>db</code> {DatabaseEngine} The underlying database engine to use such as mysql2</li>
+<li><code>model</code> {Model} The session model used to build queries.</li>
+</ul>
+<h3 id="sessionstoresqlsavesiddata">SessionStoreSQL.save(sid, data)</h3>
+<ul>
+<li><code>sid</code> {string} the session id to save</li>
+<li><code>data</code> {object} the session data to save</li>
+<li>Return {Promise} resolved when the session data is saved.</li>
+</ul>
+<h3 id="sessionstoresqlrestoresid">SessionStoreSQL.restore(sid)</h3>
+<ul>
+<li><code>sid</code> {string} the session id to restore</li>
+<li>Return {Promise} resolved when the session data has been restored. The promise
+will be resolved with an {object} containing the session data.</li>
+</ul>
+<h3 id="sessionstoresqlprune">SessionStoreSQL.prune()</h3>
+<ul>
+<li>Return {number} total number of pruned entries.</li>
+</ul>
+<p>This method uses the duration and timestamps on the session data to prune the
 records.</p>
\ No newline at end of file
diff --git a/main/views/doc/4/test-runner.html b/main/views/doc/4/test-runner.html
index d4ba61c46f46967d86959ebf88cdb09a8226c2a1..e41c8cf079049ee5971c93473eba9926bf6fa262 100644
--- a/main/views/doc/4/test-runner.html
+++ b/main/views/doc/4/test-runner.html
@@ -39,7 +39,7 @@ runner.suite(<span class="hljs-string">'MySuite'</span>, <span class="hljs-funct
     it(<span class="hljs-string">'should pass this test'</span>, <span class="hljs-function"><span class="hljs-params">()</span> =&gt;</span> { <span class="hljs-keyword">return</span> <span class="hljs-literal">true</span> })
     it(<span class="hljs-string">'should fail this test'</span>, <span class="hljs-function"><span class="hljs-params">()</span> =&gt;</span> { <span class="hljs-keyword">return</span> <span class="hljs-literal">false</span> })
     it(<span class="hljs-string">'should pass an assert'</span>, <span class="hljs-function"><span class="hljs-params">()</span> =&gt;</span> { expect.eq(<span class="hljs-literal">true</span>) })
-  }) 
+  })
 })
 const someOptions = {hideFailed: <span class="hljs-literal">true</span>}
 runner.execute(someOptions)
diff --git a/main/views/doc/4/view.html b/main/views/doc/4/view.html
index 31c0d49cad77386283862384785e9bf9e0903b8e..0d00e986b0a91f3dc1709a152de1078ba385483b 100644
--- a/main/views/doc/4/view.html
+++ b/main/views/doc/4/view.html
@@ -8,7 +8,7 @@
 <p>This library provides the registration of both view engines for rendering with
 various languages as well as a view registry of actual fixtures to render from.</p>
 <h2 id="classview">Class: View</h2>
-<p><code>View</code> extends <code>Connect</code> see <a href="./Connect.md">Connect.md</a> for more engine
+<p><code>View</code> extends <code>Connect</code> see <a href="/doc/connect/">Connect.md</a> for more engine
 management and more.</p>
 <h3 id="staticviewgetinstance">static View.getInstance()</h3>
 <ul>
@@ -20,7 +20,7 @@ management and more.</p>
 </ul>
 <h2 id="classviewengine">Class: ViewEngine</h2>
 <p><code>ViewEngine</code> extends <code>ConnectEngine</code> see
-<a href="./ConnectEngine.md">ConnectEngine.md</a> for more engine management and more.</p>
+<a href="/doc/connect-engine/">ConnectEngine.md</a> for more engine management and more.</p>
 <h3 id="viewenginerender">ViewEngine.render()</h3>
 <p>Must be extended and used to render to the underlying system.</p>
 <h2 id="classviewmustache">Class: ViewMustache</h2>
diff --git a/main/views/guide/3/developer.html b/main/views/guide/3/developer.html
index 6839737c2d07a4dc85a3e65df0032fb94b22df74..50b884bf60d2554ee0e8f1e7e28f817aa967863c 100644
--- a/main/views/guide/3/developer.html
+++ b/main/views/guide/3/developer.html
@@ -15,7 +15,7 @@ $ git clone https://github.com/KadoOrg/kado
 the <a href="https://git.nullivex.com/kado/kado">kado/kado</a> repository and once you have
 finished your changes. Try to keep them in a single commit and then submit a
 pull request using Github.</p>
-<p>Kado has a set <a href="./Developer.md">release cycle</a> please keep that in mind with
+<p>Kado has a set <a href="/guide/developer/">release cycle</a> please keep that in mind with
 contributing new features. In the meantime, please use your fork to operate
 systems with newer features.</p>
 <p>If your change is going to require changing the module format it may either be
diff --git a/main/views/guide/3/getting-started.html b/main/views/guide/3/getting-started.html
index 4c1e635fe14cc7c2d4e63c0574516ac8c02a62d3..d296ebcdb40ee5cd17c0aa65c9b2d70f0bf75269 100644
--- a/main/views/guide/3/getting-started.html
+++ b/main/views/guide/3/getting-started.html
@@ -2,8 +2,8 @@
 <blockquote>
   <p>NOTICE: Kado 3 is <strong>DEPRECATED</strong>, see <a href="https://kado.org">kado.org</a> for the latest version.</p>
 </blockquote>
-<p>Once <a href="./Installation.md">Installation</a> has been completed, there are two ways to
-get started. First, go to <a href="./InstallTheDemo.md">install the demo</a> and follow
+<p>Once <a href="/guide/installation/">Installation</a> has been completed, there are two ways to
+get started. First, go to <a href="/guide/install-the-demo/">install the demo</a> and follow
 the instructions. Otherwise, create a file named <code>app.js</code> and paste the
 following code:</p>
 <pre><code class="js language-js">const K = require(<span class="hljs-string">'kado'</span>);
@@ -30,11 +30,11 @@ website will then be located at http://localhost:3001</p>
 <p>Now that you have a first class web platform all to yourself it is time to
 explore what Kado has to offer.</p>
 <ul>
-<li><a href="./Module.md">Modules</a></li>
-<li><a href="./Themes.md">Themes</a></li>
-<li><a href="./Templates.md">Templates</a></li>
-<li><a href="./Database.md">Database</a></li>
-<li><a href="./Configuration.md">Configuration</a></li>
-<li><a href="./Reference.md">Kado Reference</a></li>
+<li><a href="/doc/module/">Modules</a></li>
+<li><a href="/info/themes/">Themes</a></li>
+<li><a href="/doc/templates/">Templates</a></li>
+<li><a href="/doc/database/">Database</a></li>
+<li><a href="/doc/configuration/">Configuration</a></li>
+<li><a href="/doc/reference/">Kado Reference</a></li>
 </ul>
 <p>Happy Coding!</p>
\ No newline at end of file
diff --git a/main/views/guide/3/install-the-demo.html b/main/views/guide/3/install-the-demo.html
index 7f58ba8ab5f91865e9b73cec444e9c9e92126637..a68b2ba2696590c45e26617c9a052a753b842a91 100644
--- a/main/views/guide/3/install-the-demo.html
+++ b/main/views/guide/3/install-the-demo.html
@@ -4,7 +4,7 @@
 </blockquote>
 <p>Quickly try out Kado!</p>
 <p>Environment Requimrents: Node.JS 8+, MySQL 5.7 see
-<a href="./Installation.md">installation</a> for more.</p>
+<a href="/guide/installation/">installation</a> for more.</p>
 <p>For more information see the
 <a href="https://github.com/KadoOrg/kado-demo">Github Repository</a></p>
 <p>1) Clone the repository to a location locally.
diff --git a/main/views/guide/3/website-cheat-sheet.html b/main/views/guide/3/website-cheat-sheet.html
index c5b3f854d6c16f985b672171d444277d4a728c71..533e96d8bd5f1d7e07d570478d09ae619d1dcb69 100644
--- a/main/views/guide/3/website-cheat-sheet.html
+++ b/main/views/guide/3/website-cheat-sheet.html
@@ -142,7 +142,7 @@ it going.</p>
 <p>There is always more to do but this is a minimum configuration just to get
 started. Here are some other instructional pages to check out:</p>
 <ul>
-<li><a href="./Configuration.md">Configuration</a></li>
-<li><a href="./Templates.md">Template Variables</a></li>
-<li><a href="./Module.md">Module Guide</a></li>
+<li><a href="/doc/configuration/">Configuration</a></li>
+<li><a href="/doc/templates/">Template Variables</a></li>
+<li><a href="/doc/module/">Module Guide</a></li>
 </ul>
\ No newline at end of file
diff --git a/main/views/guide/4/build-admin-panel.html b/main/views/guide/4/build-admin-panel.html
index b8a14c550c8c87e7db38f994bf1e51ff38d86287..8f677e8ff92b13ee6629a6d0bbc0c858882697e6 100644
--- a/main/views/guide/4/build-admin-panel.html
+++ b/main/views/guide/4/build-admin-panel.html
@@ -1,8 +1,214 @@
-<h1 id="buildanadminpanel">Build an Admin Panel</h1>
-<p>Unfortunately we have not yet completed this guide. However, it is under
-construction! You are welcome to check the progress made building this guide
-or contribute to it yourself at the following URL:</p>
-<ul>
-<li><a href="https://git.nullivex.com/kado/kado/issues/43">Build an Admin Panel Guide</a></li>
-</ul>
-<p>Thank you for checking into the Kado documentation!</p>
\ No newline at end of file
+<h1 id="buildinganadminpanel">Building An Admin Panel</h1>
+<p>Now that you have completed the previous
+<a href="HelloWorld.md">Hello World</a>,
+<a href="MakeSimpleWebsite.md">Make a Simple Website</a> and
+<a href="DatabaseWorkFlow.md">Database Work Flows</a> guides. It is
+important to note that all the guides combine together into a single project
+we will be moving on to building an admin panel. The first step we will be doing
+is creating a route folder and within that route folder we will create a
+<code>Admin.js</code> file and you will use the following code: <code>Admin.js</code>.</p>
+<pre><code class="js language-js"><span class="hljs-meta">'use strict'</span>
+<span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require</span>(<span class="hljs-string">'kado/lib/FileSystem'</span>)
+<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Admin</span> </span>{
+ <span class="hljs-keyword">static</span> register (app) {
+   <span class="hljs-keyword">const</span> route = <span class="hljs-keyword">new</span> Admin(fs.path.join(__dirname, <span class="hljs-string">'../view/admin'</span>))
+   app.get(<span class="hljs-string">'/admin/'</span>, route.index())
+   app.get(<span class="hljs-string">'/admin/login/'</span>, route.login())
+   app.post(<span class="hljs-string">'/admin/login/'</span>, route.login())
+   app.get(<span class="hljs-string">'/admin/logout/'</span>, route.logout())
+ }
+</code></pre>
+<p>The code above uses <code>fs(filesystem)</code> require in order to get the
+<code>(‘kado/lib/FileSystem’)</code> then we use the class function to call the admin
+object. Then we make a static method named register to be called when routes
+should be placed into the application. The next line
+<code>const route = new Admin(fs.path.join(__dirname, '../view/admin'))</code> makes an
+instance of our route object, then placing <code>fs.path.join</code> method to create and
+join the path in a string. Lastly, we use the <code>_dirname</code> variable to tell us the
+absolute path of the directory containing the executing file. then using
+<code>app.get</code> for matching and handling a specific route when requested.</p>
+<p>Now we will place a homepage route by adding additional code to Admin.js:
+<code>Admin.js</code>.</p>
+<pre><code class="js language-js"><span class="hljs-built_in">index</span> () {
+ <span class="hljs-keyword">return</span> (req, <span class="hljs-keyword">res</span>) =&gt; {
+   <span class="hljs-keyword">if</span> (!req.session.<span class="hljs-built_in">get</span>(<span class="hljs-string">'staff'</span>)) {
+     <span class="hljs-keyword">return</span> <span class="hljs-keyword">res</span>.render(<span class="hljs-string">'admin/error'</span>, { error: <span class="hljs-string">'Must be logged in'</span> })
+   }
+   req.locals._pageTitle = <span class="hljs-string">'Home'</span>
+   <span class="hljs-keyword">res</span>.render(<span class="hljs-string">'admin/home'</span>)
+ }
+}
+</code></pre>
+<p>The above code is for creating an index and in that we use return to get our
+request and response. Then using <code>if(!req.session.get(‘staff’)) {</code> we can send
+the user to an error page saying they are not logged in successfully get the
+session we will return and render a response
+<code>(‘admin/error’, { error: ‘Must be logged in’ })</code>. On the last two lines the
+<code>pageTitle</code> is set and we render the page using <code>res.render(‘admin/home’)</code>.</p>
+<p>Next, we will add a login method to handle displaying and authenticating staff
+members. Adding on to Admin.js: <code>Admin.js</code>.</p>
+<pre><code class="js language-js">login () {
+ <span class="hljs-keyword">return</span> (req, <span class="hljs-keyword">res</span>) =&gt; {
+   <span class="hljs-keyword">if</span> (req.body.email) {
+     req.session.<span class="hljs-keyword">set</span>(<span class="hljs-string">'staff'</span>, { emai<span class="hljs-variable">l:</span> req.body.email })
+     <span class="hljs-keyword">res</span>.statusCode = <span class="hljs-number">302</span>
+     <span class="hljs-keyword">let</span> referer = req.headers.referer || <span class="hljs-string">'/admin/'</span>
+     <span class="hljs-keyword">if</span> (referer.<span class="hljs-keyword">match</span>(/\/admin\/login\/$/)) referer = <span class="hljs-string">'/admin/'</span>
+     <span class="hljs-keyword">res</span>.setHeader(<span class="hljs-string">'Location'</span>, referer)
+     <span class="hljs-keyword">return</span> <span class="hljs-keyword">res</span>.end()
+   }
+   req.locals._pageTitle = <span class="hljs-string">'Login'</span>
+   <span class="hljs-keyword">res</span>.render(<span class="hljs-string">'admin/login'</span>)
+ }
+}
+</code></pre>
+<p>Above, we make the login method which will display a login page or test a staff
+members authentication. Depending on whether or not <code>req.body.email</code> is present
+we will check for the staff members login to be valid. When <code>req.body.email</code> is
+present, we test authentication and if valid create a session, otherwise
+display a login page for the staff member to input authentication details.
+Upon a successful login we redirect the user to where they previously came
+from in case they were hot linked into the application.</p>
+<p>Finally place this section of code to handle staff logging out of the system:
+<code>Admin.js</code>.</p>
+<pre><code class="js language-js"> logout () {
+   <span class="hljs-keyword">return</span> (req, <span class="hljs-keyword">res</span>) =&gt; {
+     req.session.<span class="hljs-keyword">set</span>(<span class="hljs-string">'staff'</span>, undefined)
+     <span class="hljs-keyword">res</span>.statusCode = <span class="hljs-number">302</span>
+     <span class="hljs-keyword">res</span>.setHeader(<span class="hljs-string">'Location'</span>, <span class="hljs-string">'/admin/login/'</span>)
+     <span class="hljs-keyword">return</span> <span class="hljs-keyword">res</span>.end()
+   }
+ }
+}
+</code></pre>
+<p>The above code will create the logout route to clear staff sessions. Setting the
+staff session to undefined makes it appear as if it never existed. After doing
+so, we set the status code to 302 and redirect the user back to the login page
+by setting the Location header to <code>/admin/login/</code>.</p>
+<p>Then you will use the following code to represent the current module and exports
+as a module: <code>Admin.js</code>.</p>
+<pre><code class="js language-js"><span class="hljs-attr">module.exports</span> = Admin
+</code></pre>
+<p>Now that we have completed the admin.js we will be creating a <code>Help.js</code> file
+and with in the Help.js file we  will be using the following code: <code>Help.js</code>.</p>
+<pre><code class="js language-js"><span class="hljs-meta">'use strict'</span>
+<span class="hljs-keyword">const</span> Assert = <span class="hljs-built_in">require</span>(<span class="hljs-string">'kado/lib/Assert'</span>)
+<span class="hljs-keyword">const</span> fs = <span class="hljs-built_in">require</span>(<span class="hljs-string">'kado/lib/FileSystem'</span>)
+<span class="hljs-keyword">const</span> HelpModel = <span class="hljs-built_in">require</span>(<span class="hljs-string">'../model/HelpModel'</span>)
+<span class="hljs-keyword">const</span> Module = <span class="hljs-built_in">require</span>(<span class="hljs-string">'kado/lib/Module'</span>)
+<span class="hljs-keyword">const</span> Route = <span class="hljs-built_in">require</span>(<span class="hljs-string">'../lib/Route'</span>)
+<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">Help</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Module</span> </span>{
+ <span class="hljs-keyword">constructor</span> () {
+   <span class="hljs-keyword">super</span>()
+   <span class="hljs-keyword">this</span>.app = <span class="hljs-literal">null</span>
+   <span class="hljs-keyword">this</span>.name = <span class="hljs-string">'help'</span>
+   <span class="hljs-keyword">this</span>.title = <span class="hljs-string">'Help'</span>
+   <span class="hljs-keyword">this</span>.description = <span class="hljs-string">'Manage help articles'</span>
+ }
+</code></pre>
+<p>The code above we use <code>Assert</code>, <code>fs</code>, <code>HelpModel</code>, Module and Route to require
+and connect the listed folder and files. Next we use the class Help extends
+module to create the child class of another class, then we use the
+<code>constructor()</code> function that initializes our object, then using the super
+class to call the constructor to access the parent properties and methods which
+will be the <code>this.app</code>, <code>.name</code>, <code>.title</code>, and <code>.description</code>.</p>
+<p>The next section of code we will use the following: <code>Help.js</code>.</p>
+<pre><code class="js language-js"><span class="hljs-keyword">list</span> () {
+ <span class="hljs-keyword">return</span> async (req, res) =&gt; {
+   <span class="hljs-keyword">const</span> <span class="hljs-keyword">db</span> = this.<span class="hljs-keyword">db</span>.getEngine()
+   <span class="hljs-keyword">const</span> <span class="hljs-keyword">query</span> = HelpModel.<span class="hljs-keyword">list</span>()
+   <span class="hljs-keyword">const</span> rv = await Route.listRoute(<span class="hljs-keyword">db</span>, <span class="hljs-keyword">query</span>)
+   req.locals._pagetitle = '<span class="hljs-keyword">List</span> <span class="hljs-keyword">Help</span> Articles'
+   res.render('admin/<span class="hljs-keyword">help</span>/<span class="hljs-keyword">list</span>', { rows: rv[0], fields: rv[1] })
+ }
+}
+</code></pre>
+<p>The above code creates a list method to show all our Help articles in a list.
+To do so it makes a query to the database using the modules list method and our
+included listRoute helper method from Route. Next, we set the page title and
+finally render the page passing our database return values to the template.</p>
+<p>Use the following for the the next section of code: <code>Help.js</code>.</p>
+<pre><code class="js language-js">listAction<span class="hljs-function"> () {
+ <span class="hljs-params">return async (req,</span> <span class="hljs-params">res)</span> =&gt;</span> {
+   const db = this.db.get<span class="hljs-constructor">Engine()</span>
+   const query = <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">HelpModel</span>.</span></span>delete<span class="hljs-literal">()</span>
+   const rv = await <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Route</span>.</span></span><span class="hljs-built_in">list</span><span class="hljs-constructor">ActionRoute(<span class="hljs-params">db</span>, <span class="hljs-params">query</span>, <span class="hljs-params">req</span>.<span class="hljs-params">body</span>)</span>
+   <span class="hljs-keyword">if</span> (rv.deleted) res.set<span class="hljs-constructor">Header('X-Deleted', <span class="hljs-params">rv</span>.<span class="hljs-params">deleted</span>)</span>
+   res.redirect('/admin/help/')
+ }
+}
+</code></pre>
+<p>The above code adds the edit method which retrieves our Help article from the
+database and then displays a form where the staff member can edit the content.
+Assert.isType ensures that the database returned an appropriate response.
+Finally, we render the <code>admin/help/edit</code> template by passing the instance of the
+<code>HelpModel</code>.</p>
+<p>Moving on to the next section of code you will be using is the following:
+<code>Help.js</code>.</p>
+<pre><code class="js language-js"><span class="hljs-keyword">create</span> () {
+ <span class="hljs-keyword">return</span> (req, res) =&gt; {
+   req.locals._pagetitle = '<span class="hljs-keyword">Create</span> Help Article'
+   res.render('admin/help/<span class="hljs-keyword">create</span>')
+ }
+}
+</code></pre>
+<p>The next line we use <code>create()</code> so that we use the object to set the page title
+and use the create Help article and then render the <code>(‘admin/help/create’)</code>.</p>
+<p>Under the above code you will now be using the following: <code>Help.js</code>.</p>
+<pre><code class="js language-js"><span class="hljs-keyword">edit</span> () {
+ <span class="hljs-keyword">return</span> async (req, res) =&gt; {
+   <span class="hljs-keyword">const</span> <span class="hljs-keyword">db</span> = this.<span class="hljs-keyword">db</span>.getEngine()
+   <span class="hljs-keyword">const</span> <span class="hljs-keyword">query</span> = HelpModel.byId(req.<span class="hljs-keyword">query</span>.<span class="hljs-built_in">get</span>('id'))
+   <span class="hljs-keyword">const</span> rv = await <span class="hljs-keyword">db</span>.execute(<span class="hljs-keyword">query</span>.<span class="hljs-keyword">toString</span>(), <span class="hljs-keyword">query</span>.toArray())
+   <span class="hljs-keyword">Assert</span>.isType('Array', rv[0])
+   <span class="hljs-keyword">const</span> <span class="hljs-keyword">help</span> = new HelpModel(rv[0].shift())
+   res.render('admin/<span class="hljs-keyword">help</span>/<span class="hljs-keyword">edit</span>', { <span class="hljs-keyword">help</span>: <span class="hljs-keyword">help</span> })
+ }
+}
+</code></pre>
+<p>Now we will be using the <code>edit()</code>  in order to edit the db, query and rv. First
+we get the database engine. Then we call the query to the <code>HelpModel.byid</code> to
+get the id query, next we execute the database query to a string and an array.
+The next line we have <code>Assert.isType</code> which will get us the array and get the
+new <code>HelpModel</code> value. Lase we rent the <code>(‘admin/help/edit’, { help: help })</code>.</p>
+<p>Use the following to create the <code>save()</code>: <code>Help.js</code>.</p>
+<pre><code class="js language-js">save () {
+ <span class="hljs-keyword">return</span> <span class="hljs-keyword">async</span> (req, res) =&gt; {
+   <span class="hljs-keyword">const</span> db = <span class="hljs-keyword">this</span>.db.getEngine()
+   <span class="hljs-keyword">const</span> id = req.body.id || <span class="hljs-number">0</span>
+   <span class="hljs-keyword">await</span> Route.saveRoute(db, HelpModel, id, req.body)
+   res.redirect(<span class="hljs-string">'/admin/help/'</span>)
+ }
+}
+</code></pre>
+<p>The save method will allow you to save the changes made on the create or edit
+form into the database. This is done by passing the contents of <code>req.body</code> to
+the <code>Route.saveRoute</code> method which handles inserting or updating the database
+record. The next section of code you will use the following: <code>Help.js</code>.</p>
+<pre><code class="js language-js">admin (app) {
+ <span class="hljs-keyword">this</span>.app = app
+ <span class="hljs-keyword">this</span>.db = <span class="hljs-keyword">this</span>.app.database.getEngine(<span class="hljs-string">'mysql'</span>)
+ app.<span class="hljs-keyword">get</span>(<span class="hljs-string">'/admin/help/'</span>, <span class="hljs-keyword">this</span>.list())
+ app.<span class="hljs-keyword">get</span>(<span class="hljs-string">'/admin/help/create/'</span>, <span class="hljs-keyword">this</span>.create())
+ app.<span class="hljs-keyword">get</span>(<span class="hljs-string">'/admin/help/edit/'</span>, <span class="hljs-keyword">this</span>.edit())
+ app.post(<span class="hljs-string">'/admin/help/'</span>, <span class="hljs-keyword">this</span>.listAction())
+ app.post(<span class="hljs-string">'/admin/help/save/'</span>, <span class="hljs-keyword">this</span>.save())
+}
+</code></pre>
+<p>Here we register the admin panel routes that are available.</p>
+<p>Now we will be using the following code for the next section: <code>Help.js</code>.</p>
+<pre><code class="js language-js"> main (<span class="hljs-keyword">app</span>) {
+   <span class="hljs-keyword">app</span>.<span class="hljs-built_in">get</span>('/<span class="hljs-keyword">help</span>/', (req, res) =&gt; {
+     res.render(fs.path.join(__dirname, '/<span class="hljs-keyword">view</span>/<span class="hljs-keyword">help</span>.html'))
+   })
+ }
+}
+</code></pre>
+<p>This portion of the module registers the Help routes that into the main
+interface.</p>
+<p>The final portion of code exports our module objects so they can be used to
+register into the application. <code>Help.js</code>.</p>
+<pre><code class="js language-js"><span class="hljs-attr">Help.HelpModel</span> = HelpModel
+<span class="hljs-attr">Help.Model</span> = Help.HelpModel
+<span class="hljs-attr">module.exports</span> = Help
+</code></pre>
\ No newline at end of file
diff --git a/main/views/guide/4/database-work-flow.html b/main/views/guide/4/database-work-flow.html
index b92a112a8ec866d0fdc1f7e5451c592738215023..19bdbd561c6f65047295c54363758c154e12e34f 100644
--- a/main/views/guide/4/database-work-flow.html
+++ b/main/views/guide/4/database-work-flow.html
@@ -1,8 +1,259 @@
 <h1 id="databaseworkflows">Database Work Flows</h1>
-<p>Unfortunately we have not yet completed this guide. However, it is under
-construction! You are welcome to check the progress made building this guide
-or contribute to it yourself at the following URL:</p>
-<ul>
-<li><a href="https://git.nullivex.com/kado/kado/issues/44">Build Database Work Flow Guide</a></li>
-</ul>
-<p>Thank you for checking into the Kado documentation!</p>
\ No newline at end of file
+<p>How to use Databases with Kado.</p>
+<p>Welcome to the Database Work Flow guide in guide. I am going to walk you through
+the process of connecting to and executing queries against a MySQL database.
+This guide will also show you how to work with Kado Data Models and make
+querying a breeze.</p>
+<p>The first step you will need to do is go to your terminal and install MySQL2.
+In order to communicate with the database server directly we must install a
+driver to do so. Our guide and basic Database tool set is made for SQL based
+systems and we provide a driver engine for MySQL which utilizes the MySQL2
+driver that is available from NPM. Before proceeding, we must install the
+driver directly into the project with the following command:
+<code>npm install mysql2</code></p>
+<p>Now that you have completed the
+<a href="HelloWorld.md">Hello World</a> and
+<a href="MakeSimpleWebsite.md">Make a Simple Website</a> guides,
+the first thing you will be doing is creating a model folder and in that folder
+you will be creating a JavaScript file. For this guide we are going to name the
+model file PetModel.js, The following code connects the model and builds the
+schema. Then we save the table name using the <code>const tableName = 'Pet'</code>. Then we
+will create a <code>fieldList</code> method and return an object containing all the fields
+in our table.</p>
+<p>NOTE: In order to keep track of records in a database it is critical to
+have an updated and created timestamp that help keep track of records and their
+age. Not all Models will need these fields but those Models are rare. For our
+purposes we use the <code>createdAt</code> and <code>updatedAt</code> which are datetime fields
+and track record timing. In there you will be using the following code:
+<code>PetModel.js</code>.</p>
+<pre><code class="js language-js"><span class="hljs-symbol">'use</span> strict'
+const <span class="hljs-type">Model</span> = require(<span class="hljs-symbol">'kado</span>/lib/<span class="hljs-type">Model</span>')
+const <span class="hljs-type">Schema</span> = require(<span class="hljs-symbol">'kado</span>/lib/<span class="hljs-type">Schema</span>')
+const tableName = <span class="hljs-symbol">'Pe</span>t'
+<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">PetModel</span> <span class="hljs-keyword">extends</span> <span class="hljs-title">Model</span> </span>{
+  static fieldList () {
+    <span class="hljs-keyword">return</span> {
+      id: {
+        <span class="hljs-class"><span class="hljs-keyword">type</span></span>: <span class="hljs-symbol">'IN</span>T',
+        length: <span class="hljs-symbol">'1</span>1',
+        nullable: <span class="hljs-literal">false</span>,
+        signed: <span class="hljs-literal">false</span>,
+        autoIncrement: <span class="hljs-literal">true</span>
+      },
+      name: { nullable: <span class="hljs-literal">false</span> },
+      <span class="hljs-class"><span class="hljs-keyword">type</span></span>: {},
+      breed: {},
+      color: {},
+      weight: {},
+      height: {},
+      length: {},
+      createdAt: { <span class="hljs-class"><span class="hljs-keyword">type</span></span>: <span class="hljs-symbol">'datetim</span>e', nullable: <span class="hljs-literal">false</span>, writable: <span class="hljs-literal">false</span> },
+      updatedAt: { <span class="hljs-class"><span class="hljs-keyword">type</span></span>: <span class="hljs-symbol">'datetim</span>e', nullable: <span class="hljs-literal">false</span> }
+    }
+  }
+</code></pre>
+<h2 id="createtable">Create Table</h2>
+<p>Next, you will be creating a new method called <code>createTable</code> which will be
+static and will return a build Schema object for use creating a table from the
+model. Place the following code below the <code>fieldList</code> method in your.
+<code>PetModel.js</code>.</p>
+<pre><code class="js language-js">  static createTable () {
+    const table = <span class="hljs-keyword">Schema</span>.<span class="hljs-keyword">SQL</span>.<span class="hljs-keyword">create</span>(tableName)
+    const fields = PetModel.fieldList()
+    <span class="hljs-keyword">for</span> (const <span class="hljs-type">name</span> <span class="hljs-keyword">in</span> fields) {
+      <span class="hljs-keyword">if</span> (!<span class="hljs-keyword">Object</span>.prototype.hasOwnProperty.<span class="hljs-keyword">call</span>(fields, <span class="hljs-type">name</span>)) <span class="hljs-keyword">continue</span>
+      <span class="hljs-keyword">table</span>.field(<span class="hljs-type">name</span>, fields[<span class="hljs-type">name</span>])
+    }
+    <span class="hljs-keyword">table</span>.<span class="hljs-keyword">primary</span>(<span class="hljs-string">'id'</span>)
+    <span class="hljs-keyword">table</span>.<span class="hljs-keyword">index</span>(<span class="hljs-string">'name_unique'</span>, [<span class="hljs-string">'name'</span>], { <span class="hljs-keyword">unique</span>: <span class="hljs-keyword">true</span> })
+    <span class="hljs-keyword">table</span>.<span class="hljs-keyword">index</span>(<span class="hljs-string">'createdAt_index'</span>, [<span class="hljs-string">'createdAt'</span>])
+    <span class="hljs-keyword">table</span>.<span class="hljs-keyword">index</span>(<span class="hljs-string">'updatedAt_index'</span>, [<span class="hljs-string">'updatedAt'</span>])
+    <span class="hljs-keyword">return</span> <span class="hljs-keyword">table</span>
+  }
+</code></pre>
+<p>In this section of the code you will be using it for inserting, searching and
+updating within your table. <code>PetModel.js</code></p>
+<pre><code class="js language-js">static insert (fields) {
+ <span class="hljs-keyword">if</span> (fields<span class="hljs-operator"> === </span>null) {
+    fields = <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Model</span>.</span></span>filter<span class="hljs-constructor">Fields(PetModel.<span class="hljs-params">fieldList</span>()</span>, { insert: <span class="hljs-literal">false</span> })
+ }
+ return <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Model</span>.</span></span>insert<span class="hljs-constructor">Query(<span class="hljs-params">tableName</span>, <span class="hljs-params">fields</span>)</span>
+ }
+
+  static insert (fields) {
+    <span class="hljs-keyword">if</span> (fields<span class="hljs-operator"> === </span>null) {
+      fields = <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Model</span>.</span></span>filter<span class="hljs-constructor">Fields(PetModel.<span class="hljs-params">fieldList</span>()</span>, { insert: <span class="hljs-literal">false</span> })
+    }
+    return <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Model</span>.</span></span>insert<span class="hljs-constructor">Query(<span class="hljs-params">tableName</span>, <span class="hljs-params">fields</span>)</span>
+  }
+
+  static search (phrase, fields) {
+    return <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Model</span>.</span></span>search<span class="hljs-constructor">Query(<span class="hljs-params">tableName</span>, <span class="hljs-params">phrase</span>, <span class="hljs-params">fields</span>)</span>
+  }
+
+  static update (fields) {
+    <span class="hljs-keyword">if</span> (fields<span class="hljs-operator"> === </span>null) {
+      fields = <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Model</span>.</span></span>filter<span class="hljs-constructor">Fields(PetModel.<span class="hljs-params">fieldList</span>()</span>, { writable: <span class="hljs-literal">false</span> })
+    }
+    return <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Model</span>.</span></span>update<span class="hljs-constructor">Query(<span class="hljs-params">tableName</span>, <span class="hljs-params">fields</span>)</span>
+  }
+
+  static <span class="hljs-built_in">list</span> <span class="hljs-literal">()</span> { return <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Model</span>.</span></span><span class="hljs-built_in">list</span><span class="hljs-constructor">Query(<span class="hljs-params">tableName</span>)</span> }
+  static byId (id) { return <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Model</span>.</span></span>by<span class="hljs-constructor">IdQuery(<span class="hljs-params">tableName</span>, '<span class="hljs-params">id</span>', <span class="hljs-params">id</span>)</span> }
+  static delete <span class="hljs-literal">()</span> { return <span class="hljs-module-access"><span class="hljs-module"><span class="hljs-identifier">Model</span>.</span></span>delete<span class="hljs-constructor">Query(<span class="hljs-params">tableName</span>)</span> }
+}
+<span class="hljs-keyword">module</span>.exports = PetModel
+</code></pre>
+<h1 id="configjs">config.js</h1>
+<p>Once you have completed adding the query helper methods. You will want to create
+a config folder in your project root and use the following code. I will be
+filling out parts of the code to specify what you will need in your code as an
+example. You can change the following lines of code to what is needed for your
+project names: appTitle, host, user, password, database. Now see the contents of
+config.js. <code>config.js</code></p>
+<pre><code class="js language-js"><span class="hljs-meta">'use strict'</span>
+<span class="hljs-keyword">const</span> cfg = {
+  <span class="hljs-attr">appTitle</span>: <span class="hljs-string">'DatabaseWorkFlow'</span>,
+  <span class="hljs-attr">main</span>: {
+    <span class="hljs-attr">host</span>: <span class="hljs-literal">null</span>,
+    <span class="hljs-attr">cookieSecret</span>: <span class="hljs-literal">null</span>,
+    <span class="hljs-attr">trustProxy</span>: <span class="hljs-literal">true</span>
+  },
+  <span class="hljs-attr">mysql</span>: {
+    <span class="hljs-attr">host</span>: <span class="hljs-string">'localhost'</span>,
+    <span class="hljs-attr">user</span>: <span class="hljs-string">'dwf'</span>,
+    <span class="hljs-attr">password</span>: <span class="hljs-string">'dwf'</span>,
+    <span class="hljs-attr">database</span>: <span class="hljs-string">'dwf'</span>
+  }
+}
+<span class="hljs-built_in">module</span>.exports = cfg
+</code></pre>
+<p>By adding these lines of code you are telling your database that the host will
+be local to your machine. The user, the password and database
+are set to something simple for our development purposes. For production use a
+much stronger password! but for now to get it set up use something small and
+what your comfortable with.</p>
+<p>Next, you should already have an <code>app.js</code> ready and can now add the
+following code: <code>app.js</code>.</p>
+<pre><code class="js language-js"><span class="hljs-variable">const</span> <span class="hljs-variable">Database</span> = <span class="hljs-function"><span class="hljs-title">require</span>(<span class="hljs-string">'kado/lib/Database'</span>)</span>
+</code></pre>
+<p>This will require your kado database source.</p>
+<p>This will be the code you use for your MySQL connection: <code>app.js</code>.</p>
+<pre><code class="js language-js">const mysql = <span class="hljs-keyword">new</span> Database.<span class="hljs-constructor">MySQL(<span class="hljs-params">cfg</span>.<span class="hljs-params">mysql</span>)</span>
+app.database.add<span class="hljs-constructor">Engine('<span class="hljs-params">mysql</span>', <span class="hljs-params">mysql</span>)</span>
+</code></pre>
+<p>Add to <code>app.js</code>. This code is making a new Kado Database connect system made for
+the MYSQL2 driver and then adding to Kado as a database engine named MYSQL.</p>
+<p>The next part you will use the following code in your <code>app.js</code> under your MYSQL
+connection to create a database schema:</p>
+<p><code>app.cli.command</code></p>
+<pre><code class="js language-js">app.cli.command(<span class="hljs-string">'db'</span>, <span class="hljs-string">'test'</span>, {
+  action: <span class="hljs-function"><span class="hljs-params">()</span> =&gt;</span> {
+    <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Database OK'</span>)
+    <span class="hljs-keyword">return</span> <span class="hljs-number">1</span>
+  }
+})
+</code></pre>
+<p>You will be creating a database schema with the cli command
+(Command line interface application) this also gets you through the application
+start up and prints the log message.</p>
+<p>The next part of code you will be putting in your <code>app.js</code> right under the
+database schema will be this section. This part of the code will be the code
+that draws a connection to your mysql connection.</p>
+<p><code>app.cli.command</code></p>
+<pre><code class="js language-js">app.cli.command(<span class="hljs-string">'db'</span>, <span class="hljs-string">'init'</span>, {
+  action: <span class="hljs-function"><span class="hljs-params">(opts)</span> =&gt;</span> {
+    const db = app.database.getEngine(<span class="hljs-string">'mysql'</span>).getEngine()
+</code></pre>
+<p>The last section of your code you will put in your app.js is the following,
+this line of code will load your models.</p>
+<p><code>app.cli.command</code></p>
+<pre><code class="js language-js">    <span class="hljs-keyword">const</span> models = [
+      <span class="hljs-built_in">require</span>(<span class="hljs-string">'./model/PetModel'</span>)
+    ]
+    <span class="hljs-keyword">const</span> promises = []
+    models.forEach(<span class="hljs-function">(<span class="hljs-params">model</span>) =&gt;</span> {
+      <span class="hljs-keyword">if</span> (opts.name &amp;&amp; model.name !== opts.name) <span class="hljs-keyword">return</span>
+      <span class="hljs-keyword">const</span> query = model.createTable()
+      promises.push(db.execute(query.toString(), query.toArray()))
+    })
+    <span class="hljs-keyword">return</span> <span class="hljs-built_in">Promise</span>.all(promises)
+      .then(<span class="hljs-function">(<span class="hljs-params">result</span>) =&gt;</span> {
+        <span class="hljs-built_in">console</span>.log(<span class="hljs-string">'Table creation complete! '</span> +
+          <span class="hljs-string">`Created <span class="hljs-subst">${result.length}</span> model(s).`</span>)
+        <span class="hljs-keyword">return</span> result.length
+      })
+  }
+})
+</code></pre>
+<p>Now that you have finished the following steps above you will open your
+preferred web browser and go to your MySQL connection interface and create a
+database and give it a name similar to your project I used (dwf) and go to your
+SQL command line and use the following query: <code>sql QUERY</code></p>
+<pre><code class="sql language-sql">`CREATE<span class="hljs-built_in"> USER </span><span class="hljs-string">'dwf'</span>@<span class="hljs-string">'localhost'</span> IDENTIFIED BY <span class="hljs-string">'dwf'</span>;`
+</code></pre>
+<p>The code above creates a user in the MYSQL server.</p>
+<p>Now proceed to grant the new user permissions on the database with the
+following query: <code>sql QUERY</code></p>
+<pre><code class="sql language-sql">`<span class="hljs-keyword">GRANT</span> <span class="hljs-keyword">ALL</span> <span class="hljs-keyword">ON</span> dwf.* <span class="hljs-keyword">to</span> <span class="hljs-string">'dwf'</span>@<span class="hljs-string">'localhost'</span>;`
+</code></pre>
+<p>this command will grant the new dwf user ALL(*)
+rights on the dwf table. After doing this you should have a fully
+privileged MYSQL user for your database.</p>
+<p>To see the full code see the:
+<a href="https://git.nullivex.com/Tru4hunnid/databaseworkflowguide.git">project repository</a></p>
+<h2 id="querycache">Query Cache</h2>
+<p>When working in a display driven environment where the readers massively
+outweigh the change frequency in the database, it is prudent to employ
+QueryCache on complex queries that make use of JOINS and take extra
+database resources.</p>
+<p>This works by taking the result of an expensive query, assigning it a
+TTL (time to live in seconds) and then storing the result in a
+different table or database by key. The advantage here is that we can
+quickly look the query up by key and output the parsed data without
+exhausting CPU resources recalculating a known result.</p>
+<p>It is important not to use Query Cache as a blanket because it can
+cause very unpredictable behavior. However, when properly employed
+to the high rate queries the Query Cache can significantly improve
+site throughput.</p>
+<p>Let us take a quick look at how to use Query Cache and interchange
+it with existing connections.</p>
+<p>Consider the following code which could be a new file called
+<code>cacheTest.js</code> in your example project:</p>
+<pre><code class="js language-js"><span class="hljs-comment">// include all the external resources</span>
+<span class="hljs-keyword">const</span> Application = require('kado')
+<span class="hljs-keyword">const</span> cfg = require('./config')
+<span class="hljs-keyword">const</span> Database = require('kado/lib/Database')
+<span class="hljs-keyword">const</span> PetModel = require('./PetModel')
+<span class="hljs-keyword">const</span> QueryCache = require('kado/lib/QueryCache/)
+<span class="hljs-comment">// make a new application</span>
+<span class="hljs-keyword">const</span> <span class="hljs-keyword">app</span> = Application.getInstance()
+<span class="hljs-comment">// setup a database connection and add it to the app</span>
+<span class="hljs-keyword">const</span> mysql = new Database.DatabaseMySQL(cfg.mysql)
+<span class="hljs-keyword">app</span>.database.addEngine('mysql', mysql)
+<span class="hljs-comment">// setup a query cache using the database connection and bundled model</span>
+<span class="hljs-keyword">const</span> qc = new QueryCache({
+  <span class="hljs-keyword">db</span>: mysql,
+  model: QueryCache.QueryCacheModel
+})
+<span class="hljs-comment">// connect to the database</span>
+await <span class="hljs-keyword">app</span>.start()
+<span class="hljs-comment">// make a query</span>
+<span class="hljs-keyword">const</span> <span class="hljs-keyword">query</span> = PetModel.byId(1)
+<span class="hljs-comment">// execute normal</span>
+<span class="hljs-keyword">const</span> normal = await <span class="hljs-keyword">query</span>.execute(mysql)
+<span class="hljs-comment">// execute against cache</span>
+<span class="hljs-keyword">const</span> cached = <span class="hljs-keyword">query</span>.execute(qc)
+<span class="hljs-comment">// output the results</span>
+console.<span class="hljs-built_in">log</span>(normal, cached)
+</code></pre>
+<p>The most important part of the above code to look at is
+where we execute the query. Query Cache works really easily
+by reflecting back into your original database driver so it
+can be used in place of the driver to easily activate cached
+queries or turn the caching off.</p>
+<p>Our approach states that caching of queries should be explicit
+and placed by developers after thinking of the application flow
+and impact of using cache. This helps alleviate a lot of the
+common problems due to blanket caching. Best wishes getting
+your server load reduced!</p>
\ No newline at end of file
diff --git a/main/views/guide/4/getting-started.html b/main/views/guide/4/getting-started.html
index 805c808b0f4b7aaf2cb621d52bd3f44ffa4af7ae..68101684785e5c244fe5857f9388cfb259a44945 100644
--- a/main/views/guide/4/getting-started.html
+++ b/main/views/guide/4/getting-started.html
@@ -7,7 +7,7 @@ or a new project in your code editor. Also you should have a <code>package.json<
 to contain information about your project. If not, you need to create one. The
 easiest way is to run <code>npm init</code> and follow the on screen instructions.</p>
 <p>Second, it is time to install Kado. Full details and instructions can be read in
-<a href="./Download.md">Download</a> guide. For our purposes, we are going to install from
+<a href="/info/download/">Download</a> guide. For our purposes, we are going to install from
 NPM by running the following command from your projects root folder.</p>
 <pre><code>$ npm install kado
 </code></pre>
@@ -44,5 +44,5 @@ app.start<span class="hljs-literal">()</span>.<span class="hljs-keyword">then</s
 <a href="http://localhost:3000">localhost:3000</a> you can click this link to get there.</p>
 <p>Upon loading the page, you should see the word <code>Hello</code>. This will signify your
 new application is working! Great work! Now if you are ready to get more
-familiar with Kado, see the <a href="./HelloWorld.md">Hello World</a> guide
+familiar with Kado, see the <a href="/guide/hello-world/">Hello World</a> guide
 to go to the next stage.</p>
\ No newline at end of file
diff --git a/main/views/guide/4/hello-world.html b/main/views/guide/4/hello-world.html
index 4c364fbdfa8d1bc90b448f633accc305f81c1364..d39ce37d74b7f627015c257d6ce4ed6ee63e83d3 100644
--- a/main/views/guide/4/hello-world.html
+++ b/main/views/guide/4/hello-world.html
@@ -1,5 +1,5 @@
 <h1 id="helloworld">Hello World</h1>
-<p>After reading the <a href="./GettingStarted.md">Getting Starting</a> guide you should have a
+<p>After reading the <a href="/guide/getting-started/">Getting Starting</a> guide you should have a
 basic understanding of how to get Kado off the ground for serving web requests.
 This guide will expand on that understanding and provide new example code to
 add a view rending engine as well as a template to your project.</p>
@@ -29,7 +29,7 @@ app.get(<span class="hljs-character">'/'</span>,<span class="hljs-function"> (<s
 app.start<span class="hljs-literal">()</span>.<span class="hljs-keyword">then</span>(<span class="hljs-literal">()</span> =&gt; { return app.listen<span class="hljs-literal">()</span> })
 </code></pre>
 <p>There are a few portions of this code that require explanation lets start with
-what was added from the <a href="./GettingStarted.md">Getting Started</a> guide.</p>
+what was added from the <a href="/guide/getting-started/">Getting Started</a> guide.</p>
 <p>First, we added the <code>FileSystem</code> library to handle building paths and working
 with files and folders. This is done with the following code:</p>
 <pre><code class="js language-js"><span class="hljs-variable">const</span> <span class="hljs-variable">fs</span> = <span class="hljs-function"><span class="hljs-title">require</span>(<span class="hljs-string">'kado/lib/FileSystem'</span>)</span>
@@ -79,5 +79,5 @@ terminal of your project root and run the following command.</p>
 web server is complete and serving "Hello World" HTML from
 <a href="http://localhost:3000">localhost:3000</a></p>
 <p>Congratulations! You are one stage further to creating amazing web applications
-using Kado. To learn more see the <a href="./MakeSimpleWebsite.md">Make a Simple Website</a>
+using Kado. To learn more see the <a href="/guide/make-simple-website/">Make a Simple Website</a>
 In this guide we explore using partials and routes to create a basic website.</p>
\ No newline at end of file
diff --git a/main/views/guide/4/introduction.html b/main/views/guide/4/introduction.html
new file mode 100644
index 0000000000000000000000000000000000000000..521795a63f3f3eaf18df231de8be1e615ca7c95b
--- /dev/null
+++ b/main/views/guide/4/introduction.html
@@ -0,0 +1,47 @@
+<h1 id="introduction">Introduction</h1>
+<p>Kado has been a long running idea of ours to help propel the JavaScript
+community forward. The first few versions of Kado were a lot of experimentation
+on how to better abstract the functionality of JavaScript applications in order
+to reduce development time. Now Kado is ready for the big stage and has all
+the supporting code and documentation to prove it!</p>
+<h2 id="history">History</h2>
+<p>During the prototype process several usable versions were released
+This version accomplished the goal of less work for the developer, and more time
+spent preparing application code. Next, we learned that we could take this step
+even further by changing Kado from a packaged application into a collection
+of libraries that could be used to build what Kado was using with no
+dependencies.</p>
+<p>Now, after 6 months of work and 500+ commits Kado 4 is ready to see feedback
+from our wonderful community. We hope that Kado 4 will vastly improve the
+performance of your applications. Also, we hope that Kado 4 will reduce the
+amount of code you have to write. Most importantly, Kado 4 will significantly
+reduce the amount of third party software your application will depend upon. Our
+goal is that Node.JS + Kado is a combination that puts the developer in control
+and provides enough tool depth as well as documentation depth to build applications with
+few to no outside dependencies.</p>
+<h2 id="whyusekado">Why Use Kado</h2>
+<p>This is impmortant due to the fact  maintenance of those outside packages are
+vital to the continued success of your applications. Without quality
+maintenance, packages are susceptible to incompatibilities with future versions
+of Node.JS as well as SECURITY VULNERABILITIES that may go unhandled!
+Furthermore, without being able to easily introspect which packages each named
+dependency relies on, it becomes a struggle making sure your application is
+compliant with the imposed licenses.</p>
+<p>Kado relieves that pain by providing common functionality to meet the needs of
+command line applications and web servers without the use of external
+software. Prior to Kado even basic web servers relied on hundreds of external
+dependencies just to say hello world. We also believe Kado is just easier and
+more fun to work with. However, we will let you be the judge of that!</p>
+<h2 id="thefutureofkado">The Future of Kado</h2>
+<p>Moving forward Kado aims to achieve two primary mission goals. The first
+is to provide a stable environment for applications written on Kado by using
+an LTS backed release schedule. Second, we aim to merge more common application
+functionality written on ES6+ and matching Kado standards into our package.
+It is key to note that the Kado team is backed by Esited hosting and Nullivex
+software, companies with a long standing history in the technology world dating
+back to 2003. Our commitment to quality software continues to grow as does our
+love for making easy to use libraries for your enjoyment.</p>
+<h2 id="conclusion">Conclusion</h2>
+<p>We hope this gives you some background so that you can be rest assured your
+efforts in Kado will not go in vein. Ready to get started? Head over to our
+<a href="/guide/quick-start/">Quick Start</a> guide and get going in a few minutes!</p>
\ No newline at end of file
diff --git a/main/views/guide/4/make-simple-website.html b/main/views/guide/4/make-simple-website.html
index bc8d9affd05d686b02f9616ce601f33ab3a8aeb1..67880d2cd08ee8732145e2662cffe8940a66ea06 100644
--- a/main/views/guide/4/make-simple-website.html
+++ b/main/views/guide/4/make-simple-website.html
@@ -1,11 +1,11 @@
 <h1 id="makeasimplewebsite">Make A Simple Website</h1>
-<p>After reading the <a href="./HelloWorld.md">Hello World</a> guide you should have an
+<p>After reading the <a href="/guide/hello-world/">Hello World</a> guide you should have an
 understanding of how to have Kado serve templates to web requests.
 This guide will expand on that knowledge and provide example code to
 add rending partial views and static files to your project.</p>
 <p>Now, it is assumed you have created a project, initiated your <code>package.json</code>
 file and installed <code>kado</code> into your project. Also, it is assumed you have an
-<code>app.js</code> created by completed the <a href="./HelloWorld.md">Hello World</a> guide. Below,
+<code>app.js</code> created by completing the <a href="/guide/hello-world/">Hello World</a> guide. Below,
 is an updated code example containing our static server and view rendering.</p>
 <pre><code class="js language-js"><span class="hljs-comment">// require kado sources</span>
 const Application = require('kado')
@@ -32,7 +32,7 @@ app.get(<span class="hljs-character">'/'</span>,<span class="hljs-function"> (<s
 app.start<span class="hljs-literal">()</span>.<span class="hljs-keyword">then</span>(<span class="hljs-literal">()</span> =&gt; { return app.listen<span class="hljs-literal">()</span> })
 </code></pre>
 <p>There are a few portions of this code that require explanation let us start with
-what was added from the <a href="./HelloWorld.md">Hello World</a> guide.</p>
+what was added from the <a href="/guide/hello-world/">Hello World</a> guide.</p>
 <p>We added the <code>StaticServer</code> instance to handle requests for static files.
 This is done with the following code:</p>
 <pre><code class="js language-js">const staticRoot = fs.path.join(__dirname, 'public')
@@ -53,7 +53,7 @@ following code:</p>
 <span class="hljs-selector-tag">a</span> { <span class="hljs-attribute">color</span>: red; }
 <span class="hljs-selector-tag">h1</span> { <span class="hljs-attribute">color</span>: purple; }
 </code></pre>
-<p>This wont do much but this should make a noticeable difference to the page.</p>
+<p>This should make a noticeable difference to the page.</p>
 <p>Next, lets break our header and footer into partials that we can call them more
 than once. So, within the <code>views</code> folder create a file named <code>header.html</code> and
 place the following code inside:</p>
@@ -77,13 +77,13 @@ of the <code>index.html</code> file should now look like this:</p>
 <span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span>Hello World<span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
 </span><span class="hljs-template-variable">{{&gt;footer}}</span><span class="xml">
 </span></code></pre>
-<p>Once that code is placed to the file and the file is saved, change to the
+<p>Place the code, and the file saved, change to the
 terminal of your project root and run the following command.</p>
 <pre><code>$ node app
 </code></pre>
-<p>This command should execute without error. Now, your web server is complete and serving "Hello World" HTML from
-<a href="http://localhost:3000">localhost:3000</a> now with your partials being rendered
-as well as serving the new CSS.</p>
+<p>This command should execute without error. Now, your web server is complete
+and serving "Hello World" HTML from <a href="http://localhost:3000">localhost:3000</a> now
+with your partials rendered, and serving the new CSS.</p>
 <p>Congratulations! Another stage complete on learning Kado. Now advance to the
-<a href="./BuildAdminPanel.md">Build an Admin Panel</a> guide where we explain how to turn
+<a href="/guide/build-admin-panel/">Build an Admin Panel</a> guide where we explain how to turn
 your basic website into a fully working administration panel.</p>
\ No newline at end of file
diff --git a/main/views/guide/4/views-rendering.html b/main/views/guide/4/views-rendering.html
index 00f88912a80266b83bbd88442693dabca658709c..15e985584bd3aa5f7b5808c2cfa3e89d7a0ec90d 100644
--- a/main/views/guide/4/views-rendering.html
+++ b/main/views/guide/4/views-rendering.html
@@ -1,8 +1,39 @@
 <h1 id="viewsandrendering">Views and Rendering</h1>
-<p>Unfortunately we have not yet completed this guide. However, it is under
-construction! You are welcome to check the progress made building this guide
-or contribute to it yourself at the following URL:</p>
-<ul>
-<li><a href="https://git.nullivex.com/kado/kado/issues/45">Build Views and Rendering Guide</a></li>
-</ul>
-<p>Thank you for checking into the Kado documentation!</p>
\ No newline at end of file
+<p>When developing websites it is critical to be able to template HTML so that it
+can be loaded with data and sent to the browser. To make this process as easy
+as possible on the developer Kado has a View system similar to that used by
+the Database system. Also, Kado comes with the Mustache templating system
+built-in and easy to activate.</p>
+<p>Let's go over some examples for activating the view system first.</p>
+<p>We will first assume you have an <code>app.js</code> and have at least looked out our
+<a href="">Hello World</a> guide, if not take a peek. Next, we take
+a look a few lines of code that will activate our view engine.</p>
+<pre><code class="js language-js">// <span class="hljs-keyword">add</span> a <span class="hljs-keyword">view</span> engine
+const <span class="hljs-keyword">View</span> = require(<span class="hljs-string">'kado/lib/View'</span>)
+const viewFolder = fs.path.<span class="hljs-keyword">join</span>(__dirname, <span class="hljs-string">'view'</span>)
+app.<span class="hljs-keyword">view</span>.addEngine(<span class="hljs-string">'mustache'</span>, <span class="hljs-built_in">new</span> <span class="hljs-keyword">View</span>.ViewMustache(viewFolder))
+app.<span class="hljs-keyword">view</span>.activateEngine(<span class="hljs-string">'mustache'</span>)
+</code></pre>
+<p>Now, notice we include the <code>View</code> Kado library which comes with our
+<code>View.ViewMustache</code> engine. The engine ties directly into the built in
+<code>Mustache</code> library. After that, it is a matter of establishing a view
+folder, ours is <code>&lt;project root&gt;/view</code> and then passing the view system to
+the application. Finally, activate the view system, so we can render with it.</p>
+<p>Next, let us make a simple template at <code>view/index.html</code> and with the following:</p>
+<pre><code class="html language-html"><span class="xml"><span class="hljs-meta">&lt;!doctype <span class="hljs-meta-keyword">HTML</span>&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">html</span> <span class="hljs-attr">lang</span>=<span class="hljs-string">"en"</span>&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">body</span>&gt;</span>
+<span class="hljs-tag">&lt;<span class="hljs-name">h1</span>&gt;</span></span><span class="hljs-template-variable">{{test}}</span><span class="xml"><span class="hljs-tag">&lt;/<span class="hljs-name">h1</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">body</span>&gt;</span>
+<span class="hljs-tag">&lt;/<span class="hljs-name">html</span>&gt;</span>
+</span></code></pre>
+<p>Now, make a route to get to this file from your <code>app.js</code> or a Route object.</p>
+<pre><code class="js language-js">app.<span class="hljs-built_in">get</span>(<span class="hljs-string">'/'</span>, (req, <span class="hljs-keyword">res</span>) =&gt; { <span class="hljs-keyword">res</span>.render(<span class="hljs-string">'index'</span>, { tes<span class="hljs-variable">t:</span> <span class="hljs-string">'Hi!'</span> })})
+</code></pre>
+<p>This route will send the URI <code>/</code> to our method, and then we render the template
+<code>index</code> with the parameter <code>{ test: 'Hi!' }</code>. Provided this works correctly
+you will see a large print of <code>Hi!</code> on the screen after running your app using.</p>
+<pre><code>$ node app
+</code></pre>
+<p>Make sure and run this command from your project root folder.</p>
+<p>To see more details on working with mustache see <a href="/doc/mustache/">Mustache</a>.</p>
\ No newline at end of file
diff --git a/main/views/guide/4/writing-tests.html b/main/views/guide/4/writing-tests.html
index bbfbe5c002399404f4e3b30e40d326244beca9d6..93df77e0837ef581267c12949518e00fb8914e2a 100644
--- a/main/views/guide/4/writing-tests.html
+++ b/main/views/guide/4/writing-tests.html
@@ -5,4 +5,4 @@ the name of the library it is testing such as <code>Asset.js</code> and
 <code>Asset.test.js</code></p>
 <p>Tests are written using the <code>Validate.Assert</code> library which can be
 included using <code>const { expect } = require('../lib/Validate')</code> from
-within the tests. See <a href="../api/Validate.md">Validate.js</a> for more.</p>
\ No newline at end of file
+within the tests. See <a href="/doc/validate/">Validate.js</a> for more.</p>
\ No newline at end of file
diff --git a/main/views/info.json b/main/views/info.json
index ecbfd0575e8355ce78e3ac6e47b43001d311741d..0e3455c0a5a53b9f43303de3186dff0927745824 100644
--- a/main/views/info.json
+++ b/main/views/info.json
@@ -1 +1,963 @@
-{"v4":{"remoteUrl":"https://git.nullivex.com/nullivex/kado/tree/master/","remoteBaseUrl":"https://git.nullivex.com/nullivex/kado/blob/master","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master","latest":true,"article":{"kado-4-released":"/doc/article/Kado4Released.md","thesis":"/doc/article/Thesis.md","upgrading-from-kado-3":"/doc/article/UpgradingFromKado3.md"},"doc":{"application":"/doc/Application.md","asset":"/doc/Asset.md","assert":"/doc/Assert.md","child-process":"/doc/ChildProcess.md","cluster":"/doc/Cluster.md","command":"/doc/Command.md","command-server":"/doc/CommandServer.md","connect":"/doc/Connect.md","connect-engine":"/doc/ConnectEngine.md","cron":"/doc/Cron.md","database":"/doc/Database.md","email":"/doc/Email.md","etag":"/doc/ETag.md","event":"/doc/Event.md","file-system":"/doc/FileSystem.md","format":"/doc/Format.md","get-opt":"/doc/GetOpt.md","history":"/doc/History.md","hyper-text":"/doc/HyperText.md","language":"/doc/Language.md","library":"/doc/Library.md","lifecycle":"/doc/Lifecycle.md","log":"/doc/Log.md","mapper":"/doc/Mapper.md","message":"/doc/Message.md","mime":"/doc/Mime.md","module":"/doc/Module.md","navigation":"/doc/Navigation.md","parser":"/doc/Parser.md","path-exp":"/doc/PathExp.md","permission":"/doc/Permission.md","profiler":"/doc/Profiler.md","router":"/doc/Router.md","search":"/doc/Search.md","session":"/doc/Session.md","test-runner":"/doc/TestRunner.md","util":"/doc/Util.md","validate":"/doc/Validate.md","view":"/doc/View.md"},"guide":{"advanced-techniques":"/doc/guide/AdvancedTechniques.md","build-admin-panel":"/doc/guide/BuildAdminPanel.md","database-work-flow":"/doc/guide/DatabaseWorkFlow.md","getting-started":"/doc/guide/GettingStarted.md","hello-world":"/doc/guide/HelloWorld.md","make-simple-website":"/doc/guide/MakeSimpleWebsite.md","quick-start":"/doc/guide/QuickStart.md","views-rendering":"/doc/guide/ViewsRendering.md","working-with-email":"/doc/guide/WorkingWithEmail.md","writing-tests":"/doc/guide/WritingTests.md"},"info":{"about-us":"/doc/info/AboutUs.md","changelog":"/CHANGELOG.md","contributing":"/CONTRIBUTING.md","download":"/doc/info/Download.md","home":"/doc/info/Home.md","introduction":"/doc/info/Introduction.md","license":"/LICENSE.md","why-kado":"/doc/info/WhyKado.md"},"docVersion":"4.1.0","baseVersion":"4","docMap":{"module":{"url":"/doc/Module.md","name":"module","title":"Module","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Module.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Module.md","filePath":"/doc/4.1.0/module.html","basePath":"/doc/4/module.html"},"introduction":{"url":"/doc/info/Introduction.md","name":"introduction","title":"Introduction","type":"info","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/info/Introduction.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/info/Introduction.md","filePath":"/info/4.1.0/introduction.html","basePath":"/info/4/introduction.html"},"validate":{"url":"/doc/Validate.md","name":"validate","title":"Validate","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Validate.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Validate.md","filePath":"/doc/4.1.0/validate.html","basePath":"/doc/4/validate.html"},"search":{"url":"/doc/Search.md","name":"search","title":"Search","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Search.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Search.md","filePath":"/doc/4.1.0/search.html","basePath":"/doc/4/search.html"},"router":{"url":"/doc/Router.md","name":"router","title":"Router","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Router.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Router.md","filePath":"/doc/4.1.0/router.html","basePath":"/doc/4/router.html"},"mime":{"url":"/doc/Mime.md","name":"mime","title":"Mime","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Mime.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Mime.md","filePath":"/doc/4.1.0/mime.html","basePath":"/doc/4/mime.html"},"log":{"url":"/doc/Log.md","name":"log","title":"Log","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Log.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Log.md","filePath":"/doc/4.1.0/log.html","basePath":"/doc/4/log.html"},"cluster":{"url":"/doc/Cluster.md","name":"cluster","title":"Cluster","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Cluster.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Cluster.md","filePath":"/doc/4.1.0/cluster.html","basePath":"/doc/4/cluster.html"},"database":{"url":"/doc/Database.md","name":"database","title":"Database","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Database.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Database.md","filePath":"/doc/4.1.0/database.html","basePath":"/doc/4/database.html"},"connect":{"url":"/doc/Connect.md","name":"connect","title":"Connect","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Connect.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Connect.md","filePath":"/doc/4.1.0/connect.html","basePath":"/doc/4/connect.html"},"connect-engine":{"url":"/doc/ConnectEngine.md","name":"connect-engine","title":"Connect Engine","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/ConnectEngine.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/ConnectEngine.md","filePath":"/doc/4.1.0/connect-engine.html","basePath":"/doc/4/connect-engine.html"},"command":{"url":"/doc/Command.md","name":"command","title":"Command","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Command.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Command.md","filePath":"/doc/4.1.0/command.html","basePath":"/doc/4/command.html"},"asset":{"url":"/doc/Asset.md","name":"asset","title":"Asset","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Asset.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Asset.md","filePath":"/doc/4.1.0/asset.html","basePath":"/doc/4/asset.html"},"navigation":{"url":"/doc/Navigation.md","name":"navigation","title":"Navigation","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Navigation.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Navigation.md","filePath":"/doc/4.1.0/navigation.html","basePath":"/doc/4/navigation.html"},"child-process":{"url":"/doc/ChildProcess.md","name":"child-process","title":"Child Process","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/ChildProcess.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/ChildProcess.md","filePath":"/doc/4.1.0/child-process.html","basePath":"/doc/4/child-process.html"},"command-server":{"url":"/doc/CommandServer.md","name":"command-server","title":"Command Server","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/CommandServer.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/CommandServer.md","filePath":"/doc/4.1.0/command-server.html","basePath":"/doc/4/command-server.html"},"assert":{"url":"/doc/Assert.md","name":"assert","title":"Assert","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Assert.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Assert.md","filePath":"/doc/4.1.0/assert.html","basePath":"/doc/4/assert.html"},"hyper-text":{"url":"/doc/HyperText.md","name":"hyper-text","title":"Hyper Text","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/HyperText.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/HyperText.md","filePath":"/doc/4.1.0/hyper-text.html","basePath":"/doc/4/hyper-text.html"},"format":{"url":"/doc/Format.md","name":"format","title":"Format","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Format.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Format.md","filePath":"/doc/4.1.0/format.html","basePath":"/doc/4/format.html"},"application":{"url":"/doc/Application.md","name":"application","title":"Application","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Application.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Application.md","filePath":"/doc/4.1.0/application.html","basePath":"/doc/4/application.html"},"kado-4-released":{"url":"/doc/article/Kado4Released.md","name":"kado-4-released","title":"Kado 4 Released","type":"article","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/article/Kado4Released.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/article/Kado4Released.md","filePath":"/article/4.1.0/kado-4-released.html","basePath":"/article/4/kado-4-released.html"},"thesis":{"url":"/doc/article/Thesis.md","name":"thesis","title":"Thesis","type":"article","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/article/Thesis.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/article/Thesis.md","filePath":"/article/4.1.0/thesis.html","basePath":"/article/4/thesis.html"},"upgrading-from-kado-3":{"url":"/doc/article/UpgradingFromKado3.md","name":"upgrading-from-kado-3","title":"Upgrading from Kado 3","type":"article","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/article/UpgradingFromKado3.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/article/UpgradingFromKado3.md","filePath":"/article/4.1.0/upgrading-from-kado-3.html","basePath":"/article/4/upgrading-from-kado-3.html"},"changelog":{"url":"/CHANGELOG.md","name":"changelog","title":"Changelog","type":"info","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/CHANGELOG.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/CHANGELOG.md","filePath":"/info/4.1.0/changelog.html","basePath":"/info/4/changelog.html","hash":"3a9f5e33e81059d152cca0274e9c9365d802cc04"},"file-system":{"url":"/doc/FileSystem.md","name":"file-system","title":"File System","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/FileSystem.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/FileSystem.md","filePath":"/doc/4.1.0/file-system.html","basePath":"/doc/4/file-system.html"},"etag":{"url":"/doc/ETag.md","name":"etag","title":"Etag","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/ETag.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/ETag.md","filePath":"/doc/4.1.0/etag.html","basePath":"/doc/4/etag.html"},"about-us":{"url":"/doc/info/AboutUs.md","name":"about-us","title":"About Us","type":"info","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/info/AboutUs.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/info/AboutUs.md","filePath":"/info/4.1.0/about-us.html","basePath":"/info/4/about-us.html"},"getting-started":{"url":"/doc/guide/GettingStarted.md","name":"getting-started","title":"Getting Started","type":"guide","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/guide/GettingStarted.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/guide/GettingStarted.md","filePath":"/guide/4.1.0/getting-started.html","basePath":"/guide/4/getting-started.html"},"download":{"url":"/doc/info/Download.md","name":"download","title":"Download","type":"info","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/info/Download.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/info/Download.md","filePath":"/info/4.1.0/download.html","basePath":"/info/4/download.html"},"view":{"url":"/doc/View.md","name":"view","title":"View","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/View.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/View.md","filePath":"/doc/4.1.0/view.html","basePath":"/doc/4/view.html"},"database-work-flow":{"url":"/doc/guide/DatabaseWorkFlow.md","name":"database-work-flow","title":"Database Work Flow","type":"guide","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/guide/DatabaseWorkFlow.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/guide/DatabaseWorkFlow.md","filePath":"/guide/4.1.0/database-work-flow.html","basePath":"/guide/4/database-work-flow.html"},"hello-world":{"url":"/doc/guide/HelloWorld.md","name":"hello-world","title":"Hello World","type":"guide","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/guide/HelloWorld.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/guide/HelloWorld.md","filePath":"/guide/4.1.0/hello-world.html","basePath":"/guide/4/hello-world.html"},"working-with-email":{"url":"/doc/guide/WorkingWithEmail.md","name":"working-with-email","title":"Working with Email","type":"guide","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/guide/WorkingWithEmail.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/guide/WorkingWithEmail.md","filePath":"/guide/4.1.0/working-with-email.html","basePath":"/guide/4/working-with-email.html"},"home":{"url":"/doc/info/Home.md","name":"home","title":"Home","type":"info","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/info/Home.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/info/Home.md","filePath":"/info/4.1.0/home.html","basePath":"/info/4/home.html"},"writing-tests":{"url":"/doc/guide/WritingTests.md","name":"writing-tests","title":"Writing Tests","type":"guide","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/guide/WritingTests.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/guide/WritingTests.md","filePath":"/guide/4.1.0/writing-tests.html","basePath":"/guide/4/writing-tests.html"},"views-rendering":{"url":"/doc/guide/ViewsRendering.md","name":"views-rendering","title":"Views Rendering","type":"guide","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/guide/ViewsRendering.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/guide/ViewsRendering.md","filePath":"/guide/4.1.0/views-rendering.html","basePath":"/guide/4/views-rendering.html"},"why-kado":{"url":"/doc/info/WhyKado.md","name":"why-kado","title":"Why Kado","type":"info","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/info/WhyKado.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/info/WhyKado.md","filePath":"/info/4.1.0/why-kado.html","basePath":"/info/4/why-kado.html"},"parser":{"url":"/doc/Parser.md","name":"parser","title":"Parser","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Parser.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Parser.md","filePath":"/doc/4.1.0/parser.html","basePath":"/doc/4/parser.html"},"cron":{"url":"/doc/Cron.md","name":"cron","title":"Cron","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Cron.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Cron.md","filePath":"/doc/4.1.0/cron.html","basePath":"/doc/4/cron.html"},"contributing":{"url":"/CONTRIBUTING.md","name":"contributing","title":"Contributing","type":"info","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/CONTRIBUTING.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/CONTRIBUTING.md","filePath":"/info/4.1.0/contributing.html","basePath":"/info/4/contributing.html"},"build-admin-panel":{"url":"/doc/guide/BuildAdminPanel.md","name":"build-admin-panel","title":"Build Admin Panel","type":"guide","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/guide/BuildAdminPanel.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/guide/BuildAdminPanel.md","filePath":"/guide/4.1.0/build-admin-panel.html","basePath":"/guide/4/build-admin-panel.html"},"quick-start":{"url":"/doc/guide/QuickStart.md","name":"quick-start","title":"Quick Start","type":"guide","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/guide/QuickStart.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/guide/QuickStart.md","filePath":"/guide/4.1.0/quick-start.html","basePath":"/guide/4/quick-start.html"},"history":{"url":"/doc/History.md","name":"history","title":"History","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/History.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/History.md","filePath":"/doc/4.1.0/history.html","basePath":"/doc/4/history.html"},"language":{"url":"/doc/Language.md","name":"language","title":"Language","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Language.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Language.md","filePath":"/doc/4.1.0/language.html","basePath":"/doc/4/language.html"},"make-simple-website":{"url":"/doc/guide/MakeSimpleWebsite.md","name":"make-simple-website","title":"Make Simple Website","type":"guide","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/guide/MakeSimpleWebsite.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/guide/MakeSimpleWebsite.md","filePath":"/guide/4.1.0/make-simple-website.html","basePath":"/guide/4/make-simple-website.html"},"email":{"url":"/doc/Email.md","name":"email","title":"Email","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Email.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Email.md","filePath":"/doc/4.1.0/email.html","basePath":"/doc/4/email.html"},"advanced-techniques":{"url":"/doc/guide/AdvancedTechniques.md","name":"advanced-techniques","title":"Advanced Techniques","type":"guide","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/guide/AdvancedTechniques.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/guide/AdvancedTechniques.md","filePath":"/guide/4.1.0/advanced-techniques.html","basePath":"/guide/4/advanced-techniques.html"},"get-opt":{"url":"/doc/GetOpt.md","name":"get-opt","title":"Get Opt","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/GetOpt.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/GetOpt.md","filePath":"/doc/4.1.0/get-opt.html","basePath":"/doc/4/get-opt.html"},"message":{"url":"/doc/Message.md","name":"message","title":"Message","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Message.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Message.md","filePath":"/doc/4.1.0/message.html","basePath":"/doc/4/message.html"},"library":{"url":"/doc/Library.md","name":"library","title":"Library","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Library.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Library.md","filePath":"/doc/4.1.0/library.html","basePath":"/doc/4/library.html"},"event":{"url":"/doc/Event.md","name":"event","title":"Event","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Event.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Event.md","filePath":"/doc/4.1.0/event.html","basePath":"/doc/4/event.html"},"permission":{"url":"/doc/Permission.md","name":"permission","title":"Permission","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Permission.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Permission.md","filePath":"/doc/4.1.0/permission.html","basePath":"/doc/4/permission.html"},"test-runner":{"url":"/doc/TestRunner.md","name":"test-runner","title":"Test Runner","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/TestRunner.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/TestRunner.md","filePath":"/doc/4.1.0/test-runner.html","basePath":"/doc/4/test-runner.html"},"path-exp":{"url":"/doc/PathExp.md","name":"path-exp","title":"Path Exp","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/PathExp.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/PathExp.md","filePath":"/doc/4.1.0/path-exp.html","basePath":"/doc/4/path-exp.html"},"session":{"url":"/doc/Session.md","name":"session","title":"Session","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Session.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Session.md","filePath":"/doc/4.1.0/session.html","basePath":"/doc/4/session.html"},"license":{"url":"/LICENSE.md","name":"license","title":"License","type":"info","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/LICENSE.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/LICENSE.md","filePath":"/info/4.1.0/license.html","basePath":"/info/4/license.html"},"lifecycle":{"url":"/doc/Lifecycle.md","name":"lifecycle","title":"Lifecycle","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Lifecycle.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Lifecycle.md","filePath":"/doc/4.1.0/lifecycle.html","basePath":"/doc/4/lifecycle.html"},"util":{"url":"/doc/Util.md","name":"util","title":"Util","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Util.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Util.md","filePath":"/doc/4.1.0/util.html","basePath":"/doc/4/util.html"},"profiler":{"url":"/doc/Profiler.md","name":"profiler","title":"Profiler","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Profiler.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Profiler.md","filePath":"/doc/4.1.0/profiler.html","basePath":"/doc/4/profiler.html"},"mapper":{"url":"/doc/Mapper.md","name":"mapper","title":"Mapper","type":"doc","remoteUrl":"https://git.nullivex.com/nullivex/kado/blob/master/doc/Mapper.md","remoteRawUrl":"https://git.nullivex.com/nullivex/kado/raw/master/doc/Mapper.md","filePath":"/doc/4.1.0/mapper.html","basePath":"/doc/4/mapper.html"}}},"v3":{"remoteUrl":"https://git.nullivex.com/kado/kado/tree/3.x/","remoteBaseUrl":"https://git.nullivex.com/kado/kado/blob/3.x","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x","article":{"fall-update-2019":"/doc/article/FallUpdate2019.md","introduction-to-kado":"/doc/article/IntroductionToKado.md","kado-6-months-in":"/doc/article/Kado6MonthsIn.md","may-update-2019":"/doc/article/MayUpdate2019.md"},"doc":{"api":"/doc/API.md","command-line-interface":"/doc/CommandLineInterface.md","configuration":"/doc/Configuration.md","database":"/doc/Database.md","interfaces":"/doc/Interfaces.md","module":"/doc/Module.md","reference":"/doc/Reference.md","templates":"/doc/Templates.md"},"guide":{"developer":"/doc/guide/Developer.md","getting-started":"/doc/guide/GettingStarted.md","install-the-demo":"/doc/guide/InstallTheDemo.md","installation":"/doc/guide/Installation.md","website-cheat-sheet":"/doc/guide/WebsiteCheatSheet.md"},"info":{"release-cycle":"/doc/info/ReleaseCycle.md","themes":"/doc/info/Themes.md"},"docVersion":"3.10.6","baseVersion":"3","docMap":{"command-line-interface":{"url":"/doc/CommandLineInterface.md","name":"command-line-interface","title":"Command Line Interface","type":"doc","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/CommandLineInterface.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/CommandLineInterface.md","filePath":"/doc/3.10.6/command-line-interface.html","basePath":"/doc/3/command-line-interface.html"},"installation":{"url":"/doc/guide/Installation.md","name":"installation","title":"Installation","type":"guide","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/guide/Installation.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/guide/Installation.md","filePath":"/guide/3.10.6/installation.html","basePath":"/guide/3/installation.html"},"fall-update-2019":{"url":"/doc/article/FallUpdate2019.md","name":"fall-update-2019","title":"Fall Update 2019","type":"article","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/article/FallUpdate2019.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/article/FallUpdate2019.md","filePath":"/article/3.10.6/fall-update-2019.html","basePath":"/article/3/fall-update-2019.html"},"configuration":{"url":"/doc/Configuration.md","name":"configuration","title":"Configuration","type":"doc","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/Configuration.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/Configuration.md","filePath":"/doc/3.10.6/configuration.html","basePath":"/doc/3/configuration.html"},"templates":{"url":"/doc/Templates.md","name":"templates","title":"Templates","type":"doc","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/Templates.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/Templates.md","filePath":"/doc/3.10.6/templates.html","basePath":"/doc/3/templates.html"},"website-cheat-sheet":{"url":"/doc/guide/WebsiteCheatSheet.md","name":"website-cheat-sheet","title":"Website Cheat Sheet","type":"guide","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/guide/WebsiteCheatSheet.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/guide/WebsiteCheatSheet.md","filePath":"/guide/3.10.6/website-cheat-sheet.html","basePath":"/guide/3/website-cheat-sheet.html"},"introduction-to-kado":{"url":"/doc/article/IntroductionToKado.md","name":"introduction-to-kado","title":"Introduction to Kado","type":"article","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/article/IntroductionToKado.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/article/IntroductionToKado.md","filePath":"/article/3.10.6/introduction-to-kado.html","basePath":"/article/3/introduction-to-kado.html"},"release-cycle":{"url":"/doc/info/ReleaseCycle.md","name":"release-cycle","title":"Release Cycle","type":"info","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/info/ReleaseCycle.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/info/ReleaseCycle.md","filePath":"/info/3.10.6/release-cycle.html","basePath":"/info/3/release-cycle.html"},"getting-started":{"url":"/doc/guide/GettingStarted.md","name":"getting-started","title":"Getting Started","type":"guide","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/guide/GettingStarted.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/guide/GettingStarted.md","filePath":"/guide/3.10.6/getting-started.html","basePath":"/guide/3/getting-started.html"},"module":{"url":"/doc/Module.md","name":"module","title":"Module","type":"doc","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/Module.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/Module.md","filePath":"/doc/3.10.6/module.html","basePath":"/doc/3/module.html"},"api":{"url":"/doc/API.md","name":"api","title":"Api","type":"doc","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/API.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/API.md","filePath":"/doc/3.10.6/api.html","basePath":"/doc/3/api.html"},"database":{"url":"/doc/Database.md","name":"database","title":"Database","type":"doc","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/Database.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/Database.md","filePath":"/doc/3.10.6/database.html","basePath":"/doc/3/database.html"},"interfaces":{"url":"/doc/Interfaces.md","name":"interfaces","title":"Interfaces","type":"doc","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/Interfaces.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/Interfaces.md","filePath":"/doc/3.10.6/interfaces.html","basePath":"/doc/3/interfaces.html"},"developer":{"url":"/doc/guide/Developer.md","name":"developer","title":"Developer","type":"guide","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/guide/Developer.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/guide/Developer.md","filePath":"/guide/3.10.6/developer.html","basePath":"/guide/3/developer.html"},"reference":{"url":"/doc/Reference.md","name":"reference","title":"Reference","type":"doc","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/Reference.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/Reference.md","filePath":"/doc/3.10.6/reference.html","basePath":"/doc/3/reference.html"},"kado-6-months-in":{"url":"/doc/article/Kado6MonthsIn.md","name":"kado-6-months-in","title":"Kado 6 Months In","type":"article","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/article/Kado6MonthsIn.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/article/Kado6MonthsIn.md","filePath":"/article/3.10.6/kado-6-months-in.html","basePath":"/article/3/kado-6-months-in.html"},"may-update-2019":{"url":"/doc/article/MayUpdate2019.md","name":"may-update-2019","title":"May Update 2019","type":"article","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/article/MayUpdate2019.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/article/MayUpdate2019.md","filePath":"/article/3.10.6/may-update-2019.html","basePath":"/article/3/may-update-2019.html"},"install-the-demo":{"url":"/doc/guide/InstallTheDemo.md","name":"install-the-demo","title":"Install the Demo","type":"guide","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/guide/InstallTheDemo.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/guide/InstallTheDemo.md","filePath":"/guide/3.10.6/install-the-demo.html","basePath":"/guide/3/install-the-demo.html"},"themes":{"url":"/doc/info/Themes.md","name":"themes","title":"Themes","type":"info","remoteUrl":"https://git.nullivex.com/kado/kado/blob/3.x/doc/info/Themes.md","remoteRawUrl":"https://git.nullivex.com/kado/kado/raw/3.x/doc/info/Themes.md","filePath":"/info/3.10.6/themes.html","basePath":"/info/3/themes.html"}}},"latestVersion":"4.1.0"}
\ No newline at end of file
+{
+  "v4": {
+    "remoteUrl": "https://git.nullivex.com/kado/kado/tree/master/",
+    "remoteBaseUrl": "https://git.nullivex.com/kado/kado/blob/master",
+    "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master",
+    "latest": true,
+    "article": {
+      "kado-4-released": "/doc/article/Kado4Released.md",
+      "kado-4.2-released": "/doc/article/Kado4.2Released.md",
+      "thesis": "/doc/article/Thesis.md",
+      "upgrading-from-kado-3": "/doc/article/UpgradingFromKado3.md"
+    },
+    "guide": {
+      "build-admin-panel": "/doc/guide/BuildAdminPanel.md",
+      "database-work-flow": "/doc/guide/DatabaseWorkFlow.md",
+      "getting-started": "/doc/guide/GettingStarted.md",
+      "hello-world": "/doc/guide/HelloWorld.md",
+      "introduction": "/doc/guide/Introduction.md",
+      "make-simple-website": "/doc/guide/MakeSimpleWebsite.md",
+      "quick-start": "/doc/guide/QuickStart.md",
+      "views-rendering": "/doc/guide/ViewsRendering.md",
+      "working-with-email": "/doc/guide/WorkingWithEmail.md",
+      "writing-tests": "/doc/guide/WritingTests.md"
+    },
+    "info": {
+      "about-us": "/doc/info/AboutUs.md",
+      "changelog": "/CHANGELOG.md",
+      "contributing": "/CONTRIBUTING.md",
+      "download": "/doc/info/Download.md",
+      "home": "/doc/info/Home.md",
+      "introduction": "/doc/info/Introduction.md",
+      "license": "/LICENSE.md",
+      "why-kado": "/doc/info/WhyKado.md"
+    },
+    "doc": {
+      "application": "/doc/Application.md",
+      "assert": "/doc/Assert.md",
+      "asset": "/doc/Asset.md",
+      "child-process": "/doc/ChildProcess.md",
+      "cluster": "/doc/Cluster.md",
+      "command": "/doc/Command.md",
+      "command-server": "/doc/CommandServer.md",
+      "connect": "/doc/Connect.md",
+      "connect-engine": "/doc/ConnectEngine.md",
+      "cron": "/doc/Cron.md",
+      "database": "/doc/Database.md",
+      "email": "/doc/Email.md",
+      "etag": "/doc/ETag.md",
+      "event": "/doc/Event.md",
+      "file-system": "/doc/FileSystem.md",
+      "format": "/doc/Format.md",
+      "get-opt": "/doc/GetOpt.md",
+      "history": "/doc/History.md",
+      "hyper-text": "/doc/HyperText.md",
+      "language": "/doc/Language.md",
+      "library": "/doc/Library.md",
+      "lifecycle": "/doc/Lifecycle.md",
+      "log": "/doc/Log.md",
+      "mapper": "/doc/Mapper.md",
+      "message": "/doc/Message.md",
+      "mime": "/doc/Mime.md",
+      "model": "/doc/Model.md",
+      "module": "/doc/Module.md",
+      "mustache": "/doc/Mustache.md",
+      "navigation": "/doc/Navigation.md",
+      "parser": "/doc/Parser.md",
+      "path-exp": "/doc/PathExp.md",
+      "permission": "/doc/Permission.md",
+      "profiler": "/doc/Profiler.md",
+      "query": "/doc/Query.md",
+      "query-cache": "/doc/QueryCache.md",
+      "router": "/doc/Router.md",
+      "schema": "/doc/Schema.md",
+      "search": "/doc/Search.md",
+      "session": "/doc/Session.md",
+      "test-runner": "/doc/TestRunner.md",
+      "util": "/doc/Util.md",
+      "validate": "/doc/Validate.md",
+      "view": "/doc/View.md"
+    },
+    "docVersion": "4.2.0",
+    "baseVersion": "4",
+    "docMap": {
+      "about-us": {
+        "url": "/doc/info/AboutUs.md",
+        "name": "about-us",
+        "title": "About Us",
+        "type": "info",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/info/AboutUs.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/info/AboutUs.md",
+        "filePath": "/info/4.2.0/about-us.html",
+        "basePath": "/info/4/about-us.html"
+      },
+      "query-cache": {
+        "url": "/doc/QueryCache.md",
+        "name": "query-cache",
+        "title": "Query Cache",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/QueryCache.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/QueryCache.md",
+        "filePath": "/doc/4.2.0/query-cache.html",
+        "basePath": "/doc/4/query-cache.html"
+      },
+      "search": {
+        "url": "/doc/Search.md",
+        "name": "search",
+        "title": "Search",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Search.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Search.md",
+        "filePath": "/doc/4.2.0/search.html",
+        "basePath": "/doc/4/search.html"
+      },
+      "mime": {
+        "url": "/doc/Mime.md",
+        "name": "mime",
+        "title": "Mime",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Mime.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Mime.md",
+        "filePath": "/doc/4.2.0/mime.html",
+        "basePath": "/doc/4/mime.html"
+      },
+      "path-exp": {
+        "url": "/doc/PathExp.md",
+        "name": "path-exp",
+        "title": "Path Exp",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/PathExp.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/PathExp.md",
+        "filePath": "/doc/4.2.0/path-exp.html",
+        "basePath": "/doc/4/path-exp.html"
+      },
+      "message": {
+        "url": "/doc/Message.md",
+        "name": "message",
+        "title": "Message",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Message.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Message.md",
+        "filePath": "/doc/4.2.0/message.html",
+        "basePath": "/doc/4/message.html"
+      },
+      "profiler": {
+        "url": "/doc/Profiler.md",
+        "name": "profiler",
+        "title": "Profiler",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Profiler.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Profiler.md",
+        "filePath": "/doc/4.2.0/profiler.html",
+        "basePath": "/doc/4/profiler.html"
+      },
+      "log": {
+        "url": "/doc/Log.md",
+        "name": "log",
+        "title": "Log",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Log.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Log.md",
+        "filePath": "/doc/4.2.0/log.html",
+        "basePath": "/doc/4/log.html"
+      },
+      "mapper": {
+        "url": "/doc/Mapper.md",
+        "name": "mapper",
+        "title": "Mapper",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Mapper.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Mapper.md",
+        "filePath": "/doc/4.2.0/mapper.html",
+        "basePath": "/doc/4/mapper.html"
+      },
+      "session": {
+        "url": "/doc/Session.md",
+        "name": "session",
+        "title": "Session",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Session.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Session.md",
+        "filePath": "/doc/4.2.0/session.html",
+        "basePath": "/doc/4/session.html"
+      },
+      "parser": {
+        "url": "/doc/Parser.md",
+        "name": "parser",
+        "title": "Parser",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Parser.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Parser.md",
+        "filePath": "/doc/4.2.0/parser.html",
+        "basePath": "/doc/4/parser.html"
+      },
+      "view": {
+        "url": "/doc/View.md",
+        "name": "view",
+        "title": "View",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/View.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/View.md",
+        "filePath": "/doc/4.2.0/view.html",
+        "basePath": "/doc/4/view.html"
+      },
+      "introduction": {
+        "url": "/doc/guide/Introduction.md",
+        "name": "introduction",
+        "title": "Introduction",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/guide/Introduction.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/guide/Introduction.md",
+        "filePath": "/guide/4.2.0/introduction.html",
+        "basePath": "/guide/4/introduction.html"
+      },
+      "hello-world": {
+        "url": "/doc/guide/HelloWorld.md",
+        "name": "hello-world",
+        "title": "Hello World",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/guide/HelloWorld.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/guide/HelloWorld.md",
+        "filePath": "/guide/4.2.0/hello-world.html",
+        "basePath": "/guide/4/hello-world.html"
+      },
+      "child-process": {
+        "url": "/doc/ChildProcess.md",
+        "name": "child-process",
+        "title": "Child Process",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/ChildProcess.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/ChildProcess.md",
+        "filePath": "/doc/4.2.0/child-process.html",
+        "basePath": "/doc/4/child-process.html"
+      },
+      "lifecycle": {
+        "url": "/doc/Lifecycle.md",
+        "name": "lifecycle",
+        "title": "Lifecycle",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Lifecycle.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Lifecycle.md",
+        "filePath": "/doc/4.2.0/lifecycle.html",
+        "basePath": "/doc/4/lifecycle.html"
+      },
+      "command": {
+        "url": "/doc/Command.md",
+        "name": "command",
+        "title": "Command",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Command.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Command.md",
+        "filePath": "/doc/4.2.0/command.html",
+        "basePath": "/doc/4/command.html"
+      },
+      "kado-4-released": {
+        "url": "/doc/article/Kado4Released.md",
+        "name": "kado-4-released",
+        "title": "Kado 4 Released",
+        "type": "article",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/article/Kado4Released.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/article/Kado4Released.md",
+        "filePath": "/article/4.2.0/kado-4-released.html",
+        "basePath": "/article/4/kado-4-released.html"
+      },
+      "library": {
+        "url": "/doc/Library.md",
+        "name": "library",
+        "title": "Library",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Library.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Library.md",
+        "filePath": "/doc/4.2.0/library.html",
+        "basePath": "/doc/4/library.html"
+      },
+      "asset": {
+        "url": "/doc/Asset.md",
+        "name": "asset",
+        "title": "Asset",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Asset.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Asset.md",
+        "filePath": "/doc/4.2.0/asset.html",
+        "basePath": "/doc/4/asset.html"
+      },
+      "thesis": {
+        "url": "/doc/article/Thesis.md",
+        "name": "thesis",
+        "title": "Thesis",
+        "type": "article",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/article/Thesis.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/article/Thesis.md",
+        "filePath": "/article/4.2.0/thesis.html",
+        "basePath": "/article/4/thesis.html"
+      },
+      "get-opt": {
+        "url": "/doc/GetOpt.md",
+        "name": "get-opt",
+        "title": "Get Opt",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/GetOpt.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/GetOpt.md",
+        "filePath": "/doc/4.2.0/get-opt.html",
+        "basePath": "/doc/4/get-opt.html"
+      },
+      "connect": {
+        "url": "/doc/Connect.md",
+        "name": "connect",
+        "title": "Connect",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Connect.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Connect.md",
+        "filePath": "/doc/4.2.0/connect.html",
+        "basePath": "/doc/4/connect.html"
+      },
+      "upgrading-from-kado-3": {
+        "url": "/doc/article/UpgradingFromKado3.md",
+        "name": "upgrading-from-kado-3",
+        "title": "Upgrading from Kado 3",
+        "type": "article",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/article/UpgradingFromKado3.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/article/UpgradingFromKado3.md",
+        "filePath": "/article/4.2.0/upgrading-from-kado-3.html",
+        "basePath": "/article/4/upgrading-from-kado-3.html"
+      },
+      "connect-engine": {
+        "url": "/doc/ConnectEngine.md",
+        "name": "connect-engine",
+        "title": "Connect Engine",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/ConnectEngine.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/ConnectEngine.md",
+        "filePath": "/doc/4.2.0/connect-engine.html",
+        "basePath": "/doc/4/connect-engine.html"
+      },
+      "email": {
+        "url": "/doc/Email.md",
+        "name": "email",
+        "title": "Email",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Email.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Email.md",
+        "filePath": "/doc/4.2.0/email.html",
+        "basePath": "/doc/4/email.html"
+      },
+      "event": {
+        "url": "/doc/Event.md",
+        "name": "event",
+        "title": "Event",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Event.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Event.md",
+        "filePath": "/doc/4.2.0/event.html",
+        "basePath": "/doc/4/event.html"
+      },
+      "validate": {
+        "url": "/doc/Validate.md",
+        "name": "validate",
+        "title": "Validate",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Validate.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Validate.md",
+        "filePath": "/doc/4.2.0/validate.html",
+        "basePath": "/doc/4/validate.html"
+      },
+      "format": {
+        "url": "/doc/Format.md",
+        "name": "format",
+        "title": "Format",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Format.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Format.md",
+        "filePath": "/doc/4.2.0/format.html",
+        "basePath": "/doc/4/format.html"
+      },
+      "application": {
+        "url": "/doc/Application.md",
+        "name": "application",
+        "title": "Application",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Application.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Application.md",
+        "filePath": "/doc/4.2.0/application.html",
+        "basePath": "/doc/4/application.html"
+      },
+      "command-server": {
+        "url": "/doc/CommandServer.md",
+        "name": "command-server",
+        "title": "Command Server",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/CommandServer.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/CommandServer.md",
+        "filePath": "/doc/4.2.0/command-server.html",
+        "basePath": "/doc/4/command-server.html"
+      },
+      "etag": {
+        "url": "/doc/ETag.md",
+        "name": "etag",
+        "title": "Etag",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/ETag.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/ETag.md",
+        "filePath": "/doc/4.2.0/etag.html",
+        "basePath": "/doc/4/etag.html"
+      },
+      "hyper-text": {
+        "url": "/doc/HyperText.md",
+        "name": "hyper-text",
+        "title": "Hyper Text",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/HyperText.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/HyperText.md",
+        "filePath": "/doc/4.2.0/hyper-text.html",
+        "basePath": "/doc/4/hyper-text.html"
+      },
+      "assert": {
+        "url": "/doc/Assert.md",
+        "name": "assert",
+        "title": "Assert",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Assert.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Assert.md",
+        "filePath": "/doc/4.2.0/assert.html",
+        "basePath": "/doc/4/assert.html"
+      },
+      "kado-4.2-released": {
+        "url": "/doc/article/Kado4.2Released.md",
+        "name": "kado-4.2-released",
+        "title": "Kado 4.2 Released",
+        "type": "article",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/article/Kado4.2Released.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/article/Kado4.2Released.md",
+        "filePath": "/article/4.2.0/kado-4.2-released.html",
+        "basePath": "/article/4/kado-4.2-released.html"
+      },
+      "cluster": {
+        "url": "/doc/Cluster.md",
+        "name": "cluster",
+        "title": "Cluster",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Cluster.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Cluster.md",
+        "filePath": "/doc/4.2.0/cluster.html",
+        "basePath": "/doc/4/cluster.html"
+      },
+      "history": {
+        "url": "/doc/History.md",
+        "name": "history",
+        "title": "History",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/History.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/History.md",
+        "filePath": "/doc/4.2.0/history.html",
+        "basePath": "/doc/4/history.html"
+      },
+      "cron": {
+        "url": "/doc/Cron.md",
+        "name": "cron",
+        "title": "Cron",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Cron.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Cron.md",
+        "filePath": "/doc/4.2.0/cron.html",
+        "basePath": "/doc/4/cron.html"
+      },
+      "language": {
+        "url": "/doc/Language.md",
+        "name": "language",
+        "title": "Language",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Language.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Language.md",
+        "filePath": "/doc/4.2.0/language.html",
+        "basePath": "/doc/4/language.html"
+      },
+      "build-admin-panel": {
+        "url": "/doc/guide/BuildAdminPanel.md",
+        "name": "build-admin-panel",
+        "title": "Build Admin Panel",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/guide/BuildAdminPanel.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/guide/BuildAdminPanel.md",
+        "filePath": "/guide/4.2.0/build-admin-panel.html",
+        "basePath": "/guide/4/build-admin-panel.html"
+      },
+      "file-system": {
+        "url": "/doc/FileSystem.md",
+        "name": "file-system",
+        "title": "File System",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/FileSystem.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/FileSystem.md",
+        "filePath": "/doc/4.2.0/file-system.html",
+        "basePath": "/doc/4/file-system.html"
+      },
+      "why-kado": {
+        "url": "/doc/info/WhyKado.md",
+        "name": "why-kado",
+        "title": "Why Kado",
+        "type": "info",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/info/WhyKado.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/info/WhyKado.md",
+        "filePath": "/info/4.2.0/why-kado.html",
+        "basePath": "/info/4/why-kado.html"
+      },
+      "home": {
+        "url": "/doc/info/Home.md",
+        "name": "home",
+        "title": "Home",
+        "type": "info",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/info/Home.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/info/Home.md",
+        "filePath": "/info/4.2.0/home.html",
+        "basePath": "/info/4/home.html"
+      },
+      "download": {
+        "url": "/doc/info/Download.md",
+        "name": "download",
+        "title": "Download",
+        "type": "info",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/info/Download.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/info/Download.md",
+        "filePath": "/info/4.2.0/download.html",
+        "basePath": "/info/4/download.html"
+      },
+      "getting-started": {
+        "url": "/doc/guide/GettingStarted.md",
+        "name": "getting-started",
+        "title": "Getting Started",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/guide/GettingStarted.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/guide/GettingStarted.md",
+        "filePath": "/guide/4.2.0/getting-started.html",
+        "basePath": "/guide/4/getting-started.html"
+      },
+      "model": {
+        "url": "/doc/Model.md",
+        "name": "model",
+        "title": "Model",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Model.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Model.md",
+        "filePath": "/doc/4.2.0/model.html",
+        "basePath": "/doc/4/model.html"
+      },
+      "contributing": {
+        "url": "/CONTRIBUTING.md",
+        "name": "contributing",
+        "title": "Contributing",
+        "type": "info",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/CONTRIBUTING.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/CONTRIBUTING.md",
+        "filePath": "/info/4.2.0/contributing.html",
+        "basePath": "/info/4/contributing.html"
+      },
+      "permission": {
+        "url": "/doc/Permission.md",
+        "name": "permission",
+        "title": "Permission",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Permission.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Permission.md",
+        "filePath": "/doc/4.2.0/permission.html",
+        "basePath": "/doc/4/permission.html"
+      },
+      "module": {
+        "url": "/doc/Module.md",
+        "name": "module",
+        "title": "Module",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Module.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Module.md",
+        "filePath": "/doc/4.2.0/module.html",
+        "basePath": "/doc/4/module.html"
+      },
+      "make-simple-website": {
+        "url": "/doc/guide/MakeSimpleWebsite.md",
+        "name": "make-simple-website",
+        "title": "Make Simple Website",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/guide/MakeSimpleWebsite.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/guide/MakeSimpleWebsite.md",
+        "filePath": "/guide/4.2.0/make-simple-website.html",
+        "basePath": "/guide/4/make-simple-website.html"
+      },
+      "views-rendering": {
+        "url": "/doc/guide/ViewsRendering.md",
+        "name": "views-rendering",
+        "title": "Views Rendering",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/guide/ViewsRendering.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/guide/ViewsRendering.md",
+        "filePath": "/guide/4.2.0/views-rendering.html",
+        "basePath": "/guide/4/views-rendering.html"
+      },
+      "quick-start": {
+        "url": "/doc/guide/QuickStart.md",
+        "name": "quick-start",
+        "title": "Quick Start",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/guide/QuickStart.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/guide/QuickStart.md",
+        "filePath": "/guide/4.2.0/quick-start.html",
+        "basePath": "/guide/4/quick-start.html"
+      },
+      "database": {
+        "url": "/doc/Database.md",
+        "name": "database",
+        "title": "Database",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Database.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Database.md",
+        "filePath": "/doc/4.2.0/database.html",
+        "basePath": "/doc/4/database.html"
+      },
+      "navigation": {
+        "url": "/doc/Navigation.md",
+        "name": "navigation",
+        "title": "Navigation",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Navigation.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Navigation.md",
+        "filePath": "/doc/4.2.0/navigation.html",
+        "basePath": "/doc/4/navigation.html"
+      },
+      "query": {
+        "url": "/doc/Query.md",
+        "name": "query",
+        "title": "Query",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Query.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Query.md",
+        "filePath": "/doc/4.2.0/query.html",
+        "basePath": "/doc/4/query.html"
+      },
+      "schema": {
+        "url": "/doc/Schema.md",
+        "name": "schema",
+        "title": "Schema",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Schema.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Schema.md",
+        "filePath": "/doc/4.2.0/schema.html",
+        "basePath": "/doc/4/schema.html"
+      },
+      "working-with-email": {
+        "url": "/doc/guide/WorkingWithEmail.md",
+        "name": "working-with-email",
+        "title": "Working with Email",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/guide/WorkingWithEmail.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/guide/WorkingWithEmail.md",
+        "filePath": "/guide/4.2.0/working-with-email.html",
+        "basePath": "/guide/4/working-with-email.html"
+      },
+      "router": {
+        "url": "/doc/Router.md",
+        "name": "router",
+        "title": "Router",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Router.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Router.md",
+        "filePath": "/doc/4.2.0/router.html",
+        "basePath": "/doc/4/router.html"
+      },
+      "util": {
+        "url": "/doc/Util.md",
+        "name": "util",
+        "title": "Util",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Util.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Util.md",
+        "filePath": "/doc/4.2.0/util.html",
+        "basePath": "/doc/4/util.html"
+      },
+      "mustache": {
+        "url": "/doc/Mustache.md",
+        "name": "mustache",
+        "title": "Mustache",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/Mustache.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/Mustache.md",
+        "filePath": "/doc/4.2.0/mustache.html",
+        "basePath": "/doc/4/mustache.html"
+      },
+      "writing-tests": {
+        "url": "/doc/guide/WritingTests.md",
+        "name": "writing-tests",
+        "title": "Writing Tests",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/guide/WritingTests.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/guide/WritingTests.md",
+        "filePath": "/guide/4.2.0/writing-tests.html",
+        "basePath": "/guide/4/writing-tests.html"
+      },
+      "test-runner": {
+        "url": "/doc/TestRunner.md",
+        "name": "test-runner",
+        "title": "Test Runner",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/TestRunner.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/TestRunner.md",
+        "filePath": "/doc/4.2.0/test-runner.html",
+        "basePath": "/doc/4/test-runner.html"
+      },
+      "database-work-flow": {
+        "url": "/doc/guide/DatabaseWorkFlow.md",
+        "name": "database-work-flow",
+        "title": "Database Work Flow",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/doc/guide/DatabaseWorkFlow.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/doc/guide/DatabaseWorkFlow.md",
+        "filePath": "/guide/4.2.0/database-work-flow.html",
+        "basePath": "/guide/4/database-work-flow.html"
+      },
+      "license": {
+        "url": "/LICENSE.md",
+        "name": "license",
+        "title": "License",
+        "type": "info",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/LICENSE.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/LICENSE.md",
+        "filePath": "/info/4.2.0/license.html",
+        "basePath": "/info/4/license.html"
+      },
+      "changelog": {
+        "url": "/CHANGELOG.md",
+        "name": "changelog",
+        "title": "Changelog",
+        "type": "info",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/master/CHANGELOG.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/master/CHANGELOG.md",
+        "filePath": "/info/4.2.0/changelog.html",
+        "basePath": "/info/4/changelog.html"
+      }
+    }
+  },
+  "v3": {
+    "remoteUrl": "https://git.nullivex.com/kado/kado/tree/3.x/",
+    "remoteBaseUrl": "https://git.nullivex.com/kado/kado/blob/3.x",
+    "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x",
+    "article": {
+      "fall-update-2019": "/doc/article/FallUpdate2019.md",
+      "introduction-to-kado": "/doc/article/IntroductionToKado.md",
+      "kado-6-months-in": "/doc/article/Kado6MonthsIn.md",
+      "may-update-2019": "/doc/article/MayUpdate2019.md"
+    },
+    "doc": {
+      "api": "/doc/API.md",
+      "command-line-interface": "/doc/CommandLineInterface.md",
+      "configuration": "/doc/Configuration.md",
+      "database": "/doc/Database.md",
+      "interfaces": "/doc/Interfaces.md",
+      "module": "/doc/Module.md",
+      "reference": "/doc/Reference.md",
+      "templates": "/doc/Templates.md"
+    },
+    "guide": {
+      "developer": "/doc/guide/Developer.md",
+      "getting-started": "/doc/guide/GettingStarted.md",
+      "install-the-demo": "/doc/guide/InstallTheDemo.md",
+      "installation": "/doc/guide/Installation.md",
+      "website-cheat-sheet": "/doc/guide/WebsiteCheatSheet.md"
+    },
+    "info": {
+      "release-cycle": "/doc/info/ReleaseCycle.md",
+      "themes": "/doc/info/Themes.md"
+    },
+    "docVersion": "3.10.6",
+    "baseVersion": "3",
+    "docMap": {
+      "templates": {
+        "url": "/doc/Templates.md",
+        "name": "templates",
+        "title": "Templates",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/Templates.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/Templates.md",
+        "filePath": "/doc/3.10.6/templates.html",
+        "basePath": "/doc/3/templates.html"
+      },
+      "fall-update-2019": {
+        "url": "/doc/article/FallUpdate2019.md",
+        "name": "fall-update-2019",
+        "title": "Fall Update 2019",
+        "type": "article",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/article/FallUpdate2019.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/article/FallUpdate2019.md",
+        "filePath": "/article/3.10.6/fall-update-2019.html",
+        "basePath": "/article/3/fall-update-2019.html"
+      },
+      "reference": {
+        "url": "/doc/Reference.md",
+        "name": "reference",
+        "title": "Reference",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/Reference.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/Reference.md",
+        "filePath": "/doc/3.10.6/reference.html",
+        "basePath": "/doc/3/reference.html"
+      },
+      "may-update-2019": {
+        "url": "/doc/article/MayUpdate2019.md",
+        "name": "may-update-2019",
+        "title": "May Update 2019",
+        "type": "article",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/article/MayUpdate2019.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/article/MayUpdate2019.md",
+        "filePath": "/article/3.10.6/may-update-2019.html",
+        "basePath": "/article/3/may-update-2019.html"
+      },
+      "api": {
+        "url": "/doc/API.md",
+        "name": "api",
+        "title": "Api",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/API.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/API.md",
+        "filePath": "/doc/3.10.6/api.html",
+        "basePath": "/doc/3/api.html"
+      },
+      "installation": {
+        "url": "/doc/guide/Installation.md",
+        "name": "installation",
+        "title": "Installation",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/guide/Installation.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/guide/Installation.md",
+        "filePath": "/guide/3.10.6/installation.html",
+        "basePath": "/guide/3/installation.html"
+      },
+      "database": {
+        "url": "/doc/Database.md",
+        "name": "database",
+        "title": "Database",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/Database.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/Database.md",
+        "filePath": "/doc/3.10.6/database.html",
+        "basePath": "/doc/3/database.html"
+      },
+      "install-the-demo": {
+        "url": "/doc/guide/InstallTheDemo.md",
+        "name": "install-the-demo",
+        "title": "Install the Demo",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/guide/InstallTheDemo.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/guide/InstallTheDemo.md",
+        "filePath": "/guide/3.10.6/install-the-demo.html",
+        "basePath": "/guide/3/install-the-demo.html"
+      },
+      "themes": {
+        "url": "/doc/info/Themes.md",
+        "name": "themes",
+        "title": "Themes",
+        "type": "info",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/info/Themes.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/info/Themes.md",
+        "filePath": "/info/3.10.6/themes.html",
+        "basePath": "/info/3/themes.html"
+      },
+      "introduction-to-kado": {
+        "url": "/doc/article/IntroductionToKado.md",
+        "name": "introduction-to-kado",
+        "title": "Introduction to Kado",
+        "type": "article",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/article/IntroductionToKado.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/article/IntroductionToKado.md",
+        "filePath": "/article/3.10.6/introduction-to-kado.html",
+        "basePath": "/article/3/introduction-to-kado.html"
+      },
+      "kado-6-months-in": {
+        "url": "/doc/article/Kado6MonthsIn.md",
+        "name": "kado-6-months-in",
+        "title": "Kado 6 Months In",
+        "type": "article",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/article/Kado6MonthsIn.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/article/Kado6MonthsIn.md",
+        "filePath": "/article/3.10.6/kado-6-months-in.html",
+        "basePath": "/article/3/kado-6-months-in.html"
+      },
+      "website-cheat-sheet": {
+        "url": "/doc/guide/WebsiteCheatSheet.md",
+        "name": "website-cheat-sheet",
+        "title": "Website Cheat Sheet",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/guide/WebsiteCheatSheet.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/guide/WebsiteCheatSheet.md",
+        "filePath": "/guide/3.10.6/website-cheat-sheet.html",
+        "basePath": "/guide/3/website-cheat-sheet.html"
+      },
+      "getting-started": {
+        "url": "/doc/guide/GettingStarted.md",
+        "name": "getting-started",
+        "title": "Getting Started",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/guide/GettingStarted.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/guide/GettingStarted.md",
+        "filePath": "/guide/3.10.6/getting-started.html",
+        "basePath": "/guide/3/getting-started.html"
+      },
+      "release-cycle": {
+        "url": "/doc/info/ReleaseCycle.md",
+        "name": "release-cycle",
+        "title": "Release Cycle",
+        "type": "info",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/info/ReleaseCycle.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/info/ReleaseCycle.md",
+        "filePath": "/info/3.10.6/release-cycle.html",
+        "basePath": "/info/3/release-cycle.html"
+      },
+      "command-line-interface": {
+        "url": "/doc/CommandLineInterface.md",
+        "name": "command-line-interface",
+        "title": "Command Line Interface",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/CommandLineInterface.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/CommandLineInterface.md",
+        "filePath": "/doc/3.10.6/command-line-interface.html",
+        "basePath": "/doc/3/command-line-interface.html"
+      },
+      "interfaces": {
+        "url": "/doc/Interfaces.md",
+        "name": "interfaces",
+        "title": "Interfaces",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/Interfaces.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/Interfaces.md",
+        "filePath": "/doc/3.10.6/interfaces.html",
+        "basePath": "/doc/3/interfaces.html"
+      },
+      "developer": {
+        "url": "/doc/guide/Developer.md",
+        "name": "developer",
+        "title": "Developer",
+        "type": "guide",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/guide/Developer.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/guide/Developer.md",
+        "filePath": "/guide/3.10.6/developer.html",
+        "basePath": "/guide/3/developer.html"
+      },
+      "module": {
+        "url": "/doc/Module.md",
+        "name": "module",
+        "title": "Module",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/Module.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/Module.md",
+        "filePath": "/doc/3.10.6/module.html",
+        "basePath": "/doc/3/module.html"
+      },
+      "configuration": {
+        "url": "/doc/Configuration.md",
+        "name": "configuration",
+        "title": "Configuration",
+        "type": "doc",
+        "remoteUrl": "https://git.nullivex.com/kado/kado/blob/3.x/doc/Configuration.md",
+        "remoteRawUrl": "https://git.nullivex.com/kado/kado/raw/3.x/doc/Configuration.md",
+        "filePath": "/doc/3.10.6/configuration.html",
+        "basePath": "/doc/3/configuration.html"
+      }
+    }
+  },
+  "latestVersion": "4.2.0"
+}
\ No newline at end of file
diff --git a/main/views/info/4/changelog.html b/main/views/info/4/changelog.html
index 8769a07ae187eb951a89cffa9f437dcd7833f26b..29c14feff55edb8441306d67721b02da478029c7 100644
--- a/main/views/info/4/changelog.html
+++ b/main/views/info/4/changelog.html
@@ -1,4 +1,35 @@
 <h1 id="changelog">Changelog</h1>
+<h3 id="420">4.2.0</h3>
+<p><em>Released 4/15/20</em></p>
+<ul>
+<li>Add new Model.js for creating and working with Database records.</li>
+<li>Add new Mustache.js for string templating.</li>
+<li>Add new MySQL database engine.</li>
+<li>Add new Query.js for building queries for databases.</li>
+<li>Add new QueryCache.js for caching queries from a database in a database.</li>
+<li>Add new Schema.js for building tables for databases.</li>
+<li>Validate.isType upgraded to be more consistent and predictable.</li>
+<li>Parser adds <code>requestBody</code> parser to assist with input decoding.</li>
+<li>Router adds <code>res.json()</code> for JSON output.</li>
+<li>Router adds <code>res.redirect()</code> for location changes.</li>
+<li>Router adds <code>res.sendFile()</code> for sending files.</li>
+<li>Session adds <code>SessionStoreSQL</code> for SQL backed sessions from databases.</li>
+<li>Cluster adds <code>dev</code> mode and <code>disableMaster</code> to help with running in single
+process mode.</li>
+<li>Cluster now automatically establishes worker counts unless told otherwise.</li>
+<li>Commands can now return undefined as a valid exit value</li>
+<li>Fix to only setup cluster master when available.</li>
+<li>Fix to app startup when commands are present.</li>
+<li>HyperTextServer now accepts an array of hosts to listen on.</li>
+<li>Cluster no longer recycles workers from reaching a maxConnection ceiling by
+default.</li>
+<li>Fix to properly close database connections on stop.</li>
+<li>Add <code>HyperText.Proxy</code> to HyperText.js which provides an HTTP reverse proxy.</li>
+<li>Make the testing of extended types more robust, to ensure extension of a
+proper parent.</li>
+<li>Fix the promise chain when starting and stopping connect systems from
+Application.</li>
+</ul>
 <h3 id="410">4.1.0</h3>
 <p><em>Released 3/9/2020</em></p>
 <ul>
diff --git a/main/views/info/4/download.html b/main/views/info/4/download.html
index bff21498276dac4c64176e128c4cc71eb48efc69..e9afc855c4bfb4533a7f0e96920bf6f53211133a 100644
--- a/main/views/info/4/download.html
+++ b/main/views/info/4/download.html
@@ -13,10 +13,10 @@ root to install Kado into your project.</p>
 <p>Please use the link below to download an archive file containing the latest
 version of Kado.</p>
 <ul>
-<li><a href="https://git.nullivex.com/kado/kado/-/archive/v4.1.0/kado-v4.1.0.zip">kado-4.1.0.zip</a> - All Platforms</li>
-<li><a href="https://git.nullivex.com/kado/kado/-/archive/v4.1.0/kado-v4.1.0.tar.gz">kado-4.1.0.tar.gz</a> - All Platforms</li>
-<li><a href="https://git.nullivex.com/kado/kado/-/archive/v4.1.0/kado-v4.1.0.tar.bz2">kado-4.1.0.tar.bz2</a> - All Platforms</li>
-<li><a href="https://git.nullivex.com/kado/kado/-/archive/v4.1.0/kado-v4.1.0.tar">kado-4.1.0.tar</a> - All Platforms</li>
+<li><a href="https://git.nullivex.com/kado/kado/-/archive/v4.2.0/kado-v4.2.0.zip">kado-4.2.0.zip</a> - All Platforms</li>
+<li><a href="https://git.nullivex.com/kado/kado/-/archive/v4.2.0/kado-v4.2.0.tar.gz">kado-4.2.0.tar.gz</a> - All Platforms</li>
+<li><a href="https://git.nullivex.com/kado/kado/-/archive/v4.2.0/kado-v4.2.0.tar.bz2">kado-4.2.0.tar.bz2</a> - All Platforms</li>
+<li><a href="https://git.nullivex.com/kado/kado/-/archive/v4.2.0/kado-v4.2.0.tar">kado-4.2.0.tar</a> - All Platforms</li>
 </ul>
 <p>For earlier versions see our <a href="https://git.nullivex.com/kado/kado/-/releases">Release Page</a>.</p>
 <h2 id="kado3legacy">Kado 3 (legacy)</h2>
@@ -27,10 +27,10 @@ version of Kado.</p>
 <h3 id="directdownload-1">Direct Download</h3>
 <p>Use the archives below for direct installation.</p>
 <ul>
-<li><a href="https://git.nullivex.com/kado/kado/-/archive/v3.10.6/kado-v3.10.6.zip">kado-3.10.6.zip</a> - All Platforms</li>
-<li><a href="https://git.nullivex.com/kado/kado/-/archive/v3.10.6/kado-v3.10.6.tar.gz">kado-3.10.6.tar.gz</a> - All Platforms</li>
-<li><a href="https://git.nullivex.com/kado/kado/-/archive/v3.10.6/kado-v3.10.6.tar.bz2">kado-3.10.6.tar.bz2</a> - All Platforms</li>
-<li><a href="https://git.nullivex.com/kado/kado/-/archive/v3.10.6/kado-v3.10.6.tar">kado-3.10.6.tar</a> - All Platforms</li>
+<li><a href="https://git.nullivex.com/kado/kado/-/archive/v3.10.7/kado-v3.10.7.zip">kado-3.10.7.zip</a> - All Platforms</li>
+<li><a href="https://git.nullivex.com/kado/kado/-/archive/v3.10.7/kado-v3.10.7.tar.gz">kado-3.10.7.tar.gz</a> - All Platforms</li>
+<li><a href="https://git.nullivex.com/kado/kado/-/archive/v3.10.7/kado-v3.10.7.tar.bz2">kado-3.10.7.tar.bz2</a> - All Platforms</li>
+<li><a href="https://git.nullivex.com/kado/kado/-/archive/v3.10.7/kado-v3.10.7.tar">kado-3.10.7.tar</a> - All Platforms</li>
 </ul>
 <p>For earlier versions see our <a href="https://git.nullivex.com/kado/kado/-/releases">Release Page</a>.</p>
 <h2 id="cdnusage">CDN Usage</h2>
@@ -42,7 +42,7 @@ your program is interested in.</p>
 <p>See our <a href="https://www.jsdelivr.com/package/npm/kado">JSDelivr Page</a> for a
 complete file list.</p>
 <p>Example loading <code>kado/lib/Parse</code></p>
-<pre><code>&lt;script type="text/javascript" src="https://cdn.jsdelivr.net/npm/kado@4.1.0/lib/Parse.js"&gt;&lt;/script&gt;
+<pre><code>&lt;script type="text/javascript" src="https://cdn.jsdelivr.net/npm/kado@4.2.0/lib/Parse.js"&gt;&lt;/script&gt;
 </code></pre>
 <p>NOTE: Kado modules are built using CommonJS and as such CommonJS must be used
 to load kado modules.</p>
\ No newline at end of file
diff --git a/main/views/info/4/home.html b/main/views/info/4/home.html
index bf1cbbc1ab9589294dbbf6a6ef6549276b812a17..b9988e440492be4cd0769d8c63e95838e9850dfc 100644
--- a/main/views/info/4/home.html
+++ b/main/views/info/4/home.html
@@ -1,26 +1,12 @@
 <h1 id="welcometokado">Welcome to Kado</h1>
 <p><a href="https://git.nullivex.com/kado/kado/commits/4.x"><img src="https://git.nullivex.com/kado/kado/badges/master/pipeline.svg" alt="pipeline status" /></a>
 <a href="https://travis-ci.org/KadoOrg/kado"><img src="https://travis-ci.org/KadoOrg/kado.svg?branch=master" alt="Build Status" /></a>
-<a href="https://badge.fury.io/js/kado"><img src="https://badge.fury.io/js/kado.svg" alt="npm version" /></a>
-<a href="https://gitter.im/KadoOrg/Lobby?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge"><img src="https://badges.gitter.im/Join%20Chat.svg" alt="Join the chat at https://gitter.im/KadoOrg/Lobby" /></a></p>
-<p>Install Kado quickly or see <a href="../info/Download.md">Download</a> for more details.</p>
+<a href="https://badge.fury.io/js/kado"><img src="https://badge.fury.io/js/kado.svg" alt="npm version" /></a></p>
+<p>Install Kado using <a href="https://npmjs.org">NPM</a> or see
+<a href="/info/download/">Download</a> for more details.</p>
 <pre><code>npm install kado
 </code></pre>
-<p>JavaScript Framework Libraries for Node.JS</p>
-<h2 id="features">Features</h2>
-<ul>
-<li>Easily setup web servers to replace Apache, NGINX, etc.</li>
-<li>Build command line applications quickly.</li>
-<li>Create back ends for existing applications and save resources.</li>
-<li>Trusted by applications serving billions of page views.</li>
-<li>0 external dependencies. The buck stops here!</li>
-<li>Libraries for most common application needs.</li>
-<li>Thoroughly tested, continuously integrated, actively developed.</li>
-<li>Make your own framework in just a few minutes!</li>
-<li>Code is peer reviewed, openly developed, openly licensed.</li>
-<li>Assertion, validation, and test running built in.</li>
-<li>LGPL 3.0 License. Use Kado where you need it.</li>
-</ul>
+<p>High Quality JavaScript Framework Libraries for Node.JS</p>
 <h2 id="quickhelloserver">Quick Hello Server</h2>
 <p>Place the following code into an empty JavaScript file, example: <code>app.js</code>.</p>
 <pre><code class="js language-js"><span class="hljs-keyword">const</span> HyperText = <span class="hljs-built_in">require</span>(<span class="hljs-string">'kado/lib/HyperText'</span>)
@@ -36,7 +22,22 @@ the same folder as the JavaScript file.</p>
 </code></pre>
 <p>Once the command has executed, a web server that says "Hello" will be available
 on port <code>3000</code> of your local machine, example: <code>http://localhost:3000</code>.</p>
-<p>See the guides below for more examples.</p>
+<p>See more guides and examples below.</p>
+<h2 id="features">Features</h2>
+<ul>
+<li>Create servers that produce websites, APIs, or anything really.</li>
+<li>Create back ends for existing applications and save resources.</li>
+<li>Build command line applications quickly.</li>
+<li>Trusted by applications serving billions of page views.</li>
+<li>0 external dependencies. The buck stops here!</li>
+<li>Libraries for most common application needs.</li>
+<li>Thoroughly tested, continuously integrated, actively developed.</li>
+<li>Make your own framework in just a few minutes!</li>
+<li>Code is peer reviewed, openly developed, openly licensed.</li>
+<li>Assertion, validation, and test running built in.</li>
+<li>LGPL 3.0 License. Use Kado where you need it.</li>
+<li>Easily setup web servers to replace Apache, NGINX, and others.</li>
+</ul>
 <h2 id="getstartedwithourguides">Get Started with our Guides</h2>
 <p>Our guides provide a step by step experience to learn how to use Kado to go from
 saying "Hello" on a web port to writing a working administration panel. Once
@@ -44,94 +45,108 @@ these guides are completed, building websites and applications using Kado should
 feel second nature. Each guide below is accompanied by a link to the full guide
 as well as a short description of what each guide provides.</p>
 <ul>
-<li><a href="../guide/GettingStarted.md">Getting Started</a> - Get started using Kado and
-create a simple project that says "Hello" via HTTP on localhost port 3000.</li>
-<li><a href="../guide/HelloWorld.md">HelloWorld</a> - Building upon the
-<a href="../guide/GettingStarted.md">GettingStarted</a> guide, this guide will introduce
-rendering and templates that say "Hello World" with HTML.</li>
-<li><a href="../guide/MakeSimpleWebsite.md">Make a Simple Website</a> - Continuing from
-the <a href="../guide/HelloWorld.md">HelloWorld</a> guide we add partials, static file
-serving, CSS, and navigation to create a simple working website.</li>
-<li><a href="../guide/BuildAdminPanel.md">Build an Admin Panel</a> - Now with
-<a href="../guide/MakeSimpleWebsite.md">Make a Simple Website</a> complete, we continue
-to explore how to build an administration panel on top of our simple website.</li>
-<li><a href="../guide/DatabaseWorkFlow.md">Database Work Flows</a> - With a working
-<a href="../guide/BuildAdminPanel.md">Admin Panel</a> the next step is to setup a
+<li><a href="/guide/getting-started/">Getting Started</a> - Get started using Kado
+and create a simple project that says "Hello" via HTTP on localhost port 3000.</li>
+<li><a href="/guide/hello-world/">HelloWorld</a> - Building upon the
+<a href="/guide/getting-started/">GettingStarted</a> guide, this guide will
+introduce rendering and templates that say "Hello World" with HTML.</li>
+<li><a href="/guide/make-simple-website/">Make a Simple Website</a> - Continuing
+from the <a href="/guide/hello-world/">HelloWorld</a> guide we add partials,
+static file serving, CSS, and navigation to create a simple working website.</li>
+<li><a href="/guide/build-admin-panel/">Build an Admin Panel</a> - Now with
+<a href="/guide/make-simple-website/">Make a Simple Website</a> complete, we
+continue to explore how to build an administration panel on top of our simple
+website.</li>
+<li><a href="/guide/database-work-flow/">Database Work Flows</a> - With a working
+<a href="/guide/build-admin-panel/">Admin Panel</a> the next step is to setup a
 connection to a database so we can store the data created by the application.</li>
-<li><a href="../guide/WorkingWithEmail.md">Working With Email</a> - Explore sending
+<li><a href="/guide/working-with-email/">Working With Email</a> - Explore sending
 emails using the Kado provided libraries and connecting to an email server.</li>
-<li><a href="../guide/ViewsRendering.md">Views and Rendering</a> - Everything you need to
-know about the Kado view system and how to render views.</li>
-<li><a href="../guide/WritingTests.md">Writing Tests</a> - Write tests against your
+<li><a href="/guide/views-rendering/">Views and Rendering</a> - Everything you need
+to know about the Kado view system and how to render views.</li>
+<li><a href="/guide/writing-tests/">Writing Tests</a> - Write tests against your
 application easily using the provided Kado library.</li>
 <li><a href="../guide/AdvancedTechniques.md">Advanced Techniques</a> - Prepare your
 application for production with the introduction of clustered processes and
 command line applications.</li>
 </ul>
 <h2 id="kadolibrarylist">Kado Library List</h2>
-<p>This is an exhaustive lise of all the JavaScript libraries provided with Kado.
+<p>This is an exhaustive list of all the JavaScript libraries provided with Kado.
 Each library has a link to its documentation as well as a short description of
 what is provided by the library.</p>
 <ul>
-<li><a href="https://kado.org/doc/application/">Application</a> - Create a new application containing most
-Kado features.</li>
-<li><a href="https://kado.org/doc/assert/">Assert</a> - Make assertions on input or tests.</li>
-<li><a href="https://kado.org/doc/asset/">Asset</a> - Store, filter, and query static application
+<li><a href="/doc/application/">Application</a> - Create a new application containing
+most Kado features.</li>
+<li><a href="/doc/assert/">Assert</a> - Make assertions on input or tests.</li>
+<li><a href="/doc/asset/">Asset</a> - Store, filter, and query static application
 files.</li>
-<li><a href="https://kado.org/doc/child-process/">ChildProcess</a> - Child process library adding convenience and
-functionality to the core child_process functions.</li>
-<li><a href="https://kado.org/doc/cluster/">Cluster</a> - Cluster library for constructing and
+<li><a href="/doc/child-process/">ChildProcess</a> - Child process library adding
+convenience and functionality to the core child_process functions.</li>
+<li><a href="/doc/cluster/">Cluster</a> - Cluster library for constructing and
 operating process clusters.</li>
-<li><a href="https://kado.org/doc/command/">Command</a> - Build CLI applications with ease.</li>
-<li><a href="https://kado.org/doc/command-server/">CommandServer</a> - Execute CLI applications like a
+<li><a href="/doc/command/">Command</a> - Build CLI applications with ease.</li>
+<li><a href="/doc/command-server/">CommandServer</a> - Execute CLI applications like a
 web server.</li>
-<li><a href="https://kado.org/doc/connect/">Connect</a> - Framework for housing external resource
+<li><a href="/doc/connect/">Connect</a> - Framework for housing external resource
 connections.</li>
-<li><a href="https://kado.org/doc/connect-engine/">ConnectEngine</a> - Interface for creating an engine
+<li><a href="/doc/connect-engine/">ConnectEngine</a> - Interface for creating an engine
 to be used with a Connect system.</li>
-<li><a href="https://kado.org/doc/cron/">Cron</a> - Execute functions on a schedule similar to UNIX
+<li><a href="/doc/cron/">Cron</a> - Execute functions on a schedule similar to UNIX
 cron jobs.</li>
-<li><a href="https://kado.org/doc/database/">Database</a> - Connect system made for Databases.</li>
-<li><a href="https://kado.org/doc/email/">Email</a> - Connect system made for Email.</li>
-<li><a href="https://kado.org/doc/etag/">ETag</a> - Class for determining ETag header.</li>
-<li><a href="https://kado.org/doc/event/">Event</a> - Create, track and handle application events with
+<li><a href="/doc/database/">Database</a> - Connect system made for Databases.</li>
+<li><a href="/doc/email/">Email</a> - Connect system made for Email.</li>
+<li><a href="/doc/etag/">ETag</a> - Class for determining ETag header.</li>
+<li><a href="/doc/event/">Event</a> - Create, track and handle application events with
 log levels.</li>
-<li><a href="https://kado.org/doc/file-system/">FileSystem</a> - Consistent API for use with File System methods.</li>
-<li><a href="https://kado.org/doc/format/">Format</a> - Commonly used String, Number, and Date format
+<li><a href="/doc/file-system/">FileSystem</a> - Consistent API for use with File
+System methods.</li>
+<li><a href="/doc/format/">Format</a> - Commonly used String, Number, and Date format
 methods.</li>
-<li><a href="https://kado.org/doc/get-opt/">GetOpt</a> - Parse command line string input into an
+<li><a href="/doc/get-opt/">GetOpt</a> - Parse command line string input into an
 object.</li>
-<li><a href="https://kado.org/doc/history/">History</a> - Track user navigation history throughout
+<li><a href="/doc/history/">History</a> - Track user navigation history throughout
 a session.</li>
-<li><a href="https://kado.org/doc/hyper-text/">HyperText</a> - Connect system made for HTTP servers.</li>
-<li><a href="https://kado.org/doc/language/">Language</a> - Internationalization helpers including
+<li><a href="/doc/hyper-text/">HyperText</a> - Connect system made for HTTP servers.</li>
+<li><a href="/doc/language/">Language</a> - Internationalization helpers including
 loading, parsing, and displaying languages.</li>
-<li><a href="https://kado.org/doc/library/">Library</a> - Dynamic library loader.</li>
-<li><a href="https://kado.org/doc/lifecycle/">Lifecycle</a> - Start and stop systems with events.</li>
-<li><a href="https://kado.org/doc/log/">Log</a> - Connect system made for Logs.</li>
-<li><a href="https://kado.org/doc/mapper/">Mapper</a> - ECMA Map functionality on Objects.</li>
-<li><a href="https://kado.org/doc/message/">Message</a> - Create, track and handle messages from
+<li><a href="/doc/library/">Library</a> - Dynamic library loader.</li>
+<li><a href="/doc/lifecycle/">Lifecycle</a> - Start and stop systems with events.</li>
+<li><a href="/doc/log/">Log</a> - Connect system made for Logs.</li>
+<li><a href="/doc/mapper/">Mapper</a> - ECMA Map functionality on Objects.</li>
+<li><a href="/doc/message/">Message</a> - Create, track and handle messages from
 various inputs and outputs.</li>
-<li><a href="https://kado.org/doc/module/">Module</a> - Super class for creating Kado modules.</li>
-<li><a href="https://kado.org/doc/mime/">Mime</a> - Class for determining file types.</li>
-<li><a href="https://kado.org/doc/navigation/">Navigation</a> - Create and manage application menus.</li>
-<li><a href="https://kado.org/doc/parser/">Parser</a> - Parse input strings to variables such as objects.</li>
-<li><a href="https://kado.org/doc/path-exp/">PathExp</a> - Use path notation to validate routes on URIs.</li>
-<li><a href="https://kado.org/doc/permission/">Permission</a> - Create and test permission sets to
+<li><a href="/doc/mime/">Mime</a> - Class for determining file types.</li>
+<li><a href="/doc/model/">Model</a> - Super class for building new data models used
+for interacting with data sets produced by data queries.</li>
+<li><a href="/doc/module/">Module</a> - Super class for creating Kado modules.</li>
+<li><a href="/doc/mustache/">Mustache</a> - Provides a logic-less templating system
+for use in providing any kind of text rendering.</li>
+<li><a href="/doc/navigation/">Navigation</a> - Create and manage application menus.</li>
+<li><a href="/doc/parser/">Parser</a> - Parse input strings to variables such as
+objects.</li>
+<li><a href="/doc/path-exp/">PathExp</a> - Use path notation to validate routes on
+URIs.</li>
+<li><a href="/doc/permission/">Permission</a> - Create and test permission sets to
 allow fine grained user control.</li>
-<li><a href="https://kado.org/doc/profiler/">Profiler</a> - Track application resource usage and
+<li><a href="/doc/profiler/">Profiler</a> - Track application resource usage and
 timing.</li>
-<li><a href="https://kado.org/doc/router/">Router</a> - Store and process application route points.</li>
-<li><a href="https://kado.org/doc/search/">Search</a> - Connect system for made for search.</li>
-<li><a href="https://kado.org/doc/session/">Session</a> - Session system for storing data against users.</li>
-<li><a href="https://kado.org/doc/test-runner/">TestRunner</a> - Define and run Test Suites and Tests.</li>
-<li><a href="https://kado.org/doc/util/">Util</a> - Misfit useful functions.</li>
-<li><a href="https://kado.org/doc/validate/">Validate</a> - Validate input.</li>
-<li><a href="https://kado.org/doc/view/">View</a> - Connect system made for rendering.</li>
+<li><a href="/doc/query/">Query</a> - Super class for constructing query builders that
+are customized for a specific query language.</li>
+<li><a href="/doc/query-cache/">QueryCache</a> - Query cache system for databases.</li>
+<li><a href="/doc/router/">Router</a> - Store and process application route points.</li>
+<li><a href="/doc/schema/">Schema</a> - Super class for constructing schema builders
+that are customized for a specific schema language.</li>
+<li><a href="/doc/search/">Search</a> - Connect system for made for search.</li>
+<li><a href="/doc/session/">Session</a> - Session system for storing data against
+users.</li>
+<li><a href="/doc/test-runner/">TestRunner</a> - Define and run Test Suites and Tests.</li>
+<li><a href="/doc/util/">Util</a> - Misfit useful functions.</li>
+<li><a href="/doc/validate/">Validate</a> - Validate input.</li>
+<li><a href="/doc/view/">View</a> - Connect system made for rendering.</li>
 </ul>
 <h2 id="questionsorproblems">Questions or Problems?</h2>
 <p>Please see our <a href="https://git.nullivex.com/kado/kado/issues">bug tracker</a></p>
 <h2 id="changelog">Change Log</h2>
-<p>Please see the <a href="./CHANGELOG.md">CHANGELOG</a></p>
+<p>Please see the <a href="/info/changelog/">CHANGELOG</a></p>
 <h2 id="contributing">Contributing</h2>
-<p>Please see the <a href="./CONTRIBUTING.md">Contribution Guidelines</a></p>
\ No newline at end of file
+<p>Please see the <a href="/info/contributing/">Contribution Guidelines</a></p>
\ No newline at end of file
diff --git a/main/views/info/4/introduction.html b/main/views/info/4/introduction.html
index e73f587647f1ab0a011879e10c6b8d654ab3e540..521795a63f3f3eaf18df231de8be1e615ca7c95b 100644
--- a/main/views/info/4/introduction.html
+++ b/main/views/info/4/introduction.html
@@ -44,4 +44,4 @@ love for making easy to use libraries for your enjoyment.</p>
 <h2 id="conclusion">Conclusion</h2>
 <p>We hope this gives you some background so that you can be rest assured your
 efforts in Kado will not go in vein. Ready to get started? Head over to our
-<a href="./QuickStart.md">Quick Start</a> guide and get going in a few minutes!</p>
\ No newline at end of file
+<a href="/guide/quick-start/">Quick Start</a> guide and get going in a few minutes!</p>
\ No newline at end of file
diff --git a/main/views/info/4/why-kado.html b/main/views/info/4/why-kado.html
index 318121336d0063aef9e3997e5876fa78d8089767..687379762b4dd7525741689cd7cfd62ecc25908d 100644
--- a/main/views/info/4/why-kado.html
+++ b/main/views/info/4/why-kado.html
@@ -15,4 +15,4 @@ Security and reliability matter. On top of that Kado includes a production ready
 process system that can scale to any size.</p>
 <h2 id="getstartedtoday">Get Started Today</h2>
 <p>Give Kado a try today and start embracing the power it can give your team.
-Try our <a href="../guide/QuickStart.md">Quick Start</a> guide!</p>
\ No newline at end of file
+Try our <a href="/guide/quick-start/">Quick Start</a> guide!</p>
\ No newline at end of file
diff --git a/main/views/sidebar.html b/main/views/sidebar.html
index eb276f8ad64b48e1be81f9d44c62b8f36b287ebe..56a159cc433ff945ff0a11d7584b246f9f84d866 100644
--- a/main/views/sidebar.html
+++ b/main/views/sidebar.html
@@ -3,9 +3,9 @@
     <li><a href="/">Home</a></li>
     <li><a href="/download/">Download</a></li>
     <li><a href="/info/changelog/">Changelog</a></li>
-    <li><a href="/guide/introduction/">Introduction</a></li>
     <li><a href="/info/about-us/">About Us</a></li>
     <li><a href="/info/why-kado/">Why Kado</a></li>
+    <li><a href="/guide/introduction/">Introduction</a></li>
     <li><a href="/guide/quick-start">Quick Start</a></li>
   </ul>
   <h2>Documentation</h2>
diff --git a/package-lock.json b/package-lock.json
index 807c9bbb7d4363e1f501508e293914eecc23001b..0b130a0e237136ee36e76bae0a33471972418da0 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -91,9 +91,8 @@
       "dev": true
     },
     "kado": {
-      "version": "4.1.0",
-      "resolved": "https://registry.npmjs.org/kado/-/kado-4.1.0.tgz",
-      "integrity": "sha512-bI3iizJQY7KCUWJu2mXHasdc9oklYt3mHsvNIG3N6H8TTZbbQiq8ygK1mcEq/oRn5sgmUx1FNhOGp6g3h2dC/A=="
+      "version": "git+ssh://git@git.nullivex.com:kado/kado.git#972ce408f6c9050120b82e4790ea961e089d05cb",
+      "from": "git+ssh://git@git.nullivex.com:kado/kado.git#master"
     },
     "locate-path": {
       "version": "3.0.0",
@@ -105,11 +104,6 @@
         "path-exists": "^3.0.0"
       }
     },
-    "mustache": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/mustache/-/mustache-4.0.0.tgz",
-      "integrity": "sha512-FJgjyX/IVkbXBXYUwH+OYwQKqWpFPLaLVESd70yHjSDunwzV2hZOoTBvPf4KLoxesUzzyfTH6F784Uqd7Wm5yA=="
-    },
     "p-limit": {
       "version": "2.2.2",
       "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.2.2.tgz",
diff --git a/package.json b/package.json
index 67338a239cbb3934d192b3793ef08f0ae11a21ad..1963050b9933d76e18e46f5a72ce0f050f722b0c 100644
--- a/package.json
+++ b/package.json
@@ -19,8 +19,7 @@
   },
   "main": "./app.js",
   "dependencies": {
-    "kado": "^4.1.0",
-    "mustache": "^4.0.0"
+    "kado": "git+ssh://git@git.nullivex.com:kado/kado.git#master"
   },
   "devDependencies": {
     "highlight.js": "^9.18.1",