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

movetowhop

v0.2.0

Published

Move a creator business to Whop from Kajabi, Skool, Circle, Stan, Teachable, Patreon and more, from your terminal or your AI agent: plans, fee comparisons, local member-file conversion, and the build on Whop with your own key (hidden first, resumable). Me

Readme

movetowhop

Move a creator business to Whop from Kajabi, Skool, Circle, SamCart, Stan, Teachable, Thinkific, Patreon, Podia, Mighty Networks, Gumroad, LaunchPass, ClickFunnels, Kartra, Memberful, Systeme.io, LearnWorlds, Hotmart or InviteMember, from your terminal or your AI agent. Every command has --json.

npx movetowhop@0 --help
npx [email protected] --help      # or pin an exact version instead of floating on @0
  • Your member files stay on your computer. convert, import, links and invites run locally with MoveToWhop's own parsers. Member lists are written to files only you can read (mode 600), and the output shows counts, never member rows.
  • Your Whop key stays on your computer. apply builds on Whop straight from this machine with your own Whop API key, sent only to api.whop.com. MoveToWhop's servers never see it.
  • Hidden first, and you approve what people see. New products, plans, courses and apps are created hidden. Anything a member or buyer would see (forum posts, making products visible) or that changes something already on your Whop waits until you approve it in your own terminal. An AI agent can't approve it for you.
  • Resumable. Each run keeps a run file (mode 600). Run the same command again to carry on. What an earlier run made is reused, not copied.
  • No dependencies. Node 18.17 or newer (export --cdp needs Node 22).

MoveToWhop is independent and not affiliated with Whop, Inc. It may earn a Whop referral fee when you create a Whop through its links.

Your Whop API key

apply and migrate need a key for the business you're moving into. Create it in Whop: Dashboard → Developer → API keys → Create. Name it "MoveToWhop migration (delete after)". Choose a custom permission set with exactly these permissions:

company:basic:read access_pass:basic:read access_pass:create access_pass:update plan:basic:read plan:create plan:update
experience:create experience:attach experience:update courses:read courses:update forum:read forum:post:create
forum:moderate chat:read chat:message:create chat:moderate

Give it an expiry a week out if Whop offers one. Then, in your own terminal (never in a chat with an AI):

export WHOP_API_KEY=…              # for this shell only
npx movetowhop@0 whop key set      # or store it in your keychain (asked with the input hidden)
npx movetowhop@0 whop status       # checks the key: its business and the permissions it can read

Where the CLI looks, in order: --api-key-env NAME, --api-key-file PATH (refused unless only you can read it), WHOP_API_KEY, ~/.config/movetowhop/whop-key, your OS keychain, then a hidden prompt. There's no --api-key option, because a key on the command line ends up in your shell history and in agent transcripts.

Your AI agent can read anything your shell can. Use a key scoped to this move and delete it in Whop when you're done (npx movetowhop@0 whop key delete removes the stored copy). No Whop business yet? Create one at https://whop.com/start/?code=MIGRATE, then make the key there.

