• Stars
    star
    430
  • Rank 97,461 (Top 2 %)
  • Language
    CSS
  • License
    MIT License
  • Created 5 months ago
  • Updated 3 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Overlay for hydration errors with explicit diff between renders.

Hydration Overlay 🕵️

This package displays an overlay during Hydration Errors, providing an explicit diff between the server-side and client-side renders.

after

Installation

npm install @builder.io/react-hydration-overlay

Usage

HydrationOverlay

First, wrap the root of your app in the HydrationOverlay component.

import { HydrationOverlay } from "@builder.io/react-hydration-overlay";

export default function App() {
  return (
    <HydrationOverlay>
      <YourApp />
    </HydrationOverlay>
  );
}

Or, in the Next.js App Router, wrap {children} in your root layout:

import { HydrationOverlay } from "@builder.io/react-hydration-overlay";

export default function RootLayout({ children }) {
  return (
    <html lang="en">
      <body>
        <HydrationOverlay>{children}</HydrationOverlay>
      </body>
    </html>
  );
}

Plugin

Second, add the plugin for your framework. Currently, we support Next.js & webpack.

Next.js

in next.config.js:

const {
  withHydrationOverlay,
} = require("@builder.io/react-hydration-overlay/next");

/** @type {import('next').NextConfig} */
const nextConfig = {
  /** your config here */
};

module.exports = withHydrationOverlay({
  /**
   * Optional: `appRootSelector` is the selector for the root element of your app. By default, it is `#__next` which works
   * for Next.js apps with pages directory. If you are using the app directory, you should change this to `main`.
   */
  appRootSelector: "main",
})(nextConfig);

webpack

Here is an example (still with Next), but using the webpack helper directly:

const {
  withHydrationOverlayWebpack,
} = require("@builder.io/react-hydration-overlay/webpack");

/** @type {import('next').NextConfig} */
const nextConfig = {
  reactStrictMode: true,
  webpack: (config, options) => {
    config = withHydrationOverlayWebpack({
      appRootSelector: "#__next",
      isMainAppEntryPoint: (entryPointName) =>
        !options.isServer &&
        (entryPointName === "pages/_app" || entryPointName === "main-app"),
    })(config);
    return config;
  },
};

module.exports = nextConfig;

Notes

  • This package is currently in beta. Please report any issues you find!
  • This package is not intended for production use. We highly recommend you remove this package from your production builds.

Caveats

This package works by comparing the HTML received from the server with the HTML rendered by the client, which has one important consequence. React re-renders the entire app when hydration fails, potentially introducing even more changes.

The biggest example is style attributes: React appends ; to each one and alters the whitespace. In more extreme examples, it causes enormous diffs for properties like all: unset.

Therefore, this tool will give you false positives for style changes.

How It Works

  • The plugin injects hydration-overlay-initializer.js into your app's entry point. This script reads the HTML from the server and stores it, and then listens for hydration errors and stores the resulting HTML then.
  • The HydrationOverlay component reads both HTML strings and compares them, and renders the overlay.

Support

To add support for other frameworks, what is needed is a plugin that injects the hydration-overlay-initializer.js script into the app's entry point. See next.ts plugin for more information. PRs welcome!

  • Next.js
  • Remix
  • Vite SSR

Release process

Add changesets

in the same PR where your change is made, run:

pnpm c:add

and follow instructions to add changesets. You can then merge your PR.

Merge automated PR

Once your PR is merged, the changeset bot will open a PR with the changeset. You can merge this PR once CI passes. This will trigger a release.



Made with love by Builder.io

More Repositories

1

qwik

Instant-loading web apps, without effort
TypeScript
20,052
star
2

gpt-crawler

Crawl a site to generate knowledge files to create your own custom GPT from a URL
TypeScript
17,358
star
3

partytown

Relocate resource intensive third-party scripts off of the main thread and into a web worker. 🎉
TypeScript
12,577
star
4

mitosis

Write components once, run everywhere. Compiles to React, Vue, Qwik, Solid, Angular, Svelte, and more.
TypeScript
10,802
star
5

builder

Drag and drop headless CMS for React, Vue, Svelte, Qwik, and more
TypeScript
6,567
star
6

ai-shell

A CLI that converts natural language to shell commands.
TypeScript
3,531
star
7

