# This workshop builds a React Server Components framework with no build step

> The epicweb-dev react-server-components workshop asks you to write a framework on top of React Server Components and Server Functions using only Node.js, React and the browser, with no Vite, no TypeScript and no JSX. It suits an experienced React developer who wants to understand the mechanism rather than consume it, and it is a course rather than a library.

**epicweb-dev/react-server-components** — Understand React Server Components and Server Actions by building a framework with them.

- Repository: https://github.com/epicweb-dev/react-server-components
- Website: https://server-components.epicreact.dev
- Stars: 623 · Forks: 61
- Language: JavaScript
- License: NOASSERTION
- Published: 2026-10-22 · Updated: 2026-10-22 · Language: en
- Canonical page: https://hysenlabs.com/projects/epicweb-dev-react-server-components

## A framework built from scratch to teach the mechanism

The stated goal is narrow and specific: understand React Server Components and Server Functions by building a framework with them. The project documentation is blunt about how that is done, listing what is absent before listing what is present. No build tools. No TypeScript, no Vite, no JSX. Just the browser, Node.js and React.

That constraint is the teaching method. When you cannot use a bundler, you cannot rely on a build step to resolve the 'use client' and 'use server' directives, to split your code between server and browser, or to transform JSX into function calls. You have to see what React's own runtime expects and satisfy it by hand, which is precisely the knowledge the workshop is aiming at.

The project is credited as heavily influenced by the work of sebmarkbage in a specific React commit, with thanks also to gaearon and rickhanlonii. So the exercises are built around an existing reference implementation rather than invented from nothing.

This is a workshop, not a framework to adopt. The repository root holds an exercises directory and an epicshop directory, and the package is marked private, so nothing here is published for you to depend on.

## Setup through the Epic Workshop CLI

Setup is a single command that uses the Epic Workshop CLI.

```shell
npx --yes epicshop@latest add react-server-components
```

The command is what the documentation asks for, and the instruction for failure is also given: if the setup errors, open an issue with as many details as you can offer.

Once setup finishes, the app starts with the start script.

```
npm start
```

The package.json shows what that script actually runs. Both start and dev point at the same thing, a pkgmgrx invocation that prefixes into the epicshop directory and runs epicshop start, which tells you the dev server and the production-ish start are the same path in this project.

```json
    "start": "pkgmgrx --prefix ./epicshop epicshop start",
    "dev": "pkgmgrx --prefix ./epicshop epicshop start",
    "test": "node ./epicshop/test.js",
    "setup": "pkgmgrx epicshop setup",
    "setup:custom": "node ./epicshop/setup-custom.js",
```

There is a separate setup:custom script that runs a plain node file rather than the CLI, which is the path to take when the CLI wrapper does not fit your setup. The postinstall hook installs dependencies inside the epicshop directory, which is why the CLI and the nested project are two layers.

## The version requirements disagree with each other

The system requirements section lists git v2.18 or greater, NodeJS v20 or greater, and npm v8 or greater, and says all of these must be available in your PATH, with a verification snippet.

```shell
git --version
node --version
npm --version
```

Then the package.json engines field is stricter: node at 22 or above, npm at 8.16.0 or above, and git at 2.18.0 or above.

```json
  "engines": {
    "node": ">=22",
    "npm": ">=8.16.0",
    "git": ">=2.18.0"
  },
```

So the prose floor is Node 20 and the machine-readable floor is Node 22. If you are on Node 20 the setup may appear to work while the tooling quietly expects the newer runtime, and npm 8.0 will not satisfy the declared minimum even though the prose says npm 8.

There is also a link in the documentation to guidance on the PATH environment variable for Windows and for Mac and Linux, which tells you the authors expect path problems to be the first hurdle for some people.

Checking the three versions before you start is the cheapest way to avoid a confusing first hour.

## Exercises and examples live in a workspace layout

The package.json declares workspaces, which tells you how the course content is arranged on disk.

```json
  "workspaces": [
    "exercises/*/*",
    "examples/*"
  ],
```

The exercises pattern has two levels, a workshop step and then a project within it, and the examples pattern holds solved versions. That layout is what lets you work through a step, see the finished code next to it, and then move on without losing the comparison.

The type field is set to module, so the whole repository is ESM, and the root scripts include formatting with prettier and linting with eslint, both using the shared @epic-web/config package. That is the house style of Epic Web, and the .vscode directory plus the eslint.config.js at the root are the editor and lint configuration to expect.

