API
In-browser rendering
Call katex.render with a TeX expression and a DOM element to render into:
katex.render("c = \\pm\\sqrt{a^2 + b^2}", element, {
    throwOnError: false
});
To avoid escaping the backslash (double backslash), you can use
String.raw
(but beware that escaping ${ and backtick is not possible while using String.raw).
katex.render(String.raw`c = \pm\sqrt{a^2 + b^2}`, element, {
    throwOnError: false
});
Server-side rendering or rendering to a string
To generate HTML on the server or to generate an HTML string of the rendered math, you can use katex.renderToString:
var html = katex.renderToString("c = \\pm\\sqrt{a^2 + b^2}", {
    throwOnError: false
});
// '<span class="katex">...</span>'
Handling errors
The examples above use the throwOnError: false option, which renders invalid
inputs as the TeX source code in red (by default), with the error message as
hover text.  Without this option, invalid LaTeX will cause a
katex.ParseError exception to be thrown.  See handling errors.
Configuring KaTeX
The last argument to katex.render and katex.renderToString can contain
a variety of rendering options.
Persistent Macros
KaTeX’s macro documentation tells the author that \gdef will create a macro that persists between KaTeX elements. In order to enable that persistence, you must create one shared macros object that you pass into every call to katex.render or katex.renderToString. (Do not create a fresh macros object for each call.)
For example, suppose that you have an array mathElements of DOM elements that contain math. Then you could write this code:
const macros = {};
for (let element of mathElements) {
    katex.render(element.textContent, element, {
        throwOnError: false,
        macros
    };
}
Notice that you create the macros object outside the loop. If an author uses \gdef, KaTeX will insert that macro definition into the macros object and since macros continues to exist between calls to katex.render, \gdef macros will persist between mathElements.
Security of Persistent Macros
Persistent macros can change the behavior of KaTeX (e.g. redefining standard commands), so for security, such a setup should be used only for multiple elements of common trust.  For example, you might enable persistent macros within a message posted by a single user (by creating a macros object for that message), but you probably should not enable persistent macros across multiple messages posted by multiple users.