orchestra/dusk-updater-api
A standardised API from Orchestra for fetching and downloading ChromeDriver binaries used by Laravel Dusk, simplifying driver version discovery and updates in test environments.
ChromeVersionFinder and ChromeDriverDownloader. It does not answer the larger build-vs-buy question, because the orchestration layer — CLI command, config, caching, platform detection, retries — is not shipped. Budget the wrapper as internal build work and treat the package as one ingredient, not the deliverable.laravel/dusk already resolves and downloads a compatible ChromeDriver via dusk:install / dusk:update. Adopting this creates a second source of truth for driver versions. The honest framing for prioritisation: this package only earns a sprint slot where the native path is genuinely blocked — air-gapped or proxy-restricted CI, pre-baked container images, multi-arch builds, or centralised driver caching across many pipelines.Consider it when all of the following hold:
wget a hardcoded, frequently stale ChromeDriver URL. This is the strongest case — dynamic version resolution is a real reliability gain and the surrounding wrapper barely changes.composer.json constraints against your PHP, Laravel, Guzzle, and Symfony Process versions rather than trusting release notes (the Guzzle 8 claim in v1.0.6 is exactly the kind of thing to confirm in the lockfile).Look elsewhere — or simply stay put — when:
php artisan dusk:install. Adopting this adds a dependency and removes no work.orchestra/dusk-updater and was deliberately removed; migrating from it is conceptual, not a drop-in swap.orchestra/sidekick since v1.0.2; Guzzle 8 and Symfony Process 8 support) without lockfile-conflict risk.For executives (one paragraph): This is a small, low-cost, easily reversible utility that could fix a recurring CI annoyance — end-to-end tests breaking whenever Chrome updates — but only for a narrow set of pipelines. It adds no new capability over what Laravel Dusk already does by default, and it comes with real but contained risk: a single maintainer, no published support or security policy, and a job that literally downloads executables. Recommendation: approve a short spike and a thin internal wrapper for one or two pipelines, run it in shadow mode alongside existing provisioning for a couple of months, and do not make it a platform standard until it has survived at least one Chrome major-version cycle.
For engineering: Mechanically trivial — Composer --dev dependency, PSR-4 classes, no service provider needed for basic use. The real cost is everything the package does not supply: no CLI, no config, no version-compatibility matrix, and a README that states the purpose and stops. You will design and own version comparison, download paths, caching, platform detection, and retry/timeout behaviour. Encapsulate the package behind an internal service or Artisan command so its API never leaks into pipelines, pin the package and transitive HTTP client versions, and keep the wrapper thin enough that swapping in direct Chrome-for-Testing JSON calls stays a contained change.
For security and platform review: Flag this explicitly. Before any adoption, confirm what is downloaded, over what transport, from which endpoint, and whether integrity is verified before execution — the README and release notes are silent. Also confirm behaviour on every architecture in the fleet (silent no-result on arm64, Windows, or Alpine/musl is a plausible failure mode) and whether the wrapper and Dusk are contending for the same vendor/laravel/dusk/bin path.
Decision ask: Approve as an evaluated option behind a project-owned wrapper, scoped to the pipelines that motivated the change. Do not adopt as a platform standard. Named owner for the wrapper is a precondition; a spike that resolves and runs the exact Chrome version used by the CI image is the first gate.
How can I help you explore Laravel packages today?