A full migration

  1. movetowhop plan <platform> shows the steps, and movetowhop sync <your public link> --out inventory.json reads your public store or community page (products, prices, course outlines).
  2. Export your members on your old platform (the plan lists the clicks), then movetowhop convert <export.csv>. It writes <export>.whop.csv (one row per member, with the trial that lines up their first Whop charge with their old renewal date, and a claim-link placeholder) and <export>.inventory.json (products, prices and hidden "existing members" claim plans). Check the prices.
  3. If you used MoveToWhop's browser harness or extension: movetowhop import movetowhop-inventory-….json --members movetowhop-members-….csv reads both files instead.
  4. movetowhop apply inventory.json --account biz_… --dry-run shows what it will build. Then run it without --dry-run and type your business name to confirm.
  5. apply builds it with MoveToWhop's own engine and your own key, or build it in the free wizard with your Whop sign-in instead: open https://movetowhop.com/migrate?from=<platform>&link=<your store or community link>, check what Sync found, drop the same member export (it stays in your browser) and press Move to Whop. Both reuse the products, courses, apps and lessons an earlier run made. Whop's MCP server (https://mcp.whop.com/mcp) and the Whop CLI cover products, plans and promo codes only. They can't create apps, courses, chapters, lessons or forum posts, so keep them for edits after the move.
  6. movetowhop links <export>.whop.csv --state <run file> fills each member's claim link, and movetowhop invites <export>.claim.csv --template a|b --business "<name>" writes the invite list and the email to mail-merge. Template a is for subscriptions in your own Stripe account, which move with Whop Migrations (https://whop.com/dashboard/<biz_id>/settings/stripe-migrations/). Template b is for members who re-join through their claim link.
  7. Check the new products on Whop and make them visible there. Send the invites with the announcement templates, and keep your old platform running until paying members have moved.

Or let the CLI walk you through all of it:

npx movetowhop@0 migrate https://your-site.mykajabi.com --members members.csv

Commands

movetowhop platforms [kajabi]             # what moves from each platform, and how subscribers move
movetowhop plan skool --members 800       # step-by-step migration plan (markdown)
movetowhop fees --from kajabi --plan Growth --revenue 10000 --price 49
movetowhop sync https://acme.mykajabi.com --out inventory.json
movetowhop convert members.csv            # → members.whop.csv + members.inventory.json (local, mode 600)
movetowhop import movetowhop-inventory-skool-2026-10-14.json --members movetowhop-members-skool-2026-10-14.csv
movetowhop outline curriculum.txt         # chapters and lessons; YouTube/Loom become embeds (local)
movetowhop apply members.inventory.json --account biz_XXXX [--dry-run] [--json]
movetowhop migrate <link> [--members <file>] [--json]
movetowhop links members.whop.csv --state members.run.json
movetowhop invites members.claim.csv --template b --business "Acme"
movetowhop website https://acme.com --account biz_XXXX
movetowhop whop status | whop key set | whop key delete
movetowhop export kajabi --cdp --i-own-this-account --user-data-dir ~/.movetowhop-export-profile
movetowhop setup [claude-code cursor codex …] [--dry-run]
movetowhop prompt --client claude --platform kajabi
movetowhop up --from skool --url https://www.skool.com/acme
movetowhop mcp [--stdio]
movetowhop payloads inventory.json --account biz_XXXX   # the raw Whop API requests, for review
movetowhop guides search "export skool members" | guides get /compare/whop-vs-kajabi | facts fees

Global options: --json, --base-url <url> (default https://movetowhop.com, or MOVETOWHOP_BASE_URL).

For AI agents

  • Ask first, then confirm with a code. apply --json and migrate --json print NDJSON events and stop at every checkpoint only the creator can clear, with what to show them and the exact command to resume, e.g. {"event":"needs","needs":"confirm","summary":…,"confirm":"1c57582d","resume":"npx movetowhop@0 apply … --confirm 1c57582d"}. Show the creator the summary and run the resume command only after they say yes in the chat. --yes does the same, and is only for after that yes.
  • You can't approve what people see. Steps a member or buyer would see stop with "needs":"approval". The creator approves them by running the printed command in their own terminal, where it asks them to type the business name.
  • Never ask for the key in the chat. If there's none, you get "needs":"whop_key" with the steps for the creator to follow in their own terminal.
  • Member files stay files. Pass paths, and never read member CSVs into the chat.
  • One step to connect: npx movetowhop@0 setup detects Claude Code, Claude Desktop, Cursor, Codex, VS Code, Gemini CLI and Windsurf. It shows every change and asks first. It writes user-level config only (never .mcp.json or another project file), never a key, and installs the MoveToWhop skill for Claude Code and Codex.
  • Local MCP server: npx movetowhop@0 mcp --stdio serves MoveToWhop's tools plus apply_migration, fill_claim_links, build_invites and export_with_browser, which run on the creator's computer. It reads the key from the shell, ~/.config/movetowhop/whop-key or the keychain, never from a client's config. A config that names WHOP_API_KEY is refused. Member-visible steps ask the creator through the client's own approval form (MCP elicitation) or in their terminal.
  • Browser harness: movetowhop harness <platform> prints a snippet for your evaluate tool. It downloads the harness from https://movetowhop.com/harness/ and runs it only if its SHA-256 matches the hash pinned in this package (lib/harness-pins.json, also at https://cdn.jsdelivr.net/npm/movetowhop@0/lib/harness-pins.json). Ask the creator before you run it in their signed-in tab.
  • Remote MCP server: https://movetowhop.com/mcp. REST + OpenAPI: https://movetowhop.com/api/agent, https://movetowhop.com/openapi.json. Agent Skill: https://movetowhop.com/skills/movetowhop/SKILL.md. Docs: https://movetowhop.com/agents.

Development

lib/core.mjs is generated from the MoveToWhop repo (node scripts/build-agent-files.mjs, also run on npm pack/npm publish), and lib/harness-pins.json by node scripts/publish-harness.mjs. Don't edit either by hand. The skill pack is copied into skills/ at pack time.

Publishing: the owner runs npm publish in cli/ from their own npm account, with 2FA required for writes.