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

@ejbed/runner

v1.0.1

Published

EJBED local runner — executes API test suites and browser recordings on your machine

Readme

EJBED Runner

Local execution agent for EJBED — runs your test suites directly on your machine and reports structured results back to the EJBED dashboard.

Supports four test types out of the box: API tests, Security tests, Performance (k6), and UI tests (Playwright).


Requirements

  • Node.js 18+download here
  • An EJBED account at ejbed.com
  • The test frameworks you intend to run must already be installed locally (Maven, k6, Python, .NET, etc.)

Installation

npm install -g @ejbed/runner

The installer automatically downloads the Chromium browser needed for UI recording and replay. This may take a minute on first install.

Linux only: if UI recording fails with a missing library error, run npx playwright install-deps chromium (requires sudo).


Quick start

Step 1 — Create a runner token

  1. Log in to EJBED → Account Settings → API Keys
  2. Click Create token, give it a label (e.g. my-laptop)
  3. Copy the token — it starts with ejbed_ and is shown once only

Step 2 — Connect the runner

ejbed-runner login --token ejbed_your_token_here

Saves credentials to ~/.ejbed/runner.json. Do this once per machine.

Step 3 — Start the runner

ejbed-runner start        # background (recommended)
ejbed-runner status       # confirm it's running
ejbed-runner stop         # shut it down
ejbed-runner --watch      # foreground (useful for debugging)

Once started, the runner polls EJBED every 5 seconds for pending jobs. Trigger a run from the EJBED web app — results appear in the Reports dashboard automatically.


What the runner handles

All job types are queued from the EJBED web UI. The runner picks them up and sends structured results back to the dashboard.

| Test type | Frameworks | What you see in the dashboard | |-----------|-----------|-------------------------------| | API tests | Maven/TestNG, JUnit, PyTest, .NET/xUnit, Karate | Per-test-case pass/fail table, failure messages, total counts | | Security tests | Any API framework in security mode | OWASP-categorized results, pass/fail breakdown | | Performance (k6) | k6 | Avg/p95 latency, throughput (req/s), error rate, max VUs, checks | | UI recording | Playwright codegen | Saved Playwright script, detected scenario type, generated test variants | | UI test run | Playwright | Per-variant pass/fail, screenshots on failure, test step detail | | Custom shell | Any command | Exit code, full stdout/stderr |


Supported frameworks

| Framework | Run command (enqueued from UI) | Report source | |-----------|-------------------------------|---------------| | Maven + TestNG / JUnit | mvn test | target/surefire-reports/TEST-*.xml | | Maven + Karate DSL | mvn test -Dtest=KarateRunner | target/surefire-reports/TEST-*.xml | | Gradle + TestNG / JUnit | gradle test | build/test-results/test/*.xml | | Python + PyTest | pytest --junitxml=report.xml | report.xml | | .NET + xUnit / NUnit | dotnet test --logger "junit;LogFilePath=TestResults.xml" | TestResults.xml | | k6 Performance | k6 run k6-project/main.js | Parsed from k6 stdout (avg/p95 latency, error rate, throughput) | | Playwright (UI) | Triggered via UI recording / run buttons | Playwright JSON reporter → pass/fail per variant | | Custom | Any shell command | stdout/stderr captured, exit code recorded |

k6 note: the runner captures k6's terminal output and the backend automatically extracts performance metrics (avg latency, p95, throughput, error rate, max VUs). No extra flags or file exports are needed — just run k6 run.


Configuration

After login, config lives in ~/.ejbed/runner.json. Override any value with environment variables or a runner/.env file (KEY=VALUE per line).

| Variable | Default | Description | |----------|---------|-------------| | EJBED_API_URL | https://ejbed.com | EJBED API base URL | | EJBED_RUNNER_TOKEN | (from login) | Runner auth token (ejbed_…) | | EJBED_POLL_INTERVAL_MS | 5000 | Milliseconds between job polls | | EJBED_HEADLESS | 0 | Set to 1 to run UI tests without a visible browser window | | EJBED_PW_WORKERS | 1 | Playwright parallel workers (max 8) | | EJBED_PW_RETRIES | 0 | Playwright retry count for flaky tests (max 3) |

Self-hosted / local dev:

ejbed-runner login --token ejbed_xxx --url http://localhost:5000

CLI reference

ejbed-runner login --token <ejbed_…> [--url <api-url>]
    Save credentials for this machine.

ejbed-runner start
    Start the runner in the background (writes PID + logs to ~/.ejbed/).

ejbed-runner stop
    Stop the background runner.

ejbed-runner status
    Show whether the runner is running and which API it is connected to.

ejbed-runner logs
    Print the last 100 lines from ~/.ejbed/runner.log.

ejbed-runner --watch / -w
    Run in the foreground, polling continuously. Useful for debugging.

ejbed-runner (no args)
    Claim and execute one pending job, then exit. Useful in CI scripts.

Troubleshooting

Runner says "No pending runs" and exits → Normal for the no-arg mode. Use ejbed-runner start so it keeps polling in the background, or --watch for foreground continuous polling.

"Missing EJBED_RUNNER_TOKEN" → Run ejbed-runner login --token ejbed_xxx first, or set EJBED_RUNNER_TOKEN in the environment.

"Token looks like a SHA-256 hash" → You copied the wrong value. The token starts with ejbed_ (not a 64-char hex string). Create a new token in the UI — the plaintext is only shown at creation time.

k6 run shows no metrics in the dashboard → Make sure k6 is installed and on your PATH (k6 version). The backend parses k6 metrics from stdout automatically — no extra flags needed.

UI recording: browser opens but nothing is recorded → The runner must be running on the same machine as your browser. Playwright's codegen only captures interactions from that local browser session.

Linux: "error while loading shared libraries" → Run npx playwright install-deps chromium to install OS-level browser dependencies (requires sudo).

Windows: runner won't stop → Run ejbed-runner stop in the same shell (or as Administrator), or kill the process from Task Manager using the PID shown by ejbed-runner status.

Run stays in "Queued" state → The runner is not polling. Check ejbed-runner status. Common causes: wrong EJBED_API_URL, revoked/mismatched token, or a firewall blocking outbound HTTPS.

JUnit report not found after test run → Verify the junit_report_path matches where your framework writes the file. Use glob patterns for Maven (e.g. target/surefire-reports/TEST-*.xml).


Security

  • The runner executes shell commands with your local user's permissions. Only install the runner on machines you control.
  • Runner tokens are stored as SHA-256 hashes on the server — the plaintext is never logged or persisted.
  • Credentials (JWT tokens, API keys, passwords) are automatically masked in logs before being stored.
  • Revoke a token immediately from Account Settings → API Keys if a machine is lost or compromised.
  • The runner signals graceful shutdown to the server on SIGTERM/SIGINT — it marks itself offline so the dashboard reflects the correct state.