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

@firenet-designs/fnd-cli

v2.4.0

Published

A new CLI generated with oclif

Readme

fnd

A new CLI generated with oclif

oclif Version Downloads/week

Usage

$ npm install -g @firenet-designs/fnd-cli
$ fnd COMMAND
running command...
$ fnd (--version)
@firenet-designs/fnd-cli/2.4.0 linux-x64 node-v24.18.0
$ fnd --help [COMMAND]
USAGE
  $ fnd COMMAND
...

Commands

fnd backfill-project [SHOP]

Backfill missing scaffold files in an EXISTING repo + theme: .gitignore, .shopifyignore, CLAUDE.md. Each is created only if absent — existing files are left untouched. Does NOT git init, pull the theme, commit, or touch GitHub.

USAGE
  $ fnd backfill-project [SHOP...]

ARGUMENTS
  [SHOP...]  Shopify store handle, passed to Claude as a hint

DESCRIPTION
  Backfill missing scaffold files in an EXISTING repo + theme: .gitignore, .shopifyignore, CLAUDE.md. Each is created
  only if absent — existing files are left untouched. Does NOT git init, pull the theme, commit, or touch GitHub.

  Requires the claude CLI (npm install -g @anthropic-ai/claude-code) for the CLAUDE.md step.

EXAMPLES
  $ fnd backfill-project

  $ fnd backfill-project my-store

  $ fnd backfill-project my-store "extra hints"

See code: src/commands/backfill-project.ts

fnd create-app

sets up a preconfigued vite app directory on for a shopify theme

USAGE
  $ fnd create-app [-d <value>] [-s]

FLAGS
  -d, --dir=<value>  [default: src] directory to create the vite app in
  -s, --skip-check   skips the checking of the parent directory for a shopify theme

DESCRIPTION
  sets up a preconfigued vite app directory on for a shopify theme

EXAMPLES
  $ fnd create-app

See code: src/commands/create-app.ts

fnd create-project [SHOP]

Scaffold a new client project: git on branch production, ignore files, Shopify theme pull, a Claude-generated CLAUDE.md, then a private GitHub repo under the FireNet-Designs org.

USAGE
  $ fnd create-project [SHOP...]

ARGUMENTS
  [SHOP...]  Shopify store handle — pulls the live theme from <shop>.myshopify.com (omit to skip)

DESCRIPTION
  Scaffold a new client project: git on branch production, ignore files, Shopify theme pull, a Claude-generated
  CLAUDE.md, then a private GitHub repo under the FireNet-Designs org.

  Requires the claude CLI (npm install -g @anthropic-ai/claude-code) for the CLAUDE.md step.

  GitHub auth comes from YOUR environment — run `gh auth login` once, or export GH_TOKEN in your shell profile. This CLI
  never stores credentials. Override the org with FND_GH_ORG.

EXAMPLES
  $ fnd create-project

  $ fnd create-project my-store

  $ fnd create-project my-store "Acme storefront, Klaviyo"

See code: src/commands/create-project.ts

fnd help [COMMAND]

Display help for fnd.

USAGE
  $ fnd help [COMMAND...] [-n]

ARGUMENTS
  [COMMAND...]  Command to show help for.

FLAGS
  -n, --nested-commands  Include all nested commands in the output.

DESCRIPTION
  Display help for fnd.

See code: @oclif/plugin-help

fnd token

Mint an offline Shopify Admin API access token (shpat_) for a custom app via the OAuth authorization-code grant. Works cross-org, unlike client_credentials.

USAGE
  $ fnd token [-i <value>] [-c <value>] [--no-open] [-p <value>] [--scopes <value>] [-s <value>] [-w
    <value>]

FLAGS
  -c, --client-secret=<value>  app Client secret (shpss_...)
  -i, --client-id=<value>      app Client ID
  -p, --port=<value>           [default: 3456] local callback port (must match the app redirect URL)
  -s, --store=<value>          store domain (mystore or mystore.myshopify.com)
  -w, --write=<value>          path to an .mcp.json whose 'shopify' server should be rewritten to use the token
      --no-open                don't auto-open the authorize URL in a browser
      --scopes=<value>         [default: read_products] comma-separated Admin API scopes to request

DESCRIPTION
  Mint an offline Shopify Admin API access token (shpat_) for a custom app via the OAuth authorization-code grant. Works
  cross-org, unlike client_credentials.

EXAMPLES
  $ fnd token --store trafalgar-store --client-id 0b42... --client-secret shpss_...

  $ fnd token -s mystore -i <id> -c <secret> --scopes read_products,read_orders

  $ fnd token -s mystore -i <id> -c <secret> --write ./.mcp.json

See code: src/commands/token.ts

fnd workspace

Open a remote workspace: two-way sync the current directory to a remote Linux box with Mutagen and drop into a shell there, tearing the sync down on exit.

