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

@neutrome-labs/merchantduo

v0.0.14

Published

Append-only console interface for MerchantDuo deploy and sandbox workflows, with an `ora` spinner for the current in-flight phase on interactive terminals.

Readme

MerchantDuo CLI

Append-only console interface for MerchantDuo deploy and sandbox workflows, with an ora spinner for the current in-flight phase on interactive terminals.

Usage

pnpx @neutrome-labs/merchantduo --help
pnpx @neutrome-labs/merchantduo deploy --help
pnpx @neutrome-labs/merchantduo upgrade --help
pnpx @neutrome-labs/merchantduo sandbox --help

Global flags:

  • --config <path>: resolve merchantduo.jsonc from a custom path
  • --verbose: print info logs to stderr
  • --debug: print debug logs to stderr
  • --non-interactive: disable prompts and require config to already be complete

Environment knobs:

  • MERCHANTDUO_HTTP_TIMEOUT_MS: override the CLI API request timeout for long remote upgrade/provision calls. Default is 600000.

The CLI always writes durable output as appended stdout/stderr lines. Interactive TTY runs also show a transient spinner on stderr for the current status or running task.

Deploy config prompts use @clack/prompts before long-running work starts. If merchantduo.jsonc is missing required values and prompts are disabled, the command fails and asks you to fill the file manually or rerun interactively.

Remote provision logs stay hidden unless --verbose or --debug is enabled. When enabled, they are appended as raw log lines.

Deploy

deploy deploys current Magento project to the MerchantDuo Cloudflare Cloud. It finalizes staged artifacts into a raw provision payload.

If merchantduo.jsonc already has an id, deploy warns that it will create a brand-new instance and suggests upgrade instead. In non-interactive mode that becomes an error.

Useful runtime toggles:

  • --dry-run: run local stage commands and artifact creation, but skip upload and instance provision
  • --skip-composer
  • --skip-di-compile
  • --skip-theme
  • --skip-static-content

merchantduo.jsonc also includes local snapshot commands:

  • snapshot.fs: builds the filesystem artifact into $SNAPSHOT_FS_OUTFILE from $SNAPSHOT_SOURCE_DIR
  • snapshot.db.fast: writes a mydumper-style directory to $SNAPSHOT_DB_DIR
  • snapshot.db.slow: writes a gzipped SQL dump to $SNAPSHOT_DB_OUTFILE

These commands run through bash -lc, so you can swap them for local tooling differences. If a snapshot command references n98-magerun2 but only n98-magerun is installed, the CLI falls back automatically.

Upgrade

upgrade updates the instance referenced by merchantduo.jsonc.id in place. It builds the local filesystem, requests an upload quote, uploads only the replacement filesystem, finalizes that upload into a runtime snapshot, then starts a single remote upgrade workflow and waits for it to finish.

Useful runtime toggles:

  • --dry-run: run local upgrade stages and filesystem packaging, but skip remote upload and upgrade workflow
  • --skip-composer
  • --skip-di-compile
  • --skip-theme
  • --skip-static-content

Sandbox

sandbox provisions a new clean 1 hour Magento 2 instance. Supported sandbox templates:

  • magento24
  • breeze-blank
  • breeze-evolution

Template params are passed with repeatable --param <path=value>.

Examples:

merchantduo sandbox \
  --template breeze-blank \
  --param withSampleData=true \
  --param composerPackages=vendor/package \
  --param [email protected]

Array-valued fields can be repeated:

merchantduo sandbox \
  --param composerPackages=swissup/module-marketplace \
  --param composerPackages=swissup/breeze-blank

Full JSON values are preserved, so you can pass the entire auth object at once:

merchantduo sandbox \
  --param 'authJson={"http-basic":{"repo.magento.com":{"username":"public","password":"secret"}}}'

You can also mix dot notation with JSON object leaves when a nested key itself contains dots:

merchantduo sandbox \
  --param 'authJson.http-basic={"repo.magento.com":{"username":"public","password":"secret"}}'

Supported grades across provision/deploy flows:

  • sandbox
  • dev
  • live