React Server Components bindings for DOM using Webpack, enabling server-side rendering with streaming support and client-server communication.
—
Pending
Does it follow best practices?
Impact
Pending
No eval scenarios have been run
Pending
The risk profile of this skill
React Server DOM Webpack provides React Server Components (RSC) bindings for DOM environments using Webpack as the bundler. It enables server-side rendering of React components with streaming support, facilitating seamless server-client communication for React applications with Webpack-based toolchains.
npm install react-server-dom-webpackreact@^19.1.1, react-dom@^19.1.1, webpack@^5.59.0The package provides environment-specific entry points for different runtime environments:
// Client-side (browser)
import { createFromFetch, createFromReadableStream, encodeReply } from "react-server-dom-webpack/client.browser";
// Client-side (Node.js)
import { createFromNodeStream } from "react-server-dom-webpack/client.node";
// Server-side (browser/edge)
import { renderToReadableStream, decodeReply } from "react-server-dom-webpack/server.browser";
// Server-side (Node.js)
import { renderToPipeableStream, decodeReplyFromBusboy } from "react-server-dom-webpack/server.node";
// Webpack plugin
import ReactFlightWebpackPlugin from "react-server-dom-webpack/plugin";For CommonJS environments:
const { createFromFetch } = require("react-server-dom-webpack/client.browser");
const { renderToReadableStream } = require("react-server-dom-webpack/server.browser");
const ReactFlightWebpackPlugin = require("react-server-dom-webpack/plugin");import { createFromFetch } from "react-server-dom-webpack/client.browser";
// Create RSC response from server fetch
const ServerComponent = createFromFetch(
fetch("/api/rsc"),
{
callServer: async (id, args) => {
const response = await fetch("/api/server-action", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ id, args })
});
return response.json();
}
}
);
// Use in React component
function App() {
return (
<Suspense fallback={<div>Loading...</div>}>
{ServerComponent}
</Suspense>
);
}import { renderToReadableStream } from "react-server-dom-webpack/server.browser";
// Render server component to stream
const stream = renderToReadableStream(
<MyServerComponent data={serverData} />,
clientManifest,
{
onError: (error) => console.error("RSC Error:", error)
}
);
// Send stream to client
return new Response(stream, {
headers: { "Content-Type": "text/x-component" }
});const ReactFlightWebpackPlugin = require("react-server-dom-webpack/plugin");
module.exports = {
plugins: [
new ReactFlightWebpackPlugin({
isServer: false,
clientReferences: [
{
directory: "./src",
recursive: true,
include: /\.(js|jsx|ts|tsx)$/,
}
]
})
]
};React Server DOM Webpack implements React's Flight protocol for server components, providing:
Client-side functionality for consuming server-rendered React components with streaming support and server communication.
function createFromFetch<T>(
promiseForResponse: Promise<Response>,
options?: ClientOptions
): Thenable<T>;
function createFromReadableStream<T>(
stream: ReadableStream,
options?: ClientOptions
): Thenable<T>;
function createFromNodeStream<T>(
stream: Readable,
serverConsumerManifest: ServerConsumerManifest,
options?: NodeClientOptions
): Thenable<T>;Server-side functionality for rendering React Server Components to streams with client communication support.
function renderToReadableStream(
model: ReactClientValue,
webpackMap: ClientManifest,
options?: ServerOptions
): ReadableStream;
function renderToPipeableStream(
model: ReactClientValue,
webpackMap: ClientManifest,
options?: ServerOptions
): PipeableStream;Webpack plugin for processing React Server Components and generating client/server manifests.
class ReactFlightWebpackPlugin {
constructor(options: PluginOptions);
apply(compiler: WebpackCompiler): void;
}
interface PluginOptions {
isServer: boolean;
clientReferences?: ClientReferencePath | ClientReferencePath[];
chunkName?: string;
clientManifestFilename?: string;
serverConsumerManifestFilename?: string;
}Functions for encoding client-to-server data and decoding server responses.
function encodeReply(
value: ReactServerValue,
options?: EncodeOptions
): Promise<string | URLSearchParams | FormData>;
function decodeReply(
body: string | FormData,
bundlerConfig?: ServerManifest
): any;
function decodeAction(
body: FormData,
bundlerConfig?: ServerManifest
): Promise<() => any> | null;Node.js-specific utilities for server component module loading and directive processing.
function register(): void;Static pre-rendering capabilities for React Server Components.
function unstable_prerender(
model: ReactClientValue,
webpackMap: ClientManifest,
options?: StaticOptions
): Promise<StaticResult>;interface ClientOptions {
callServer?: CallServerCallback;
temporaryReferences?: TemporaryReferenceSet;
findSourceMapURL?: FindSourceMapURLCallback;
replayConsoleLogs?: boolean;
environmentName?: string;
}
interface ServerOptions {
environmentName?: string | (() => string);
filterStackFrame?: (url: string, functionName: string) => boolean;
identifierPrefix?: string;
signal?: AbortSignal;
temporaryReferences?: TemporaryReferenceSet;
onError?: (error: Error) => void;
onPostpone?: (reason: string) => void;
}
interface ServerConsumerManifest {
moduleMap: ServerConsumerModuleMap;
moduleLoading: ModuleLoading;
serverModuleMap: null | ServerManifest;
}
type ReactClientValue = any;
type ClientManifest = Record<string, ImportManifestEntry>;
type ServerManifest = Record<string, any>;
type TemporaryReferenceSet = any;
type CallServerCallback = <A, T>(id: string, args: A) => Promise<T>;
type FindSourceMapURLCallback = (fileName: string, sourceMapURL: string) => string;