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

@tappify/cli

v1.6.0

Published

Tappify CLI - Command line interface for managing deployments and more

Downloads

12,449

Readme

Tappify CLI

A command line interface for managing deployments and more.

Installation

The CLI ships as a standalone binary (no Node.js required). npm remains available for Node users.

curl (macOS/Linux)

curl -fsSL https://get.tappify.ai | sh

winget (Windows)

winget install Tappify.CLI

NPM

npm install -g @tappify/cli

Homebrew (macOS/Linux)

brew tap tappify-dev/homebrew-tap
brew install tappify

Scoop (Windows)

scoop bucket add tappify https://github.com/tappify-dev/scoop-bucket
scoop install tappify

Chocolatey (Windows)

choco install tappify

Usage

tappify --help
tappify login
tappify environment
tappify extension init
tappify extension dev
tappify extension publish

Commands

login, logout

Authenticate with Tappify through the device authorization flow, and clear the stored session.

upgrade

Update the CLI to the latest version. Self-updates binary installs; otherwise prints the right command for your package manager.

environment, env

Choose whether the CLI connects to Production or the internal Staging sandbox:

tappify environment
tappify environment current
tappify environment use production
tappify environment use staging --yes

Staging requires confirmation unless --yes is supplied:

WARNING: INTERNAL TESTING ENVIRONMENT

Staging uses https://staging.api.tappify.ai.
Data may be incomplete, changed, or deleted.
Do not use this environment unless you know what you are doing.

Switching environments logs the CLI out and clears the selected sandbox project, so run tappify login again. TAPPIFY_API_URL is an internal and CI escape hatch; while set, it overrides the selected environment and emits a custom-API warning.

link

Link this directory to a Tappify project and its apps, writing .tappify/project.json.

deployments configure

Configure CI code signing for an app.

vendor create

Create a vendor account, its workspace and its sandbox project. Every extension command that finds no vendor points you here.

extension

Build, test and publish an extension. tappify ext is the same command.

| Command | Does | | -------------------------------- | ------------------------------------------------------------------ | | extension init [dir] | Scaffolds an extension from the starter | | extension add <kind> [name] | Adds a contribution, scaffolds its files and regenerates the types | | extension remove <kind> <id> | Removes a contribution and, with confirmation, its files | | extension list | Lists the contributions and scopes this extension declares | | extension set <field> <value> | Sets one field in the manifest | | extension scopes add <key> | Grants this extension one more scope | | extension scopes remove <key> | Takes one scope away | | extension events add <name> | Receives one Tappify event on your server | | extension events remove <name> | Stops receiving one Tappify event on your server | | extension types | Regenerates src/tappify.d.ts | | extension dev | Serves the extension and previews it while you edit | | extension doctor | Runs every check the Tap Store runs, here | | extension publish | Builds, checks and sends the release to the Tap Store | | extension retire | Takes the extension out of the Tap Store and every install | | extension status | Shows the live release, the release in review and the installs | | extension whoami | Shows the vendor, your role and the sandbox project |

Run tappify extension <command> --help for the flags.

mcp

Serves the MCP server for agents over stdio.

Editors and agents run tappify mcp themselves. The Claude Code plugin at tappify-dev/claude-plugin declares it, so installing that plugin is all a Claude Code user does.

--json

Every vendor and extension command takes --json and prints one object on stdout: the same result its two human lines describe. A failure prints { "ok": false, "error": { "what": …, "why": …, "fix": … } } and exits non-zero. login, logout, link, upgrade and deployments configure take no --json, and mcp has none either — its stdout carries the protocol.

Each payload below also carries ok: true.

| Command | Keys | | --------------------------------- | ---------------------------------------------------------- | | tappify vendor create | vendor, workspace, sandboxProject | | tappify extension init | id, name, directory, files | | tappify extension add | kind, id, files, scopesAdded | | tappify extension remove | kind, id, files | | tappify extension list | id, contributions, scopes | | tappify extension set | field, value | | tappify extension scopes add | key, justification, requiresSecurityReview | | tappify extension scopes remove | key, stillNeeded | | tappify extension events add | name, events | | tappify extension events remove | name, events, usedBy | | tappify extension types | file, schemas | | tappify extension dev | id, remoteEntry, previewUrl, hostUrl, installId | | tappify extension doctor | id, errors, warnings, passed, fixed, checks | | tappify extension publish | id, status, releaseId, bytes, entries, pending | | tappify extension retire | id, status | | tappify extension status | id, live, pending, timeline, installCount | | tappify extension whoami | user, vendor, role, sandboxProject |

publish carries pending only when the release goes to review with scopes or contribution kinds the live release does not have. doctor prints the same six keys whether or not a check failed; when one did, the object is the ok: false form and errors is above zero. fixed lists what --fix changed, and is empty without the flag. scopes remove carries stillNeeded on both forms: null when the scope went, and the reason it stayed when it did not. A failure carries whatever keys the command has beside error, so the shape a command prints does not change when it refuses.

events remove carries usedBy: the markers and banners that draw the event, which keep working because they are inbound webhooks rather than this subscription.

tappify vendor --json, tappify extension --json, tappify extension scopes --json and tappify extension events --json print { commands } — the verbs the group holds, not a result.

License

MIT