lullabot/php-webdriver
A PHP client for the WebDriver protocol (Selenium), maintained by Lullabot for browser automation and functional testing. Fork of php-webdriver with fixes suited to Drupal and Behat-based test suites.
Architecture fit. lullabot/php-webdriver is a maintained fork of the W3C WebDriver client library that Laravel Dusk and most PHP-based browser acceptance suites depend on transitively. Architecturally it sits at the outer edge of a Laravel application — it is a test-time dependency, not a runtime one. It will never appear in a production request path, a queue worker, or a scheduled job. That framing should drive the entire evaluation: the blast radius is confined to CI and local developer tooling, and the cost of a bad version is red pipelines, not outages.
Integration feasibility. High, with a caveat. The fork preserves the Facebook\WebDriver namespace and public API, so Composer-level substitution is straightforward via a replace/explicit version constraint. The caveat is that Laravel Dusk pins php-webdriver/webdriver (the upstream), not this fork — so adopting it means either overriding Composer resolution or accepting that Dusk ships upstream and this fork is only relevant for non-Dusk harnesses (notably Drupal-style functional testing, which is Lullabot's primary driver). Teams should confirm their actual harness before scoping any work here; there is a real chance this package is irrelevant to a given Laravel codebase.
Technical risk. Low for v2.0.7 specifically. The release removes curl_close(), a no-op since PHP 8.0 that is formally deprecated in 8.5 — a forward-compatibility hygiene fix, not a behaviour change. It also adds PHP 8.4 to the test matrix and repairs coverage reporting. No API surface changed, no constructor or method signatures touched, no deprecation notices introduced for consumers. The residual risk is structural rather than version-specific: a single-maintainer fork can lag upstream on security fixes and WebDriver protocol changes, and the curl_close() removal signals the fork is now tracking PHP's own deprecation schedule independently of upstream's release cadence.
Key questions.
php-webdriver/webdriver, and who owns the decision to re-converge?Stack fit. Composer-native, PSR-4, zero framework coupling — it does not require Laravel, and it does not conflict with it. It slots in alongside Dusk or replaces the upstream driver at the dependency-graph level. Because it is test-only, it belongs in require-dev, which keeps it out of production images and out of the deployed SBOM.
Migration path. For a greenfield or already-forked setup, adopt v2.0.7 directly. For a team currently on upstream php-webdriver/webdriver, the migration is a Composer-level swap: constrain to lullabot/php-webdriver: ^2.0.7, remove or override the upstream requirement, run composer update --with-dependencies, and let the lockfile reveal transitive conflicts. Expect friction only if another dev dependency hard-pins upstream with a narrow range — Dusk is the most likely offender.
Compatibility. PHP 8.4 is now explicitly tested; PHP 8.5 is unblocked by the curl_close() removal (though untested, so treat 8.5 as "should work" rather than "verified"). PHP 7.x support should be assumed dropped at the 2.x line — confirm before adopting in a legacy repo. WebDriver protocol compatibility is unchanged from 2.0.6.
Sequencing. (1) Confirm harness relevance. (2) If relevant, add the constraint on a feature branch and run the full suite in CI. (3) Land as a patch bump in a routine dependency-refresh window — this does not merit a dedicated deploy or change advisory. (4) If PHP 8.5 is on the roadmap, this release should precede that upgrade, not follow it.
Maintenance. Negligible. A patch bump with no API change requires no code edits, no test rewrites, and no documentation updates. Ongoing cost is periodic dependency review, the same as any dev dependency.
Support. Single-maintainer project (Alex Pott / Lullabot). Responsiveness on this release looks good — three PRs merged, including a genuine forward-compat fix ahead of PHP 8.5's release. That is a positive signal for a fork, which often decay. Still, there is no commercial support contract and no LTS commitment; internal ownership should be a named individual, not a team.
Scaling. Irrelevant in the traditional sense — this runs on CI executors and developer laptops, not on application infrastructure. The only scaling dimension is CI wall-clock: browser test suites are the slowest part of most Laravel pipelines, and this package neither helps nor hurts that. If the suite is already a bottleneck, that is a separate, larger initiative.
Failure modes. Three realistic ones. (a) Composer resolution conflict — the most probable; surfaces immediately at install time, cheap to diagnose, cheap to fix. (b) Silent divergence — the fork's WebDriver client drifts from upstream in ways that break against newer browser/driver versions (Chrome, geckodriver); this is latent, appears as flaky or failing E2E tests, and is expensive to trace. (c) Fork abandonment — Lullabot stops maintaining it, leaving the team pinned to a stale client with no upgrade path but a forced migration. Mitigation for (b) and (c) is the same: keep the upstream constraint documented and reversible, and review the fork's activity on a semiannual cadence.
Ramp-up. Near zero for developers — the namespace and API are identical to upstream, so existing familiarity transfers directly. The ramp-up cost sits with whoever owns dependency governance: they need to understand why the fork exists in this codebase and what the exit criteria are. That context should be captured in the repo, not in someone's head.
Bottom line. v2.0.7 is a routine, low-risk maintenance release with a modest forward-compatibility benefit. It does not change the strategic picture for this dependency, but it does justify a low-priority bump and, if the fork is adopted, warrants a documented exit strategy given the single-maintainer risk.
How can I help you explore Laravel packages today?