# Extension points — webdriverio/webdriverio

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

# Extension points — webdriverio/webdriverio

Scanned commit dbf0f497130676040ce4212d9cf6459adfe16c42 (2026-10-01). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

Extension is built into both user configuration and package internals. Name-based plugin loading supports official and community packages, while service activation distinguishes launcher and worker responsibilities. Command barrels and protocol descriptor tables construct client APIs. Custom locators, framework adapters, reporters, automation drivers, and compiler plugins provide additional integration seams.
- initializePlugin resolves scoped or absolute imports first, then @wdio/<name>-<type>, then wdio-<name>-<type>, and throws an actionable error when no candidate loads. — [packages/wdio-utils/src/initializePlugin.ts#L15-L51](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/wdio-utils/src/initializePlugin.ts#L15-L51)
- Services accept existing hook objects, classes, or package names; package launcher exports run in the parent, and shouldLoad(config, caps) can prevent a package from being imported into workers. — [packages/wdio-utils/src/initializeServices.ts#L23-L69](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/wdio-utils/src/initializeServices.ts#L23-L69) [packages/wdio-utils/src/initializeServices.ts#L121-L157](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/wdio-utils/src/initializeServices.ts#L121-L157)
- Browser and element commands enter their scopes through export barrels; applyScopePrototype enumerates those exports and excludes names listed in IGNORED_COMMAND_FILE_EXPORTS. — [packages/webdriverio/src/commands/browser.ts#L1-L44](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/webdriverio/src/commands/browser.ts#L1-L44) [packages/webdriverio/src/commands/element.ts#L1-L20](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/webdriverio/src/commands/element.ts#L1-L20) [packages/webdriverio/src/utils/index.ts#L31-L42](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/webdriverio/src/utils/index.ts#L31-L42)
- addCommand and overwriteCommand are propagated across multiremote instances; runner session replacement also preserves custom and overwritten commands registered against the preliminary stub. — [packages/webdriverio/src/index.ts#L182-L213](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/webdriverio/src/index.ts#L182-L213) [packages/wdio-runner/src/index.ts#L373-L400](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/wdio-runner/src/index.ts#L373-L400)
- addLocatorStrategyHandler stores named functions in a strategies Map, rejects duplicate names, and propagates registrations to multiremote constituent instances. — [packages/webdriverio/src/utils/index.ts#L1086-L1105](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/webdriverio/src/utils/index.ts#L1086-L1105)
- automationProtocol selects the Driver factory or protocol stub; protocol getPrototype converts endpoint/method descriptor entries into command functions rather than hand-writing each HTTP method. — [packages/webdriverio/src/utils/driver.ts#L19-L40](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/webdriverio/src/utils/driver.ts#L19-L40) [packages/webdriver/src/utils.ts#L337-L343](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/webdriver/src/utils.ts#L337-L343) [packages/wdio-protocols/src/protocols/webdriver.ts#L953-L965](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/wdio-protocols/src/protocols/webdriver.ts#L953-L965)
- Local framework adapters load through initializePlugin(config.framework, 'framework') and expose init/run behavior; reporter configuration accepts custom classes or tuples with options and supports asynchronous synchronization. — [packages/wdio-runner/src/index.ts#L280-L289](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/wdio-runner/src/index.ts#L280-L289) [packages/wdio-runner/src/index.ts#L240-L246](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/wdio-runner/src/index.ts#L240-L246) [packages/wdio-runner/src/reporter.ts#L174-L198](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/wdio-runner/src/reporter.ts#L174-L198) [packages/wdio-runner/src/reporter.ts#L204-L235](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/packages/wdio-runner/src/reporter.ts#L204-L235)
- The compiler has package-specific esbuild plugin tables, including protocol type generation, create-wdio template copying, and webdriverio external scripts; BiDi generation derives TypeScript definitions and command methods from CDDL. — [infra/compiler/src/index.ts#L58-L80](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/infra/compiler/src/index.ts#L58-L80) [scripts/bidi/index.ts#L33-L50](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/scripts/bidi/index.ts#L33-L50) [scripts/bidi/index.ts#L61-L109](https://github.com/webdriverio/webdriverio/blob/dbf0f497130676040ce4212d9cf6459adfe16c42/scripts/bidi/index.ts#L61-L109)

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)
