diff --git a/.gitignore b/.gitignore
index bfe173fb..62ed1768 100644
--- a/.gitignore
+++ b/.gitignore
@@ -16,3 +16,10 @@ diff.png
/test/symgroups.pdf
/test/screenshotter/unicode-fonts
coverage/
+lib/core/metadata.js
+lib/core/MetadataBlog.js
+website/translated_docs
+website/build/
+website/yarn.lock
+website/node_modules
+website/i18n/*
diff --git a/README.md b/README.md
index c8bed79f..fa83bf99 100644
--- a/README.md
+++ b/README.md
@@ -14,9 +14,9 @@ KaTeX is a fast, easy-to-use JavaScript library for TeX math rendering on the we
KaTeX supports all major browsers, including Chrome, Safari, Firefox, Opera, Edge, and IE 9 - IE 11. More information can be found on the [list of supported commands](https://khan.github.io/KaTeX/function-support.html) and on the [wiki](https://github.com/khan/katex/wiki).
-## Usage
+## Getting started
-You can [download KaTeX](https://github.com/khan/katex/releases) and host it on your server or include the `katex.min.js` and `katex.min.css` files on your page directly from a CDN:
+[Download KaTeX](https://github.com/khan/katex/releases) and host it on your server or include the `katex.min.js` and `katex.min.css` files on your page directly from a CDN:
```html
@@ -51,127 +51,9 @@ var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}");
Make sure to include the CSS and font files, but there is no need to include the JavaScript. Like `render`, `renderToString` throws if it can't parse the expression.
-#### Security
+## Documentation
-Any HTML generated by KaTeX *should* be safe from `
+
+```
+
+Then, call the exposed `renderMathInElement` function in a script tag
+before the close body tag:
+
+```html
+
+ ...
+
+
+```
+
+If you prefer to have all your setup inside the html ``,
+you can use the following script there
+(instead of the one above at the end of the ``):
+
+```html
+
+ ...
+
+ ...
+
+```
+
+## API
+This extension exposes a single function, `window.renderMathInElement`, with
+the following API:
+
+```js
+function renderMathInElement(elem, options)
+```
+
+`elem` is an HTML DOM element. The function will recursively search for text
+nodes inside this element and render the math in them.
+
+`options` is an optional object argument that can have the same keys as [the
+object passed to `katex.render`](https://github.com/Khan/KaTeX/#rendering-options),
+in addition to two auto-render-specific keys:
+
+- `delimiters`: This is a list of delimiters to look for math. Each delimiter
+ has three properties:
+
+ - `left`: A string which starts the math expression (i.e. the left delimiter).
+ - `right`: A string which ends the math expression (i.e. the right delimiter).
+ - `display`: A boolean of whether the math in the expression should be
+ rendered in display mode or not.
+
+ The default value is:
+
+ ```js
+ [
+ {left: "$$", right: "$$", display: true},
+ {left: "\\(", right: "\\)", display: false},
+ {left: "\\[", right: "\\]", display: true}
+ ]
+ ```
+
+- `ignoredTags`: This is a list of DOM node types to ignore when recursing
+ through. The default value is
+ `["script", "noscript", "style", "textarea", "pre", "code"]`.
+
+- `errorCallback`: A callback method returning a message and an error stack
+ in case of an critical error during rendering. The default uses `console.error`.
+
+The `displayMode` property of the options object is ignored, and is
+instead taken from the `display` key of the corresponding entry in the
+`delimiters` key.
+
+The same `options.macros` object (which defaults to an empty object `{}`)
+is passed into several calls to `katex.render`, so that consecutive equations
+can build up shared macros by `\gdef`.
diff --git a/docs/browser.md b/docs/browser.md
new file mode 100644
index 00000000..f52d5c6b
--- /dev/null
+++ b/docs/browser.md
@@ -0,0 +1,31 @@
+---
+id: browser
+title: Browser
+---
+> KaTeX supports all major browsers, including Chrome, Safari, Firefox, Opera, Edge, and IE 9 - IE 11.
+
+## CDN(Content Delivery Network)
+Use CDN to deliver KaTeX to your project:
+
+```html
+
+
+```
+
+KaTeX also provides minified versions:
+
+```html
+
+
+```
+
+## Download & Host Things Yourself
+Download the latest version from [here](https://github.com/Khan/KaTeX/releases),
+copy `katex.js`, `katex.css`(or `katex.min.js` and `katex.min.css` to use minified
+versions) and `fonts` from `/katex`, and include like above.
+
+## Bundler
+Use [`Node.js` package managers](node.md) to install KaTeX and require it in your
+project. Then bundle using bundlers like [webpack](https://webpack.js.org/) or
+[rollup.js](https://rollupjs.org/). Note that you have to bundle the stylesheet(`katex.css`)
+or include it manually.
diff --git a/docs/cli.md b/docs/cli.md
new file mode 100644
index 00000000..57820d7e
--- /dev/null
+++ b/docs/cli.md
@@ -0,0 +1,58 @@
+---
+id: cli
+title: CLI
+---
+
+KaTeX installed [using Node.js package managers](node.md) comes with a built-in CLI
+which can be used to render TeX to HTML from the command line. By default, CLI will
+take the input from `stdin`.
+
+```bash
+npx katex
+```
+
+> Above uses the `npx` command to run the locally installed executable.
+You can execute with the relative path: `./node_modules/.bin/katex`
+
+> To use CLI from local clone, you need to build the project first by
+running `npm run dist`
+
+# Usage
+
+## `-d, --display-mode`
+If true the math will be rendered in display mode, which will put the math in
+display style (so `\int` and `\sum` are large, for example), and will center the
+math on the page on its own line. [false]
+
+## `-t, --no-throw-on-error`
+If true, KaTeX will throw a ParseError when it encounters an unsupported command.
+If false, KaTeX will render the unsupported command as text in the color given by
+errorColor. [true]
+
+## `-c color, --error-color color`
+A color string given in the format 'rgb' or 'rrggbb'. This option determines the
+color which unsupported commands are rendered in. [#cc0000]
+
+## `-b, --color-is-text-color`
+Makes \color behave like LaTeX's 2-argument \textcolor, instead of LaTeX's
+one-argument \color mode change. [false]
+
+## `-u, --unicode-text-in-math-mode`
+Add support for unicode text characters in math mode. [false]
+
+## `-s size, --max-size size`
+If non-zero, all user-specified sizes, e.g. in \rule{500em}{500em}, will be capped
+to maxSize ems. Otherwise, elements and spaces can be arbitrarily large [0]
+
+## `-m macro:expansion, --macro macro:expansion`
+A custom macro. Each macro is a property with a name like \name which maps to a
+string that describes the expansion of the macro. []
+
+## `-f path, --macro-file path`
+Read macro definitions from the given file.
+
+## `-i path, --input path`
+Read LaTeX input from the given file.
+
+## `-o path, --output path`
+Write html output to the given file.
diff --git a/docs/error.md b/docs/error.md
new file mode 100644
index 00000000..c8fa654e
--- /dev/null
+++ b/docs/error.md
@@ -0,0 +1,17 @@
+---
+id: error
+title: Handling Errors
+---
+If KaTeX encounters an error (invalid or unsupported LaTeX) and `throwOnError`
+hasn't been set to `false`, then it will throw an exception of type
+`ParseError`. The message in this error includes some of the LaTeX
+source code, so needs to be escaped if you want to render it to HTML.
+
+In particular, you should convert `&`, `<`, `>` characters to
+`&`, `<`, `>` (e.g., using `_.escape`)
+before including either LaTeX source code or exception messages in your
+HTML/DOM. (Failure to escape in this way makes a `
+
+
+
+
+
+
+
+
+
KaTeX
+
+ The fastest math typesetting library for the web.
+
+ Simple API, no dependencies – yet super-fast on all major browsers.
+
+
+
+
Fast: KaTeX renders its math synchronously and doesn’t need to reflow the page.
+
Print quality: KaTeX’s layout is based on Donald Knuth’s TeX, the gold standard for math typesetting.
+
Self contained: KaTeX has no dependencies and can easily be bundled with your website resources.
+
Server side rendering: KaTeX produces the same output regardless of browser or environment, so you can pre-render expressions using Node.js and send them as plain HTML.
+
+
+
+
+
+
+
+
+
+ Lightning-fast, even on pages with hundreds of expressions:
+