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

@qanode/cli

v0.1.1

Published

Official QANode CLI for CI/CD and automation workflows

Readme

@qanode/cli

Official QANode CLI for CI/CD and automation workflows.

It lets you:

  • authenticate with an integration token
  • run scenarios and suites
  • wait for execution completion
  • inspect an existing run
  • download the consolidated run report

Installation

You can use it without a global install:

npx @qanode/cli help

If you prefer to install it in your project:

npm install --save-dev @qanode/cli

Then run:

npx qanode help

Configuration

Set:

  • QANODE_URL: the public QANode URL, usually the same domain your team opens in the browser
  • QANODE_TOKEN: an integration token or session token

Example:

export QANODE_URL=https://company.qanode.com
export QANODE_TOKEN=qnt_xxxxx

In local development with Vite, http://localhost:3000 may also work as long as it proxies /api.

Commands

qanode auth me [--json]

qanode run scenario (--scenario-id <id> | --scenario-name <name>) \
  [--project-id <id> | --project-name <name>] \
  [--var NAME=VALUE] \
  [--credential CRED.FIELD=VALUE] \
  [--wait] \
  [--interval <seconds>] \
  [--timeout <seconds>] \
  [--json]

qanode run suite (--suite-id <id> | --suite-name <name>) \
  [--project-id <id> | --project-name <name>] \
  [--var NAME=VALUE] \
  [--credential CRED.FIELD=VALUE] \
  [--wait] \
  [--interval <seconds>] \
  [--timeout <seconds>] \
  [--json]

qanode runs get --run-id <id> [--json]
qanode runs wait --run-id <id> [--interval <seconds>] [--timeout <seconds>] [--json]
qanode runs artifacts --run-id <id> --out <dir> [--json]

Output

Without --json:

  • run ... --wait
  • runs get
  • runs wait

return only:

success

or

failed

or

cancelled

This makes the CLI easier to use in pipelines.

With --json, the CLI prints the full API payload.

Important:

  • qanode run ... --json without --wait returns the start payload, which contains runId
  • qanode run ... --wait --json returns the final run object, which contains id
  • qanode runs artifacts should use the same run ID from the execution you already started
  • do not call qanode run ... again just to discover the run ID, or you will create a second execution

Examples

Run a suite by ID:

npx @qanode/cli run suite --suite-id SUITE_ID --wait

Run a suite by project and name:

npx @qanode/cli run suite \
  --project-name "Backoffice" \
  --suite-name "Login Regression" \
  --wait

Run a scenario by project and name:

npx @qanode/cli run scenario \
  --project-name "Checkout" \
  --scenario-name "Login API" \
  --wait

Run a scenario with execution overrides:

npx @qanode/cli run scenario \
  --scenario-id SCENARIO_ID \
  --var BASE_URL=https://preview.app \
  --credential api-main.token=$API_TOKEN \
  --wait

Download the consolidated run report:

npx @qanode/cli runs artifacts \
  --run-id RUN_ID \
  --out ./artifacts

The command above prioritizes the consolidated PDF report and saves it as:

report_<runId>.pdf

GitHub Actions

- name: Run QANode suite
  id: run_suite
  run: |
    set +e
    RUN_JSON=$(npx @qanode/cli run suite \
      --project-name "Backoffice" \
      --suite-name "Login Regression" \
      --wait \
      --json)
    EXIT_CODE=$?
    set -e

    echo "$RUN_JSON" > qanode-run.json
    echo "run_id=$(echo "$RUN_JSON" | jq -r '.id')" >> "$GITHUB_OUTPUT"
    exit $EXIT_CODE
  env:
    QANODE_URL: ${{ secrets.QANODE_URL }}
    QANODE_TOKEN: ${{ secrets.QANODE_TOKEN }}

- name: Download QANode report
  if: always()
  run: |
    npx @qanode/cli runs artifacts \
      --run-id "${{ steps.run_suite.outputs.run_id }}" \
      --out ./artifacts
  env:
    QANODE_URL: ${{ secrets.QANODE_URL }}
    QANODE_TOKEN: ${{ secrets.QANODE_TOKEN }}

Azure DevOps

steps:
- script: |
    set +e
    RUN_JSON=$(npx @qanode/cli run suite \
      --project-name "Backoffice" \
      --suite-name "Login Regression" \
      --wait \
      --json)
    EXIT_CODE=$?
    set -e

    echo "$RUN_JSON" > qanode-run.json
    echo "##vso[task.setvariable variable=QANODE_RUN_ID]$(echo "$RUN_JSON" | jq -r '.id')"
    exit $EXIT_CODE
  displayName: Run QANode suite
  env:
    QANODE_URL: $(QANODE_URL)
    QANODE_TOKEN: $(QANODE_TOKEN)

- script: |
    npx @qanode/cli runs artifacts \
      --run-id "$(QANODE_RUN_ID)" \
      --out ./artifacts
  displayName: Download QANode report
  condition: always()
  env:
    QANODE_URL: $(QANODE_URL)
    QANODE_TOKEN: $(QANODE_TOKEN)

Per-execution overrides

Overrides passed through the CLI:

  • affect only that execution
  • do not permanently overwrite the value stored in QANode

Examples:

--var BASE_URL=https://preview.app
--var LOCALE=en-US
--credential api-main.token=$API_TOKEN
--credential smtp-main.password=$SMTP_PASSWORD

Notes

  • When using names, prefer combining --project-name with --suite-name or --scenario-name to avoid ambiguities.
  • The CLI uses QANode /api routes directly, so it works well behind a public domain and reverse proxy.
  • In CI pipelines, the most common pattern is using --wait and relying on the process exit code.