Server-Side Rendering

For static-site generators (Astro, Eleventy, …) or progressive enhancement, import a server-safe renderToString helper from reactolith/server:

import { JSDOM } from "jsdom"; import { renderToString } from "reactolith/server"; import { resolveComponent } from "./resolve-component"; const dom = new JSDOM(`<div id="root"> <my-button variant="primary">Hello</my-button> </div>`); const root = dom.window.document.getElementById("root")!; const html = renderToString(root, resolveComponent);

The helper wraps the tree in AppProvider (or a custom one passed via appProvider) and pipes it through react-dom/server.renderToString. Router and Mercure side effects are skipped because both rely on useEffect, which React does not run during server rendering.