---
title: renderToHTML
canary: true
---
`renderToHTML` renders a React tree to non-interactive HTML.
```js
const stream = renderToHTML(reactNode, options?)
```
---
## Reference {/*reference*/}
### `renderToHTML(reactNode, options?)` {/*rendertohtml*/}
You can call `renderToHTML` to render a non-interactive tree of React components to HTML.
By default, it supports shared components and built-in components.
Server Components are only allowed if used in a React Server environment (e.g. in Server Actions).
You can also use it during Client-Side Rendering but only without Server Components.
When a `` tag is rendered, `renderToHTML` will automatically add `` doctype.
```js
import { experimental_renderToHTML as renderToHTML } from 'react-dom/server';
const markup = await renderToHTML();
```
#### Parameters {/*parameters*/}
* `reactNode`: A React node you want to render to HTML. For example, a JSX element like ``.
* **optional** `options`: An object for server render.
* **optional** `identifierPrefix`: A string prefix React uses for IDs generated by [`useId`.](/reference/react/useId) Useful to avoid conflicts when the markup is embedded in or combined with other markup that is rendered by React.
* **optional** `onError`: A callback that fires whenever there is a server error. By default, this only calls `console.error`. If you override it to [log crash reports,](#logging-crashes-on-the-server) make sure that you still call `console.error`. This is different to the rejection reason of the created Promise since it'll include the parent component stack.
* **optional** `signal`: An [abort signal](https://developer.mozilla.org/en-US/docs/Web/API/AbortSignal) that lets you [abort rendering](#aborting-server-rendering). The original Promise will reject.
#### Returns {/*returns*/}
`renderToHTML` returns a Promise that will resolve with the HTML string of the rendered React tree.
#### Caveats {/*caveats*/}
* Will throw when Client APIs (e.g. `useState` or `useEffect`) are used.
---
## Usage {/*usage*/}
### Rendering a React tree as an Email {/*rendering-a-react-tree-as-an-email*/}
Await the call of `renderToHTML` :
```js {7}
import { experimental_renderToHTML as renderToHTML } from 'react-markup';
import EmailTemplate from './my-email-template-component.js'
async function action(email, name) {
"use server";
// ... in your server, e.g. a Server Action...
const htmlString = await renderToHTML();
// ... send e-mail using some e-mail provider
await sendEmail({ to: email, contentType: 'text/html', body: htmlString });
}
```