USAGE
  $ fnd workspace --ssh <value> [--delete-remote-dir] [--devtools <value>] [--ignore-vcs] [--remote-base
    <value>] [--rpc <value>] [--source remote|local]

FLAGS
  --delete-remote-dir
      on exit, delete the remote workspace directory instead of leaving the synced copy in place

  --devtools=<value>
      expose your LOCAL browser to Claude on the remote via the chrome-devtools MCP. Value is "port" (same port both ends)
      or "remote:local" (local = this machine, where the browser runs). Your browser must already be listening with
      --remote-debugging-port=<local>.

  --ignore-vcs
      don't sync paths matched by the project's .gitignore files (node_modules, build output, …) so each side keeps its
      own platform-specific artifacts. Every .gitignore in the tree is honoured relative to its directory, like git does.
      The .git directory itself still syncs, so the remote stays a working repo.

  --remote-base=<value>
      [default: /home/fnd] base dir on the remote; the workspace lands at <base>/<local-user>/<dir-name>

  --rpc=<value>
      expose a run_local_command MCP tool to Claude on the remote that executes commands back on THIS machine (the one
      running fnd workspace). Value is
      port=<port|remote:local>[,profile=<true|1|false|0>][,shell=<bash|batch|powershell|sh|zsh>] — port opens a reverse
      tunnel (ssh -R <remote>:localhost:<local>) to a command server started here; shell defaults to the shell fnd
      workspace was called from; profile (default true) controls whether the shell loads its startup files — with it on,
      POSIX shells run interactively (-i) so rc files like ~/.bashrc or ~/.zshrc are sourced and tools such as nvm work.

  --source=<option>
      which side wins on conflict: "remote" = this server (where the workspace shell runs), "local" = the machine you ran
      fnd workspace from. Omit to flag conflicts instead of auto-resolving them.
      <options: remote|local>

  --ssh=<value>
      (required) remote to connect to, as user@host

DESCRIPTION
  Open a remote workspace: two-way sync the current directory to a remote Linux box with Mutagen and drop into a shell
  there, tearing the sync down on exit.

  Both sides keep a real copy on local disk and only deltas cross the network, so the remote reads files at native
  speed. Conflicting edits on both ends are flagged rather than silently overwritten; pass --source to auto-resolve them
  in favour of one side. Mutagen connects the normal direction (this machine → remote over SSH) and auto-deploys its
  agent to the remote, so no local SSH server, reverse tunnel, or authorized_keys trust is required. You need the
  Mutagen CLI installed on THIS machine.

EXAMPLES
  $ fnd workspace --ssh [email protected]

  $ fnd workspace --ssh user@host --source local

  $ fnd workspace --ssh user@host --remote-base /home/fnd

  $ fnd workspace --ssh user@host --ignore-vcs

  $ fnd workspace --ssh user@host --devtools 9222

  $ fnd workspace --ssh user@host --devtools 9333:9222

  $ fnd workspace --ssh user@host --rpc port=7777:7700

  $ fnd workspace --ssh user@host --rpc port=7777:7700,profile=false,shell=zsh

  $ fnd workspace --ssh user@host --delete-remote-dir

See code: src/commands/workspace/index.ts

fnd workspace cleanup

Tear down a leftover workspace — use this if a workspace session dropped before it could clean up after itself.

USAGE
  $ fnd workspace cleanup --ssh <value> [--delete-remote-dir] [--devtools] [--remote-base <value>] [--remote-dir
    <value>] [--rpc]

FLAGS
  --delete-remote-dir    also delete the remote workspace directory (by default the synced files are left in place)
  --devtools             also strip the chrome-devtools MCP entry from the remote (only if the dropped session used
                         --devtools)
  --remote-base=<value>  [default: /home/fnd] base dir on the remote, used to derive the default remote directory path
  --remote-dir=<value>   exact remote directory to target (defaults to the current dir mapping)
  --rpc                  also strip the local-shell MCP entry from the remote (only if the dropped session used --rpc)
  --ssh=<value>          (required) remote to connect to, as user@host

DESCRIPTION
  Tear down a leftover workspace — use this if a `workspace` session dropped before it could clean up after itself.

  Terminates any Mutagen sync sessions this machine started for the directory. Pass --devtools or --rpc to also strip
  the matching MCP entries from the remote (only do this if the dropped session used those flags). With no --remote-dir,
  it targets the same path `workspace` would use for the current directory. The synced files themselves are left in
  place unless you pass --delete-remote-dir.

EXAMPLES
  $ fnd workspace cleanup --ssh user@host

  $ fnd workspace cleanup --ssh user@host --remote-dir /home/fnd/cole/fnd-cli

  $ fnd workspace cleanup --ssh user@host --devtools

  $ fnd workspace cleanup --ssh user@host --rpc

  $ fnd workspace cleanup --ssh user@host --delete-remote-dir

See code: src/commands/workspace/cleanup.ts