Skip to content

v26.5.31

Latest

Choose a tag to compare

@hugs hugs released this 01 Jun 04:13
727874d

A broad bug-fix release, driven almost entirely by community reports. The headline fix restores the npm package — v26.3.18 shipped without its dist/ folder, which broke require('vibium') / import 'vibium/sync', the bundled TypeScript types, and ESM binary resolution. Beyond that, this release fixes a wide range of issues across the CLI, the MCP server, and the JavaScript, Python, and Java clients — most surfaced by systematic cross-client testing.

📦 Packaging (npm) — repairs the broken v26.3.18

  • The npm package ships dist/ again, so require('vibium'), import 'vibium/sync', and the TypeScript declarations work. A self-healing prepack hook now rebuilds dist/ and refuses to publish an incomplete package. (#103 by @ichimond, #127 by @snackattas, #100 by @michaelhly)
  • ESM binary resolution fixedrequire.resolve failed under native ESM, so the vibium binary couldn't be located. (#62 by @cavoirom)

⚙️ Core engine (all clients)

  • fill no longer crashes on <textarea> ("Illegal invocation") — the value setter now matches the element's actual type. (#117 by @paulsmith, #155 by @lana-20)
  • select errors on a non-matching option instead of silently "succeeding", and now matches by visible label, not just the value attribute. (#140 by @paulsmith) ⚠️
  • waitUntil / waitForFunction accept bare expressions, not only () => … functions. (#123, #131, #145 by @lana-20)
  • Clock methods error clearly when clock.install() wasn't called instead of silently doing nothing. (#125 by @lana-20) ⚠️
  • Script exceptions now surface a real error message instead of an empty one. (#111 by @Udit1305)

🤖 MCP server

  • Empty / null results no longer cause invalid_unionbrowser_evaluate of "", an absent attribute, and text-less elements return cleanly. (#154, #153, #157 by @lana-20)
  • Stringified numbers accepted — e.g. {"ms": "2000"}. (#85 by @tnsardesai)
  • browser_count no longer crashes on the numeric result. (#149 by @lana-20)
  • browser_storage_state parses BiDi's structured cookie values instead of crashing. (#150 by @lana-20)
  • browser_set_cookie derives the domain from the current page when omitted. (#152 by @lana-20)
  • browser_screenshot { annotate: true } no longer crashes. (#156 by @lana-20)

🖥️ CLI & error messages

  • No more Node stack traces on ordinary command failures — you get the binary's own message and exit code. (#161 by @paulsmith, #111 by @Udit1305)
  • Errors are categorized correctly — validation/not-found failures are no longer mislabeled as timeouts (and no longer raise TimeoutError in the Python/Java clients). (#64 by @evanniedojadlo) ⚠️

🐍 Python client

  • page.eval() added as an alias for evaluate(). (#144 by @lana-20)
  • element.bounds() supports dict-style access (bb["width"], "width" in bb) alongside attribute access. (#147 by @lana-20)
  • Large pipe messages (e.g. base64 screenshots) no longer crash with LimitOverrunError. (#110 by @Jhoan0714)

☕ Java client

  • Fixed waitForURL (#129), addScript/addStyle (#130), dispatchEvent (#132), dragTo (#134), onError/collectErrors (#136), and clock time formats (#137) — mostly command/parameter mismatches with the engine. el.highlight() is now implemented engine-side (#133). (all reported by @lana-20)

🔧 Tooling & docs

  • make test-python upgrades pip before installing, so the editable install works on stock environments.
  • Windows: npm.cmd spawning, platform-binary copy, and process-cleanup fixes so make test passes on Windows.
  • The Windows and Linux dev-setup guides now list the JDK and Python prerequisites.

⚠️ Notable behavior changes

  • select now errors when the value matches no option (was a silent success) and matches by visible label.
  • Clock operations now error if clock.install() wasn't called first (was a silent no-op).
  • Non-timeout failures are no longer reported as timeouts — in Python/Java they raise a generic error instead of TimeoutError.

🧭 Known issues (deferred to a follow-up)

  • Click → daemon deadlock on native dialogs / navigation (#146, #151, #128)
  • Java page.expose() (#135)
  • The remaining CLI bugs tracked in #112 (B6, B8–B33)

🙏 Thanks

This release was driven almost entirely by community bug reports. A huge thank-you to @lana-20 for an extraordinary amount of systematic, cross-client testing, and to @paulsmith, @Udit1305, @snackattas, @ichimond, @michaelhly, @cavoirom, @tnsardesai, and @Jhoan0714 for the reports that made these fixes possible.


What's Changed

  • Fix npm package shipping empty dist and ESM binary resolution by @hugs in #162
  • Fix textarea fill crash, silent select no-op, wait-expression timeout, and clock guard by @hugs in #163
  • Fix MCP empty-result serialization, number coercion, count, cookies, annotate by @hugs in #164
  • Improve CLI failure output and stop mislabeling errors as timeouts by @hugs in #165
  • Add page.eval alias, dict-compatible BoundingBox, larger pipe limit (Python) by @hugs in #166
  • Fix Java client command/param mismatches; add engine highlight command by @hugs in #167
  • Upgrade pip before installing Python test deps by @hugs in #169
  • Use npm.cmd on Windows in prepack + packaging test by @hugs in #170
  • Add Java (JDK) + Python prerequisites to Windows and Linux setup docs by @hugs in #171
  • Quote pack-destination in packaging test for Windows paths with spaces by @hugs in #172

Full Changelog: v26.3.18...v26.5.31