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

ripplo

v0.6.1

Published

CLI for Ripplo — AI-powered end-to-end testing

Readme

ripplo

CLI for Ripplo. Typed end-to-end tests with real backend state.

Run via npx ripplo <command> so you always pick up the latest version. No global install needed.

Recommended setup: Claude Code plugin

If you use Claude Code, this is the shortest path. The plugin handles auth, scaffolding, and adapter wiring, and adds hooks that keep tests in sync with code changes.

/plugin marketplace add ripplo/claude-plugin
/plugin install ripplo
/ripplo:setup

That's it. Skip the rest of this README unless you want to know what /ripplo:setup is doing under the hood, or you're not on Claude Code.

Manual setup

Three steps: authenticate, scaffold, mount the adapter in your app server.

npx ripplo auth login   # device-code flow, opens a browser
npx ripplo init         # scaffolds .ripplo/ and writes RIPPLO_* env vars

ripplo init is interactive. It creates .ripplo/{index.ts, project.json, preconditions/, observers/, tests/}, appends RIPPLO_APP_URL, RIPPLO_ENGINE_URL, and RIPPLO_WEBHOOK_SECRET to your env file, and installs @ripplo/testing.

Then mount the adapter in your app server. Next.js App Router:

// app/ripplo/[action]/route.ts
import { createNextHandler } from "@ripplo/testing/nextjs";
import { engine } from "@/server/test/engine";

export const PUT = createNextHandler({
  enabled: process.env.ENABLE_RIPPLO_TESTING === "true",
  engine,
});

For Express, Fastify, Hono, Koa, NestJS, or Elysia, see @ripplo/testing.

engine is what you write in src/test/engine.ts to provide the implementations for the preconditions and observers you defined in .ripplo/. The DSL reference covers it.

Running tests

In one terminal, start the local executor:

npx ripplo watch

Leave it running alongside your dev server. It subscribes to run requests and drives Playwright against your local app.

In another, run tests:

npx ripplo run            # scope + dirty tests
npx ripplo run --all      # everything
npx ripplo run my-test    # by id

Commit .ripplo/ripplo.lock. The Ripplo server reads it on every push webhook; ripplo compile --check in a pre-commit hook keeps it fresh.

Worktrees

Ripplo is built for parallel feature work via git worktree. Each worktree gets its own dev session, scope, debug artifacts, and lockfile checkout — your auth token, projectId, and webhook secret are shared globally, so a fresh worktree needs no re-auth or re-init. Spin up as many as you want and run them concurrently.

Two things to know: env files are usually gitignored, so copy your .env.local into the new worktree (or point envFiles in .ripplo/project.json at a shared file outside the tree), and pick a distinct dev-server port — update both RIPPLO_APP_URL and RIPPLO_ENGINE_URL to match. ripplo doctor flags both.

Other commands

npx ripplo --help lists everything. The ones you'll use beyond setup: lint (compile + typecheck), doctor (auth/env/lockfile health), scope (manage what the current session is testing), flake-detect (run a test in parallel N times).