Lightweight Node.js CLI

Test your workspaces
Faster & Better.

npm run test --workspaces --if-present runs every workspace but gives no aggregated summary, no fail-fast, and lets an early failure scroll off screen unnoticed. sumlyzer fixes that and runs workspaces concurrently while it's at it.

View on GitHub →
sumlyzer
3.5xfaster than npm run
reduce infra cost
0config required
on GitHub npm downloads/week
npx sumlyzer
running contact
✓ contact
running tree-walker
✗ tree-walker failed (exit code 1)
running conformance …
 
workspacestatusduration
contactPASS20.5s
tree-walkerFAIL2.7s
conformancePASS1.1s
+ 10 more workspaces
Fail-fast

Stop the moment something breaks

Add --ff and sumlyzer stops scheduling new workspaces the moment one fails. The behavior requested from npm itself, years before it ever landed.

contactPASS
scannerPASS
tree-walkerFAIL
--ff stops scheduling here
Aggregated summary

Everything still lands in one table

Every workspace's stats are collected into a single table at the end.

workspacestatusdurationtestspassfail
contactPASS20.5s35350
scannerPASS10.1s1621610
tree-walkerFAIL2.7s26251
conformancePASS1.1s35350
githubPASS4.7s880
gitlabPASS2.6s880
+ 7 more workspaces

i skipped tests: scanner (1)

1/13 workspace(s) failed: tree-walker

Respects your time

Parallèle execution

-c, --concurrency <n> runs up to n workspaces' scripts at the same time, something npm doesn't do natively.

Measured on a real 15-workspace monorepo: ~3.5x faster at concurrency 8, output interleaved as each workspace finishes.

npm --workspaces 22s
sumlyzer 21s
--concurrency 8 6s
Respect your workflow

Rerun what's changed


--changed run workspace that owns every file in your git diff

The git ref auto-detects: uncommitted changes diff against HEAD, a clean branch diffs against its upstream merge-base.

In your CI, pass --ref for a custom target branch.

apiskip
webskip
clirun
corerun
dbskip
authskip
uiskip
docsskip
hooksrun
infraskip
jobsskip
sharedskip
CI ready

Turn long logs into a short CI job page

--junit <path> merges every workspace's JUnit output into one aggregated report, each <testsuite> prefixed by workspace name. GitLab, Jenkins, Azure DevOps all read it the same way.

On GitHub Actions, group each workspace's output in a collapsible element.

Exit code is 1 on any failure, 0 otherwise. No output parsing required.

contact scanner tree-walker
junit.xml
running tree-walker
running conformance
✓ Dependency.addChildren must increment dependencyCount one by one (0.3ms)
On the roadmap

Watch mode

Today, --changed only runs the workspaces your diff touches directly. Watch mode will walk the full workspace dependency graph with a topological sort, so a change in core automatically re-runs everything downstream that depends on it, in the right order.

A change in core ripples downstream, in topological order

On the roadmap

MCP server

Sumlyzer will ship as an MCP server, so an LLM agent can call it as a tool, running fail-fast mode on any npm workspaces project directly from the chat.

agent → sumlyzer (MCP)
tools/call sumlyzer_run_tests
✓ contact
✗ tree-walker failed (exit code 1)
  stopped scheduling, result returned to agent

All flags

FlagDefaultDescription
--script <name>testnpm script to run per workspace
--ffofffail fast: stop at the first failing workspace
--junit <path>offwrite an aggregated JUnit XML report to <path>
-c, --concurrency <n>1run up to <n> workspaces at once
--changedoffonly run workspaces with changed files
--ref <ref>auto-detectgit ref to diff against for --changed
-h, --helpprint usage

Stop paying full price for a one-line fix.

Drop sumlyzer into any npm workspaces project in under a minute.

View on GitHub →