npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@utilityjs/use-is-server-handoff-complete

v2.0.0

Published

A React hook that returns `true` if the SSR handoff completes.

Readme

UtilityJS | useIsServerHandoffComplete

A React hook that returns true if the SSR handoff completes.

Features

  • SSR Handoff Detection: Detects when client-side hydration is complete
  • Hydration Safety: Prevents hydration mismatches by providing a reliable way to detect client-side rendering
  • Global State: Uses shared state across all hook instances for consistency
  • Zero Dependencies: Lightweight implementation using only React hooks
  • TypeScript Support: Full type safety with TypeScript definitions

Installation

npm install @utilityjs/use-is-server-handoff-complete

or

pnpm add @utilityjs/use-is-server-handoff-complete

Usage

Basic Usage

import { useIsServerHandoffComplete } from "@utilityjs/use-is-server-handoff-complete";

function MyComponent() {
  const isHandoffComplete = useIsServerHandoffComplete();

  if (!isHandoffComplete) {
    return <div>Loading...</div>;
  }

  return <div>Client-side content</div>;
}

Conditional Client-Only Rendering

import { useIsServerHandoffComplete } from "@utilityjs/use-is-server-handoff-complete";

function ClientOnlyComponent() {
  const isHandoffComplete = useIsServerHandoffComplete();

  return (
    <div>
      <h1>My App</h1>
      {isHandoffComplete && (
        <div>
          {/* This content only renders on the client */}
          <ClientSpecificWidget />
        </div>
      )}
    </div>
  );
}

Preventing Hydration Mismatches

import { useIsServerHandoffComplete } from "@utilityjs/use-is-server-handoff-complete";

function ResponsiveComponent() {
  const isHandoffComplete = useIsServerHandoffComplete();
  const [windowWidth, setWindowWidth] = useState(0);

  useEffect(() => {
    if (isHandoffComplete) {
      setWindowWidth(window.innerWidth);

      const handleResize = () => setWindowWidth(window.innerWidth);
      window.addEventListener("resize", handleResize);

      return () => window.removeEventListener("resize", handleResize);
    }
  }, [isHandoffComplete]);

  return (
    <div>
      {isHandoffComplete ? (
        <p>Window width: {windowWidth}px</p>
      ) : (
        <p>Calculating window size...</p>
      )}
    </div>
  );
}

API

useIsServerHandoffComplete()

A React hook that tracks the completion of server-side rendering handoff.

Returns

  • boolean - true when the SSR handoff is complete and the component is running on the client, false during initial server render and hydration

Behavior

  • Returns false during server-side rendering
  • Returns false during the initial client-side render (hydration phase)
  • Returns true after the first useEffect has run, indicating the component is fully hydrated
  • Uses a global state that persists across all instances of the hook

Use Cases

  • Conditional Client Rendering: Show different content based on whether the app is server or client rendered
  • Hydration Safety: Prevent hydration mismatches when using browser-only APIs
  • Progressive Enhancement: Gradually enable client-side features after hydration
  • Performance Optimization: Defer expensive client-side operations until after hydration

Contributing

Read the contributing guide to learn about our development process, how to propose bug fixes and improvements, and how to build and test your changes.

License

This project is licensed under the terms of the MIT license.