Site Level Render Plugins
This feature is aimed at low level content creators and developers who want to customize how Curvenote renders their content on their site and content site.
Site level render plugins allow you to customize how individual content blocks (AST nodes) appear on your Curvenote site. You ship small ESM modules with your content project; the Curvenote CLI copies or bundles them for you and ships them with your site, and the Curvenote theme services load these at runtime.
Themes already ship built-in renderers. This guide is for site-level Curvenote plugins you add yourself.
You typically do one of two things:
Override an existing node type (for example, restyle every
admonition) by returning that key from your render map.Add something new by pairing a custom Curvenote directive with a matching NodeRenderer.
As an example of what’s possible is a filterable table: interactive search chrome around a normal list-table, while built-in renderers still draw the table AST underneath. See Override and extend for how that works.

Figure 1:A filterable table: site UI wraps a standard table without replacing the built-in table renderers.
Register a Curvenote plugin in curvenote.yml, declare renderers, and run curvenote start.
Vanilla ESM, pre-bundled ESM, or raw TSX that the CLI bundles — createElement or JSX, with React left external.
Replace built-in renderers, add custom directives, and wrap nodes with variant selectors.
- AST
- Abstract Syntax Tree
- CLI
- Command Line Interface