Playwright 1.65 Lets Its Test Runner Run Under Bun, Adds a failures Reporter and an -exclusive- Test Lock, and Lists Breaking Changes
Playwright 1.65.0 says its test runner now runs under Bun with listed limitations, adds a failures reporter and an exclusive test lock, and stops testing on Node.js 20.
Editor's Note ·
- Clarification:
- Disclosure: Bun, the JavaScript runtime named in this article's headline and lead, is owned by Anthropic, which announced its acquisition of Bun in December 2025. Anthropic also builds the AI model behind this article's contributor bot. The article's Bun statements are attributed to the Playwright release notes, and the Playwright project is not owned by Anthropic.
Overview
Playwright 1.65.0 was published on GitHub on November 5, 2026, according to the release page. Its notes open with Bun support for the test runner, saying the runner “now runs under” Bun. The release also adds a failures reporter, an -exclusive- test lock and a list of breaking changes. All details below come from the project’s own release notes; the Herald found no independent coverage of this release.
Running tests under Bun
The release notes say Bun transpiles TypeScript test files itself, so Playwright does not use Babel or its compilation cache. The notes say users must pass the --bun flag, “because without it bunx playwright test runs on Node.js”, and give bunx --bun playwright test as the command.
The notes state that Playwright’s CI runs the test runner tests under Bun 1.4.3 on Linux, and list four behavioral differences under Bun:
- There is no watch mode. UI mode does not run tests again when files change, and
--only-changeddoes not follow imports. --tsconfigand the JSX options intsconfig.jsonhave no effect, and custom ESM loaders are not supported.- Stack traces do not include async frames, and API names do not include the class name, so the notes give
clickinstead oflocator.clickas an example. - Console output of a test does not get into the trace and UI mode.
The Herald has previously reported on Bun 1.4.3, the version Playwright names for its CI.
Reporters and the test runner
According to the release notes, the new failures reporter “prints failures and successful retries as they occur, followed by a summary, without progress output.” A new onlyFailures option for the HTML, JSON and JUnit reporters keeps only tests with unexpected outcomes, flaky tests and interrupted tests.
The notes also describe these test runner additions:
- A built-in
-exclusive-test lock that runs a test only when no other tests are running, while all other tests continue to run in parallel with each other. The Playwright documentation describes the lock as “useful for a few tests that are sensitive to any concurrent activity”. test.skip(),test.fixme(),test.fail()andtest.slow()now accept only a description, which is recorded in the test annotation.- A
PLAYWRIGHT_TRANSFORM_CACHE_DIRenvironment variable that sets the directory for transpiled test files.
New APIs listed are timeout and signal options in cdpSession.send() and testRun.mode(), which returns the execution mode of a suite during reporter.preprocess().
Breaking changes
The release notes list the following breaking changes:
- TypeScript class fields now follow
useDefineForClassFieldsfromtsconfig.json, which the notes say is enabled forES2022and later targets and whentargetis not specified. A field initializer that reads a constructor parameter property now fails because the initializer runs first. locator.click(),locator.check(),locator.tap(),locator.fill(),locator.clear()andlocator.selectOption()now wait for the element to be not inert, and time out if the element stays inert.- A sharded run fails with “No tests found” when no tests match across all shards, unless
--pass-with-no-testsis passed. - Cookie matching follows RFC 6265. The notes say
browserContext.cookies()andapiRequestContext.cookies()with a URL no longer return host-only cookies for subdomains. - Proxy credentials are no longer sent to websites and now answer only proxy challenges; the notes point to
httpCredentialsfor website authentication. - Text that the browser does not render, such as text directly inside a closed
<details>, is no longer part of accessible names and aria snapshots. - String and
URLSearchParamsvalues of theparamsoption inAPIRequestContextrequests are appended to the query the URL already has instead of replacing it. .css,.lessand.scssimports in test files load as empty modules instead of being removed, so the imported file must exist.- The blob reporter again deletes the content of its output directory before it writes the report; the notes say Playwright 1.64 kept reports with other names.
- Test locations of imported calls such as
test(in CommonJS output now point to the start of the callee, the same as in ESM.
Platform and browser versions
The notes announce that Playwright no longer tests on Node.js 20 and tell users to use Node.js 22, 24 or 26. Docker images now include Node.js 26 instead of Node.js 24. The bundled browsers are Chromium 158.0.8127.18, Mozilla Firefox 159.0 and WebKit 27.2, and the release was also tested against the Google Chrome 157 and Microsoft Edge 156 stable channels.
What We Don’t Know
The release notes present the Bun differences as the Playwright team’s own list and do not give performance figures for running under Bun. No cited source reports how widely the Bun option will be adopted, or independent test results for it.