# Extension points — puppeteer/puppeteer

> Canonical page: https://codevetter.com/unpack/puppeteer/extension-points

# Extension points — puppeteer/puppeteer

Scanned commit 2e45a3af43231cd658285e4da5e7f53e40f24edf (2026-10-02). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

The code provides explicit hooks for transports, download providers, selectors, command composition, and Angular schematics. Internal factories separate browser-specific launch and protocol behavior from shared public abstractions. These interfaces have concrete contracts and caveats rather than uniform support guarantees. API documentation and suite configuration are additional integration points for changes that introduce capabilities.
- BrowserProvider implementations supply supports, getDownloadUrl, getExecutablePath, and getName; methods may be asynchronous, and provider documentation assigns compatibility responsibility to implementers. — [packages/browsers/src/provider.ts#L19-L33](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/browsers/src/provider.ts#L19-L33) [packages/browsers/src/provider.ts#L60-L152](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/browsers/src/provider.ts#L60-L152)
- InstallOptions.providers enters an ordered chain with conditional default fallback; custom executable layouts are persisted into Cache metadata. — [packages/browsers/src/install.ts#L186-L198](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/browsers/src/install.ts#L186-L198) [packages/browsers/src/install.ts#L455-L462](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/browsers/src/install.ts#L455-L462)
- ConnectionTransport defines send/close/onmessage/onclose, and connect accepts a supplied transport directly instead of constructing a WebSocket transport. — [packages/puppeteer-core/src/common/ConnectionTransport.ts#L10-L15](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/puppeteer-core/src/common/ConnectionTransport.ts#L10-L15) [packages/puppeteer-core/src/common/BrowserConnector.ts#L102-L112](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/puppeteer-core/src/common/BrowserConnector.ts#L102-L112)
- CustomQueryHandlerRegistry registers queryOne/queryAll functions under alphabetic names, creates QueryHandler adapters, and appends serialized registration scripts; unregister/clear remove injected scripts. — [packages/puppeteer-core/src/common/CustomQueryHandler.ts#L74-L125](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/puppeteer-core/src/common/CustomQueryHandler.ts#L74-L125) [packages/puppeteer-core/src/common/CustomQueryHandler.ts#L134-L157](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/puppeteer-core/src/common/CustomQueryHandler.ts#L134-L157)
- getQueryHandlerAndSelector checks custom handlers before built-ins and parses P selectors before falling back to CSS; NodeLocator.create obtains the owning page's default timeout. — [packages/puppeteer-core/src/common/GetQueryHandler.ts#L30-L78](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/puppeteer-core/src/common/GetQueryHandler.ts#L30-L78) [packages/puppeteer-core/src/api/locators/locators.ts#L1063-L1072](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/puppeteer-core/src/api/locators/locators.ts#L1063-L1072)
- BrowserLauncher subclasses implement executablePath, defaultArgs, computeLaunchArguments, and cleanUserDataDir; PuppeteerNode's #getLauncher is the Chrome/Firefox factory. — [packages/puppeteer-core/src/node/BrowserLauncher.ts#L374-L394](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/puppeteer-core/src/node/BrowserLauncher.ts#L374-L394) [packages/puppeteer-core/src/node/PuppeteerNode.ts#L150-L162](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/puppeteer-core/src/node/PuppeteerNode.ts#L150-L162)
- CLI.run composes the shared yargs command table under an optional prefix; the puppeteer wrapper supplies a browsers prefix, configured cache, pinned builds, and disables cache-path override. — [packages/browsers/src/CLI.ts#L175-L207](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/browsers/src/CLI.ts#L175-L207) [packages/puppeteer/src/node/cli.ts#L16-L46](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/puppeteer/src/node/cli.ts#L16-L46)
- Angular collection.json maps schematic names to factories and schemas, while getCommandForRunner is the runner-selection table; TestSuites.json similarly maps automation-suite parameters to environment variables. — [packages/ng-schematics/src/schematics/collection.json#L3-L18](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/ng-schematics/src/schematics/collection.json#L3-L18) [packages/ng-schematics/src/builders/puppeteer/index.ts#L31-L49](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/packages/ng-schematics/src/builders/puppeteer/index.ts#L31-L49) [test/TestSuites.json#L36-L62](https://github.com/puppeteer/puppeteer/blob/2e45a3af43231cd658285e4da5e7f53e40f24edf/test/TestSuites.json#L36-L62)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
