---
title: "Node.js rendering engine"
slug: "node-js-rendering-engine"
abstract: "Server-side render React, Angular, and Vue JSS apps with a rendering engine controlled by Sitecore."
---
# Node.js rendering engine

The Node.js rendering engine uses a `node.js` instance running on your Sitecore Content Management (CM) server to render your applications built with the JavaScript Rendering SDK (JSS). If using [integrated mode](https://doc.sitecore.com/xp/en/developers/hd/23/sitecore-headless-development/start-a-jss-app-in-integrated-mode.html "Start a JSS app in integrated mode") in production, the `node.js` instance must run on the Content Delivery (CD) server.

> [!note]
> The Node.js rendering engine is not usable with JSS for Next.js or ASP.NET Rendering SDK applications.

## Architectural overview

The ASP.NET and the Sitecore MVC infrastructure are extensible and allow for custom JavaScript renderers plugging in.

When the browser sends a page request, the JavaScript renderers hand off the JavaScript bundle and Layout Service JSON-formatted data to node.js through the ASP.NET `NodeServices`. Node.js returns a response containing the HTML string.

![Server-side rendering request-response flow with the Node.js rendering engine](https://doc.sitecore.com/api/markdown-image/xp/en/developers/hd/23/sitecore-headless-development/images/server-side-rendering.png)

The page-level items that correspond to the route are expected to have conventional presentation details set on them:

![Presentation details on page-level items](https://doc.sitecore.com/api/markdown-image/xp/en/developers/hd/23/sitecore-headless-development/images/layout-details.png)

Using a layout based on the `/sitecore/templates/Foundation/JavaScript Services/JSS Layout` template, in the previous image, `JSS App` triggers rendering by Headless Services using the rendering engine configured for the JSS application. The layouts, in this case, serve only as indicators and point at empty Razor views. The `WelcomeRendering` is a real Sitecore rendering item of the type `React JavaScript Rendering` , defined under `/sitecore/layout/renderings`.

In their server bundle, the JSS applications export and invoke a `renderView` function that consumes the response to produce the static rendering of the application. Data passed into this function is double encoded to preserve JSON formatting and must be parsed with `JSON.parse()` before use.

## Pros and cons of the Node.js rendering engine

*Pros*

- It is simple to set up. Install `node.js` on the Sitecore server and add the node executable to the `PATH`.
- You do not have to manage `node.js` instances manually.
- Built-in pooling.

*Cons*

- You have limited customization options of `node.js` startup, profiling, debugging.
- You have limited control over pooling/clustering.
- You need to install `node.js` on Sitecore servers.
- You must deploy JSS app artifacts to the Sitecore server.
- Not usable with Next.js or ASP.NET Core