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 🙏

© 2025 – Pkg Stats / Ryan Hefner

react-watchman

v1.0.3

Published

A human behavior-aware idle detector for React applications. Combines user activity signals with AI-inspired heuristics to detect inactivity intelligently. Ideal for SaaS, banking, and secure apps requiring session timeout and idle monitoring.

Downloads

23

Readme

React Watchman

A human behavior-aware idle detection hook and boundary component for React, designed for intelligent session management, auto-logout, and behavioral analytics in modern web apps.

NPM Version License


✨ Features

  • 🧠 AI-Inspired Idle Detection: Combines mouse movement, typing, scrolling, and visibility events with customizable heuristics.
  • ⚙️ Customizable Sensitivity & Debounce: Fine-tune detection accuracy.
  • 📦 React Hook + HOC-Compatible: Works as a hook (useReactWatchman) or wrapped UI (WatchmanBoundary).
  • 🔐 Auto Logout & Session Timeout: Trigger auto-logout logic or alerts after inactivity.
  • 📡 Focus / Blur & Tab Visibility Tracking: Detect when user switches tabs or windows.
  • 💓 Optional Heartbeat Support: Add a server ping to keep sessions alive.
  • 🧪 Typescript Support: Fully typed, developer-friendly.

📦 Installation

npm install react-watchman
# or
yarn add react-watchman

Demo

Check out the project running here{:target="_blank"}!


🚀 Usage

1. useReactWatchman Hook

import { useReactWatchman } from "react-watchman";

function Dashboard() {
  const { isIdle } = useReactWatchman({
    idleTime: 60000,
    onIdle: () => console.log("User is idle"),
    onActive: () => console.log("User is active again"),
    onTabHide: () => console.log("Tab hidden"),
    onTabShow: (ms) => console.log(`Returned after ${ms}ms`),
    onFocus: () => console.log("Window focused"),
    onBlur: () => console.log("Window blurred"),
    debounce: 300,
    sensitivity: 1.0,
  });

  return <div>{isIdle ? "Idle..." : "Active 🟢"}</div>;
}

2. WatchmanBoundary Component

import { WatchmanBoundary } from "react-watchman";

export default function App() {
  return (
    <WatchmanBoundary
      timeout={120000}
      debounce={250}
      onIdle={() => console.log("Idle! Logging out soon")}
      onActive={() => console.log("User returned")}
      renderIdle={() => (
        <div className="idle-warning">You’re idle. Logging out...</div>
      )}
    >
      <Dashboard />
    </WatchmanBoundary>
  );
}

🧠 Parameters & Options

| Option | Type | Description | | -------------------- | ---------- | --------------------------------------------------------------------- | | idleTime | number | Time in ms to wait before considering user idle (default: 30000) | | debounce | number | Delay for debouncing activity events (default: 250) | | sensitivity | number | 0.1 to 1.0 — sensitivity to idle detection (lower = more tolerant) | | onIdle | function | Called when user is considered idle | | onActive | function | Called when user becomes active again | | onFocus | function | Called when window gains focus | | onBlur | function | Called when window loses focus | | onTabHide | function | Called when tab becomes hidden | | onTabShow | function | Called when tab becomes visible again, receives duration in ms | | onVisibilityChange | function | Called when tab visibility changes (param: "visible" or "hidden") |

🧪 Events Tracked

  • mousemove, mousedown, keydown, wheel, touchstart, scroll, pointermove
  • visibilitychange, focus, blur

🏭 Industries & Use Cases

| Industry | How It's Useful | | -------------- | -------------------------------------------------------- | | Fintech | Auto-logout inactive users for compliance & security | | SaaS | Notify users before logging out, track engagement | | Healthcare | Ensure sensitive records are not left exposed after idle | | E-learning | Detect disengagement and prompt user re-engagement | | Enterprise | Log audit trails of focus/blur or session activity | | Banking | Strict session expiry enforcement & risk mitigation |

👨‍💻 Why Developers Love It

  • Plug-and-play: Simple drop-in solution
  • ⚙️ Configurable: Fine-grained control for advanced apps
  • 🔁 Reusable: Hook or boundary component
  • 📈 Scalable: Add heartbeats, custom triggers, modals, etc.
  • 🛡️ Secure by default: Helps enforce inactivity-based session logout

🧩 Future Plans

  • ⏳ Idle countdown timer
  • 🧠 Heuristic profiles (adaptive timeout)
  • 🔄 Heartbeat/keep-alive via fetch
  • 📊 Session activity analytics
  • 💬 Idle modal prompts with confirm/extend/logout options

📝 License

MIT License

📫 Contact

Questions or feedback? Reach out via GitHub or create a discussion.

Built with ❤️ to make React apps smarter and safer.