PNSQC 2026 · POSTER PAPER
Lana Begunova·Daisy Lady Bug·Seattle, WA
Making a browser-automation CLI faster
Skip the
Wrapper
Five optimizations, measured under fixed semantics.
Four of them lost. The one that shipped is a packaging change.
~108ms saved per CLI call691ms off a 7-command journey0 mismatches
Same journey · same verbs · byte-identical output
Every call boots Node before any browser work.
saucedemo · 7 commands · replayed at ⅓ speed
illustrative split; totals as measured
Node runtime bootthe command’s real work
691ms
off a real 7-command journey
1.69×
journey speedup — not the 11.6×
of a near-empty command
0
behavior changes:
same click, same fill, same checks
What is actually on your PATH
vibium is not Vibium.
Today — two process spawns~118ms
vibium click
bin/cli.js41-line Node shim
Node runtime bootsevery single call
execFileSyncspawn #2
native binary
Skip the wrapper — one spawn~10ms
vibium click
native binaryhard-linked at install time
118−10=108msper call. The fix is in postinstall.js, not the CLI — what esbuild already does.
Five candidates · one survivor
Most “wins” stopped looking like wins.
upper bar = flat (6 cmds) · lower bar = navheavy (7 cmds) · positive is faster
dashed = not a saving: it changed what the journey does
How the numbers were kept honest
Without a noise floor, 108ms is a number — not a result.
0
timed journeys, all verified
0
further reps on the patch
40–60×
the measured noise floor
#356Filed upstream at a maintainer’s public invitation — merged as PR #432.
Every sweep also run in reverse, so a direction effect could not hide.
The transferable part
The cheapest performance win is often not in the code. It is in the packaging.
Run it yourself
Under a minute.
Doesn’t touch your install.
python3 measure.py 50 mine
Reproductiongithub.com/lana-20/vibium-cli-startup-repro
Full write-updaisyladybug.com/blog/making-vibium-cli-faster/
Questions? The author is right here →
Scan for the repro repo
PORTLAND · OCT 12–14, 2026