diff --git a/doc/template/README.md b/doc/template/README.md
new file mode 100644
index 0000000000..a7bd96bfd5
--- /dev/null
+++ b/doc/template/README.md
@@ -0,0 +1 @@
+The default template for JSDoc 3 uses: [the Taffy Database library](http://taffydb.com/) and the [Underscore Template library](http://documentcloud.github.com/underscore/#template).
diff --git a/doc/template/publish.js b/doc/template/publish.js
new file mode 100644
index 0000000000..23e9c7d08e
--- /dev/null
+++ b/doc/template/publish.js
@@ -0,0 +1,379 @@
+/*global env: true */
+var template = require('jsdoc/template'),
+ fs = require('fs'),
+ path = require('path'),
+ helper = require('jsdoc/util/templateHelper'),
+ scopeToPunc = helper.scopeToPunc,
+ hasOwnProp = Object.prototype.hasOwnProperty,
+ data,
+ view,
+ outdir = env.opts.destination;
+
+function find(spec, sort) {
+ return helper.find(data, spec, sort);
+}
+
+function tutoriallink(tutorial) {
+ return helper.toTutorial(tutorial, null, { tag: 'em', classname: 'disabled', prefix: 'Tutorial: ' });
+}
+
+function getAncestorLinks(doclet) {
+ return helper.getAncestorLinks(data, doclet);
+}
+
+var linkto = helper.linkto;
+
+var htmlsafe = helper.htmlsafe;
+
+function hashToLink(doclet, hash) {
+ if (!/^(#.+)/.test(hash)) { return hash; }
+
+ var url = helper.createLink(doclet);
+
+ url = url.replace(/(#.+|$)/, hash);
+ return '' + hash + '';
+}
+
+function addSignatureParams(f) {
+ var params = helper.getSignatureParams(f, 'optional');
+
+ f.signature = (f.signature || '') + '('+params.join(', ')+')';
+}
+
+function addSignatureReturns(f) {
+ var returnTypes = helper.getSignatureReturns(f);
+
+ f.signature = ''+(f.signature || '') + '' + ''+(returnTypes.length? ' → {'+returnTypes.join('|')+'}' : '')+'';
+}
+
+function addSignatureTypes(f) {
+ var types = helper.getSignatureTypes(f);
+
+ f.signature = (f.signature || '') + ''+(types.length? ' :'+types.join('|') : '')+'';
+}
+
+function addAttribs(f) {
+ var attribs = helper.getAttribs(f);
+
+ f.attribs = ''+htmlsafe(attribs.length? '<'+attribs.join(', ')+'> ' : '')+'';
+}
+
+function generate(title, docs, filename) {
+ var docData = {
+ title: title,
+ docs: docs
+ };
+
+ var outpath = outdir + '/' + filename,
+ html = view.render('container.tmpl', docData);
+
+ html = helper.resolveLinks(html); // turn {@link foo} into foo
+
+ fs.writeFileSync(outpath, html);
+}
+
+/**
+ * Create the navigation sidebar.
+ * @param {object} members The members that will be used to create the sidebar.
+ * @param {array
+
+
+
+
+
+
+
+
+
+