Renderers
A renderer is the step between what a generator returns and the FileNodes the engine writes. A generator has two ways to produce output. It can build FileNodes directly with the ast.factory node builders, or it can return elements and let a renderer walk them into FileNodes. The renderer is the second path.
Why rendering is a separate step
Building files by hand with ast.factory is precise, but it gets verbose once a file has imports, several declarations, and JSDoc. JSX reads better for that. It lets a generator describe output as components and nesting instead of a flat list of create* calls. Keeping the renderer separate means the generator does not care which style produced the file. The engine gets FileNodes either way.
Kubb ships kubb/jsx for the JSX path. Its jsxRenderer is React-free. Components run as plain functions, so hooks and suspense are not available. A generator turns it on by setting its renderer field.
When you write your own
Most plugins never need a custom renderer. Reach for createRenderer only when a generator emits through some other templating format and needs it walked into FileNodes. If you are building files directly or through JSX, the shipped tools already cover you.