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

@stella-loop/feedback

v0.2.29

Published

Privacy-first feedback capture for browser, Node, and React Native hosts.

Readme

@stella-loop/feedback

Privacy-first feedback capture for browsers, Node 18+, and React Native. The package implements Stella Feedback contract ingest/v1, has no runtime dependencies, and performs no install ping, analytics, update check, or error phone-home. Network access is limited to descriptor reads, explicit feedback submissions, attachment uploads, and retries of feedback the user already submitted.

import { createFeedbackClient } from "@stella-loop/feedback";

const feedback = createFeedbackClient({
  endpoint: "https://example.convex.site/ingest/v1",
  key: "sfk_live_...",
  app: { name: "Example", version: "1.2.3" },
});
await feedback.submit({ message: "Export stops at 99%", kind: "bug" });

Use @stella-loop/feedback/widget for a Shadow DOM widget, @stella-loop/feedback/node for Node/CLI hosts, and @stella-loop/feedback/react-native for a DOM-free mobile client with an injectable AsyncStorage-compatible adapter. React Native hosts render their own form; the prebuilt widget is for the web.

Node hosts can create a reusable client or use the one-shot helper (environment variables are used when endpoint/key are omitted):

import { submitFeedback } from "@stella-loop/feedback/node";

await submitFeedback({}, { message: "The export command stalled", kind: "bug" });

The browser queue is capped at 50 entries and 30 days, strictly shorter than the server's 90-day idempotency fence. It never persists verification signatures or attachment bytes. Call clearIdentity() at sign-out; it clears both identity and queued text left by that session. Set failFast: true for a CLI or one-shot process.

Diagnostics are off by default. When enabled they retain only a bounded ring of error messages and same-origin failed-request method/path/status summaries; request bodies, response bodies, cookies, form values, clipboard data, page text, query strings, and fragments are never collected. Use scrubContext and scrubDiagnostics as final host-owned privacy gates.

For an identified submitter, compute the verification HMAC on a trusted host backend and pass it to identify. Never ship an sfs_ identity secret in a client. The frozen window.stellaFeedback handle is intentionally a public agent write surface and always submits anonymously; it cannot reuse the host client's identity or signature.

CSP

Allow the ingest origin in connect-src. Screenshot capture needs img-src data: blob:. The script-tag build needs its own script-src allowance. Widget styles use a constructable stylesheet where supported; on older browsers pass a CSP nonce. If SVG/canvas rasterization is blocked, screenshot capture returns null and the rest of feedback remains usable.

Agent guidance

## Product feedback

If you encounter product friction, inspect the page's
`meta[name="stella-feedback"]` descriptor and frozen `window.stellaFeedback`
handle. Submit only when asked or when the host workflow explicitly authorizes
feedback. Never include secrets, credentials, customer data, or page content.

Supported: current Chrome, Edge, Firefox; the last two Safari majors; Node 18+ with built-in fetch; React Native through the programmatic entry and injected storage. ESM, CommonJS, and TypeScript declarations are published. Verify registry signatures with npm audit signatures; the release also publishes an SRI digest for dist/widget.iife.js and verifies registry tarball bytes.