โ ๏ธ Breaking Change
Impact Score: 7/10
Playwright v1.38.0 โ Release Notes & Engineering Impact
Source available โ automated, not human-reviewed
Component: playwright ยท Channel: stable. Automated analysis, not a compatibility certification. How this works.
Analysis updated: 2026-11-01.
Breaking-change evidence from the source
Breaking Changes: Playwright no longer downloads browsers automatically
โก Executive Summary (TL;DR)
Playwright v1.38.0. Source highlight: Zoom into time range.
Who Does This Impact? (Role-Based Analysis)
๐ป Software Engineers & Devs
Check the source notes against the package and APIs you use before upgrading.
๐ Product & Engineering Leads
Use the documented changes to assess relevance to your product; release frequency alone is not a quality measure.
โ๏ธ DevOps & Security
Verify the target version, runtime requirements and rollback procedure in the official documentation.
โ ๏ธ Breaking Changes & Deprecations (1)
- Breaking Changes: Playwright no longer downloads browsers automatically
๐ View Raw Release Notes (Original Developer Log)
## UI Mode Updates

1. Zoom into time range.
2. Network panel redesign.
## New APIs
- [`browserContext.on('weberror')`]
- [`locator.pressSequentially()`]
- The [`reporter.onEnd()`] now reports `startTime` and total run `duration`.
## Deprecations
- The following methods were deprecated: [`page.type()`], [`frame.type()`], [`locator.type()`] and [`elementHandle.type()`].
Please use [`locator.fill()`] instead which is much faster. Use [`locator.pressSequentially()`] only if there is a
special keyboard handling on the page, and you need to press keys one-by-one.
## Breaking Changes: Playwright no longer downloads browsers automatically
> [!NOTE]
> If you are using `@playwright/test` package, this change **does not** affect you.
Playwright recommends to use `@playwright/test` package and download browsers via `npx playwright install` command. If you are following this recommendation, nothing has changed for you.
However, up to v1.38, installing the `playwright` package instead of `@playwright/test` did automatically download browsers. This is no longer the case, and we recommend to explicitly download browsers via `npx playwright install` command.
**v1.37 and earlier**
`playwright` package was downloading browsers during `npm install`, while `@playwright/test` was not.
**v1.38 and later**
`playwright` and `@playwright/test` packages do not download browsers during `npm install`.
**Recommended migration**
Run `npx playwright install` to download browsers after `npm install`. For example, in your CI configuration:
```yml
- run: npm ci
- run: npx playwright install --with-deps
```
**Alternative migration option - not recommended**
Add `@playwright/browser-chromium`, `@playwright/browser-firefox` and `@playwright/browser-webkit` as a dependency. These packages download respective browsers during `npm install`. Make sure you keep the version of all playwright packages in sync:
```json5
// package.json
{
"devDependencies": {
"playwright": "1.38.0",
"@playwright/browser-chromium": "1.38.0",
"@playwright/browser-firefox": "1.38.0",
"@playwright/browser-webkit": "1.38.0"
}
}
```
### Browser Versions
* Chromium 117.0.5938.62
* Mozilla Firefox 117.0
* WebKit 17.0
This version was also tested against the following stable channels:
* Google Chrome 116
* Microsoft Edge 116
[`browserContext.on('weberror')`]: https://playwright.dev/docs/api/class-browsercontext#browser-context-event-web-error
[`locator.pressSequentially()`]: https://playwright.dev/docs/api/class-locator#locator-press-sequentially
[`reporter.onEnd()`]: https://playwright.dev/docs/api/class-reporter#reporter-on-end
[`page.type()`]: https://playwright.dev/docs/api/class-page#page-type
[`frame.type()`]: https://playwright.dev/docs/api/class-frame#frame-type
[`locator.type()`]: https://playwright.dev/docs/api/class-locator#locator-type
[`elementHandle.type()`]: https://playwright.dev/docs/api/class-elementhandle#element-handle-type
[`locator.fill()`]: https://playwright.dev/docs/api/class-locator#locator-fill
[`expect(value).toMatchSnapshot()`]: https://playwright.dev/docs/api/class-snapshotassertions#snapshot-assertions-to-match-snapshot-1
[`expect(page).toHaveScreenshot()`]: https://playwright.dev/docs/api/class-pageassertions#page-assertions-to-have-screenshot-1
[`expect(locator).toHaveScreenshot()`]: https://playwright.dev/docs/api/class-locatorassertions#locator-assertions-to-have-screenshot-1