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

bull-terra

v0.1.4

Published

Local, generic UI-testing harness: turn Google Sheet test cases into runnable Playwright tests with a live dashboard and a regression-aware CLI gate.

Readme

bull-terra

Google Sheet test cases -> Playwright specs -> regression gate.

Use bull-terra when you want non-engineers to maintain test cases in Google Sheets, then generate and run real Playwright tests locally or in CI.

Requirements

  • Node.js 20+
  • Google Sheets MCP authenticated in Claude Code
  • A Google Sheet per feature

Install

npm i -g bull-terra
bull-terra init
npx skills add quangtd-kozocom/bull-terra

bull-terra init creates the local harness under ~/.bull-terra by default (BULL_TERRA_HOME can override it). The CLI and dashboard both use that same state home for data.db, recordings, generated specs, auth state, and run artifacts.

Recommended: Use the Dashboard

After install, start the dashboard:

bull-terra serve

Then use the UI to:

  1. Create a project.
  2. Add environments and credential variable names.
  3. Add features and Google Sheet IDs.
  4. Record a base flow for each feature.
  5. Copy the generated /gen-tests Claude command for a feature.
  6. Paste that command into Claude Code.
  7. Run all features or one feature from the dashboard.

Generated specs still come from Claude Code:

claude "/gen-tests app-a checkout"

CLI Quick Start

Use this if you prefer terminal commands:

# 1. Create a project
bull-terra project add app-a

# 2. Add an environment
bull-terra env add app-a stg https://stg.app-a.com --default \
  --user-var APP_A_STG_USER --pass-var APP_A_STG_PASS

# 3. Add credentials to .env
# APP_A_STG_USER=...
# APP_A_STG_PASS=...

# 4. Link a feature to its Google Sheet
bull-terra feature add app-a checkout --sheet <sheetId>

# 5. Record the feature flow once so generated tests use good selectors
bull-terra record --project app-a --feature checkout --env stg

# 6. Generate Playwright specs from the sheet
claude "/gen-tests app-a checkout"

# 7. Run the regression gate
bull-terra run --project app-a --env stg --all

Daily Use

bull-terra serve                               # open dashboard
bull-terra run --project app-a --env stg --all # run all features
bull-terra run --project app-a --env stg --feature checkout

run exits 1 only when a test that previously passed for the same environment now fails. New tests that never passed are reported but do not fail the gate.

Concepts

  • Project: app under test, for example app-a.
  • Environment: deploy target with a base URL, for example local, dev, or stg.
  • Feature: one Google Sheet of test cases, for example checkout.
  • Recording: one manual browser pass used as selector source for generated specs. Each feature needs its own base recording; extra named recordings can provide secondary selector context.
  • Baseline: previous passing result per environment.

Commands

| Command | Purpose | |---|---| | bull-terra init [--no-browser] | Create local files and install Chromium. | | bull-terra serve [-p <port>] [--no-open] [--dev] | Start the dashboard. | | bull-terra record --project <p> --feature <f> --env <e> | Record a feature base flow for selectors. | | bull-terra run --project <p> --env <e> --all | Run the regression gate for all features. | | bull-terra run --project <p> --env <e> --feature <f> | Run one feature. | | bull-terra install-browsers [--force] | Install Chromium for recording/runs. | | bull-terra project add/list/rm | Manage projects. | | bull-terra env add/list/default/rm | Manage environments. | | bull-terra feature add/list/inspect/rm | Manage sheet-backed features. |

Environment Variables

Secrets stay in .env. bull-terra stores only variable names and injects resolved values when tests run.

| Variable | Meaning | |---|---| | <user-var> / <pass-var> | Login credentials named by env add --user-var/--pass-var. | | BASE_URL | Injected from the selected environment URL. Do not set manually. | | BULL_TERRA_USER / BULL_TERRA_PASS | Injected login values for global-setup.ts. | | BULL_TERRA_HOME | Optional override for the state home. Defaults to ~/.bull-terra. | | BULL_TERRA_STORAGE_STATE | Injected auth state path: recordings/<project>/.auth/<env>.json. |

Troubleshooting

| Problem | Fix | |---|---| | Browser does not open | Run bull-terra install-browsers. | | /gen-tests cannot read the sheet | Authenticate the Google Sheets MCP in Claude Code. | | Login fails in generated tests | Check the .env values named in env add. | | Test passes only after weakening assertions | Do not weaken assertions. Fix the sheet expectation or the app. |