orchestra/testbench-core
Testbench Core is a testing framework for Laravel package development. It boots a Laravel application inside your package repository, letting tests run Artisan commands, migrations, factories, and routes, with releases matching Laravel 6 through 13.
orchestra/testbench (standard), testbench-browser-kit (CSS-selector interaction, no JS), testbench-dusk (real Chrome, JS), and workbench (local preview of the package). That's a clean ladder: pick the lowest rung that covers your risk. Choosing Dusk when BrowserKit suffices is a recurring CI cost decision.orchestra/testbench, which pulls Core in. It is not a signal of weak adoption. Likewise, "opportunity 55.25" reads as infrastructure plumbing: high leverage, low differentiation, which is exactly what you want from a test harness.Adopt when:
Adoption guidance: depend on orchestra/testbench (or testbench-browser-kit / testbench-dusk), not orchestra/testbench-core directly. Core is the engine; the meta-package is the supported entry point. Declaring Core directly invites version-skew bugs and bypasses the compatibility guarantees. Keep it in require-dev only — production runtime footprint should be zero.
Look elsewhere when:
RefreshDatabase, actingAs, HTTP tests) already boots the app; Testbench adds indirection with no payoff.testbench-dusk, not Core. If you need cross-browser or Selenium-grid scale-out, evaluate a dedicated E2E stack instead.Risk to track: tight lock-step with Laravel and PHPUnit means the harness inherits their release cadence. Blast radius is CI-only, not production, which keeps this a low-severity dependency — but a broken harness blocks all package merges, so pin versions and upgrade deliberately.
To executives (one paragraph): Testbench Core is the standard, free, MIT-licensed test harness that lets our Laravel packages be tested as if they were running inside a real application. It is a development-only dependency with zero production footprint. Adopting it instead of building our own removes a recurring maintenance cost, keeps package code covered as we extract shared components, and — critically — it already supports Laravel through 13.x, so it will not gate our framework upgrade roadmap. The main cost is discipline: it upgrades in lock-step with Laravel, so we treat those as one planned work item.
To engineering leadership: this is developer-productivity infrastructure, not a product feature. Value shows up as lower cost per package, preserved integration coverage after extraction, and faster onboarding onto package repos. Risk is concentrated in CI availability, not production, and is mitigated by pinning versions and standardizing on orchestra/testbench rather than the core package.
To engineers: use the meta-package, keep it in require-dev, choose the lowest rung of the ladder that covers your risk (Testbench → BrowserKit → Dusk), and expect to upgrade it alongside Laravel and PHPUnit majors. Do not fork or wrap Core; if you need behavior it doesn't provide, that's a signal you're testing at the wrong layer.
What I would not claim: that this differentiates the product, improves end-user experience, or reduces runtime risk. It buys engineering leverage and upgrade optionality — nothing more, and that is enough to justify a dev dependency.
How can I help you explore Laravel packages today?