There is also a public directory, which is where the browser assets live, and a .npmrc file, which in a workspace of this kind usually governs how npm treats the workspace packages.

For a workshop, the tooling is deliberately the same tooling the surrounding Epic React material uses, so the habits transfer.

## Prerequisites assume you already know Suspense

The prerequisites are stated in two bullets: deep experience with React and features like Suspense and useDeferredValue, and some experience with Node.js will be helpful.

That is a real filter. Server Components lean on Suspense as the mechanism for streaming work from the server, and useDeferredValue is on the list because the exercises are likely to involve transitions and interruption of work in progress. If those are new to you, the exercises will read as opaque.

The pre-workshop resources are listed for that reason. They include a React Suspense workshop, a talk by Ryan Florence called Mind The Gap from Big Sky Dev Con 2024, a talk by Dan Abramov called React for Two Computers from React Conf 2024, the blog post Introducing Zero-Bundle-Size React Server Components, the React Server Components RFC itself, and a talk by Dan Abramov called React from Another Dimension from Remix Conf 2023.

The RFC link is the one to prioritise if you want the model in your head before the exercises. Two Computers and Zero-Bundle-Size are the ones that explain why the client side does not carry the server component code.

This is the same pre-work philosophy as the workshop itself: read the primary source before building, because the building is the easy part if the concepts are already in place.

## What you get, and what you do not

There is a deployed version of the workshop app, and the documentation links a getting started guide on epicweb.dev that covers the app itself, with a screenshot of the workshop app running behind Kent's terminal. The exercise content lives in the exercises directory.

What is not here is worth being explicit about, because the project page is marketing-shaped HTML and can blur the line.

There is no released package. The package is marked private and the repository has no GitHub releases, so you cannot npm install this as a framework. There is no documented API. There are no performance claims to check, because the workshop is not a production framework. And the project itself is the deliverable: you end with a working implementation of Server Components and Server Functions and, the documentation argues, a deep understanding of them.

The licensing has the same shape. The project page carries a GPL 3.0 licence badge and the package.json declares GPL-3.0-only, with a LICENSE.md file at the root. That is a copyleft licence, which is normal for a course repository, and it matters only if you redistribute the workshop code rather than use it as a learning exercise.

The repository is not archived, so the exercises do get updated even though no releases are cut.

## Conclusion

The react-server-components workshop fits a developer who already knows React well, including Suspense and useDeferredValue, and wants to understand how Server Components and Server Functions work by implementing them directly. It does not fit a newcomer, since the prerequisites ask for deep React experience and some Node.js familiarity, and it does not fit a team looking for a framework to install, since the deliverable is the understanding and the exercises rather than a reusable package. Before starting, check that you have git 2.18 or newer, Node.js 20 or newer and npm 8 or newer on your PATH, note that the package metadata asks for Node.js 22 or above and npm 8.16 or above, and read the pre-workshop resources on Suspense and the React Server Components RFC so the exercises land on familiar ground.

## FAQ

### How do I set up the react-server-components workshop?

Run npx --yes epicshop@latest add react-server-components as the setup step, then start the app with npm start. If the setup errors, the documentation asks you to open an issue with as many details as possible.

### What do I need to know before taking the react-server-components workshop?

The stated prerequisites are deep experience with React, including features like Suspense and useDeferredValue, and some experience with Node.js. The pre-workshop resource list includes a React Suspense workshop and the React Server Components RFC.

### Which Node.js version does the react-server-components workshop need?

The system requirements list NodeJS v20 or greater, git v2.18 or greater and npm v8 or greater, while the package.json engines field asks for node 22 or above, npm 8.16.0 or above and git 2.18.0 or above.

### Does the react-server-components workshop use a bundler or TypeScript?

No. The README states there are no build tools, no TypeScript, no Vite and no JSX, only the browser, Node.js and React. The project is marked private and has no releases, so it is a workshop to work through rather than a package to install.

## Sources

- [epicweb-dev/react-server-components on GitHub](https://github.com/epicweb-dev/react-server-components)
- [Issues](https://github.com/epicweb-dev/react-server-components/issues)
- [Project website](https://server-components.epicreact.dev)
- [README](https://github.com/epicweb-dev/react-server-components/blob/main/README.md)

---

Hysen Labs editorial analysis, written from the project's own repository and release notes. Cite the canonical page: https://hysenlabs.com/projects/epicweb-dev-react-server-components