figma-html

Builder.io for Figma: AI generation, export to code, import from web
TypeScript
2,917
star
8

gpt-assistant

An experiment to give an autonomous GPT agent access to a browser and have it accomplish tasks
TypeScript
468
star
9

framework-benchmarks

Test each framework for it's performance cost
TypeScript
458
star
10

nextjs-shopify

The ultimate starter for headless Shopify stores
TypeScript
415
star
11

vscode

Builder.io for VSCode - turn designs into code!
TypeScript
168
star
12

SSDiff

TypeScript
138
star
13

build.

A new visual programming language that reads and writes Typescript and Javascript
TypeScript
127
star
14

builder-shopify-hydrogen

Builder.io Visual CMS + page builder example with Shopify Hydrogen
TypeScript
75
star
15

gatsby-starter-builder

Gatsby example with drag and drop page building
JavaScript
66
star
16

snap

The fastest web framework
TypeScript
50
star
17

nextjs-edge-personalization-ab-testing

High performance personalization & a/b testing example using Next.js, Edge Middleware, and Builder.io
TypeScript
50
star
18

ts-lite

Compiled TypeScript. Generates Go, Swift, Kotlin, WASM, Binary
JavaScript
48
star
19

gatsby-builder-shopify

A starter for Gatsby + Shopify + Builder.io
TypeScript
32
star
20

qwik-city-build

`@builder.io/qwik-city` build artifacts from https://github.com/organizations/BuilderIO/qwik
JavaScript
25
star
21

qwik-tw-vercel-starter-kit

A starter kit for Qwik on Vercel
TypeScript
17
star
22

nextjs-builder-edge-personalization

TypeScript
11
star
23

nextjs-builder-starter

TypeScript
10
star
24

demo-editor

JavaScript
10
star
25

edge-personalize

Personalize and a/b test your static pages at the edge. Static speed with dynamic optimizations!
TypeScript
9
star
26

headlessapp.store

TypeScript
8
star
27

react-design-system-demo

JavaScript
8
star
28

sfcc-composable-storefront-starter

SFCC + Builder.io Composable Storefront
JavaScript
7
star
29

qwik-city-e2e

Use to test Qwik City on each server
HTML
6
star
30

qwik-docs-es

TypeScript
6
star
31

qwik-build

Build artifacts from https://github.com/organizations/BuilderIO/qwik
JavaScript
6
star
32

perf-experiments

Performance experiments
Astro
6
star
33

http-debug-proxy

This project contains a set up to create a HTTP proxy for the https://cdn.builder.io/ endpoint.
JavaScript
6
star
34

this-package-uses-fetch

5
star
35

qwik-react-framer-motion

A demo for React Framer Motion inside a Qwik application
TypeScript
5
star
36

resumable-react-post

The code for the blog post: "Resumable React: How To Use React Inside Qwik"
TypeScript
5
star
37

builder-fiddle-demos

Demos of fun stuff for Builder fiddles
TypeScript
5
star
38

blog-example

Builder.io blog example
JavaScript
5
star
39

jsx-qwik-worker-post

A repo showing worker$
JavaScript
5
star
40

vcp-design-systems-examples

Starters for experimenting with VCP and different design systems
TypeScript
5
star
41

builder-qwik-example

An example project using Builder.io's drag and drop headless CMS with Qwik
TypeScript
4
star
42

nextjs-app-router-example

TypeScript
4
star
43

personalization-utils

TypeScript
3
star
44

mitosis-build

Build artifacts from https://github.com/BuilderIO/mitosis
3
star
45

qwik-create-cli-build

JavaScript
3
star
46

nextjs-elasticpath

TypeScript
2
star
47

kibocommerce-nextjs-starter

A KiboCommerce + Builder.io store built on NextJS
TypeScript
2
star
48

qwik-raw-data

1
star
49

qase-for-qwik

A demo repo to showcase Qwik
TypeScript
1
star
50

gatsby-builder-transform-images

JavaScript
1
star
51

block-publish

CLI tool to block directly using npm publish
JavaScript
1
star
52

qwik-docs

WIP Qwik-docs
JavaScript
1
star
53

builder-swift

Swift SDK for Builder.io
Swift
1
star
54

qwik-labs-build

Continues build artifacts
JavaScript
1
star