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

@slashid/react

v1.36.0

Published

React SDK for the /id platform

Readme

SlashID React SDK

npm build

Documentation

Check out our developer docs for guides and API documentation. You can also check out the demo on CodeSandbox:

Try on CodeSandbox

Setup

Prerequisites

Your organization needs to sign up with /id to get access to the core SDK and an organization ID.

Your environment should have the following dependencies installed:

  • node.js => v16+
  • react => v16+
  • @slashid/slashid => v1.8+

Installation

After obtaining your organization ID, log in to npm and install the package:

npm install @slashid/react

Basic Usage

Primary way of communicating with the /id APIs is by using the provided useSlashID hook. In order to do so, your app needs to be wrapped in the SlashIDProvider. This provider requires you to pass in the organization ID you received from /id as the value of the oid prop.

import { SlashIDProvider } from "@slashid/react";
import React from "react";
import ReactDOM from "react-dom/client";

ReactDOM.createRoot(document.getElementById("root") as HTMLElement).render(
  <React.StrictMode>
    <SlashIDProvider oid="ORGANIZATION_ID">
      <App />
    </SlashIDProvider>
  </React.StrictMode>
);

function App() {
    const { user, logIn } = useSlashID();

    return (
      <>
        <button
          onClick={() =>
            logIn({
              handle: {
                type: "email_address",
                value: "[email protected]",
              },
              factor: { method: "email_link" },
            })
          }
        >
          Log in
        </button>
        <div>
          <code>{user}</code>
        </div>
      </>
  );
}

Once the logIn function resolves, your component will render again with the newly logged-in user object.

DynamicFlow

DynamicFlow asks for an identifier first and then picks the factors to offer from the getFactors callback.

getFactors decides what happens next:

  • Two or more factors show the picker.
  • A single factor is submitted directly, skipping the picker.
  • An empty array means there is no way to sign this person in. The user is told so and sent back to the identifier step.

If getFactors throws, the user is shown a generic error with a retry button that calls it again with the same identifier. The rejection itself is not forwarded — catch it inside getFactors if you need to report or log it.

One-step SSO (attemptSSO)

<DynamicFlow attemptSSO getFactors={() => [{ method: "email_link" }, { method: "password" }]} />

With attemptSSO, DynamicFlow submits the hook factor right after the identifier step for email identifiers. The organization's identify_user webhook picks the factor (for example a SAML or OIDC provider), and the flow continues with it. When nothing is resolved, getFactors is called with the same identifier as usual: a single factor is submitted directly, otherwise the picker is shown. Other identifier types never attempt SSO.