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

@runablehq/website-runtime

v0.11.0

Published

Drop-in visual feedback overlay for React apps — click to annotate, comment, and attach source locations

Downloads

32,038

Readme

@runablehq/website-runtime

Drop-in visual feedback overlay for React apps. Hover over elements, click to select, leave comments with text + images. Each comment automatically captures the React component's source location via fiber _debugSource.

How It Works

  1. <AgentFeedback> renders a transparent overlay via a portal on document.body
  2. Hovering highlights DOM elements with a bounding box + component name
  3. Clicking selects the element and opens a comment popover at the click point
  4. User writes a comment (text + optional images) — an element snapshot is auto-captured
  5. Numbered pin markers appear for each comment — hover to preview, click to edit
  6. Bottom action bar provides undo/redo, discard, and apply
  7. On "Apply", comments are sent to the parent via postMessage (iframe mode) or onSubmit callback

Integration

import { AgentFeedback } from "@runablehq/website-runtime";
import "@runablehq/website-runtime/styles";

function App() {
  return (
    <div>
      {/* your app */}
      <AgentFeedback onSubmit={(comment) => console.log(comment)} />
    </div>
  );
}

Iframe Mode

When the component runs inside an iframe, it starts disabled and waits for the parent to send a postMessage:

// Parent → enable the overlay
iframe.contentWindow.postMessage({ type: "runable:enable" }, "*");

// Parent → disable the overlay
iframe.contentWindow.postMessage({ type: "runable:disable" }, "*");

// Child → sends back on load
// { type: "runable:ready" }

// Child → sends on apply
// { type: "runable:apply", comments: FeedbackComment[] }

// Child → sends on discard
// { type: "runable:discard" }

Playground

pnpm run dev    # http://localhost:3334
  • Standalone: Opens a sample site with <AgentFeedback> always enabled
  • Iframe bridge: Open /parent.html to test enable/disable and message logging

Source Layout

src/
  core/
    fiber.ts              — DOM → React fiber → source location extraction
    selection.ts          — useSelection() hook — hover/click tracking
    feedback-store.tsx    — Context + useReducer state with undo/redo
    snapshot.ts           — Element screenshot capture (html-to-image)
    iframe-bridge.ts      — postMessage type definitions
    use-iframe-bridge.ts  — iframe enable/disable/apply hook
    use-placement.ts      — Smart popover positioning
  ui/
    feedback-root.tsx     — <AgentFeedback> root component + portal
    comment-popover.tsx   — New comment compose UI
    comment-markers.tsx   — Pin markers + tooltip + edit
    highlight-overlay.tsx — Selection highlight box
    edit-actions-bar.tsx  — Bottom action bar