wp-cli/server-command
WP-CLI Server Command adds the wp server command, letting you launch PHP's built-in web server to run WordPress locally without Apache or Nginx. Just run wp server and get a working dev site, with options for host, port, docroot, and router. Ideal for quick local development and testing.
Architecture fit. This is not a Laravel or Composer library — it is a WP-CLI command package that boots PHP's built-in web server (php -S) against a specific WordPress installation. It has no place in a Laravel application's dependency graph and cannot be composer required into vendor/ as application code. Its architectural relevance is limited to the narrow case where the estate runs WordPress alongside Laravel (marketing sites, content/headless CMS backends, legacy blogs) and needs an ephemeral, per-install preview server. In a pure Laravel estate, fit is effectively zero and the correct TPM recommendation is "do not adopt."
Integration feasibility. Feasible and low-effort as developer tooling: wp package install wp-cli/server-command, then wp server --host=localhost --port=8080 inside a WordPress docroot. It requires WP-CLI 2.x and a PHP CLI binary, both of which a Laravel/PHP shop already has. Where it becomes genuinely useful is CI: a single command spins up a WordPress instance for smoke tests or acceptance tests without provisioning nginx/Apache or Docker Compose web containers. There is no runtime integration surface — no service provider, no config publishing, no events.
Technical risk.
PHP_CLI_SERVER_WORKERS mitigates but does not make this a production web server.Key questions.
Stack fit. Treat this as a sidecar CLI tool, never a library. It lives in the WordPress toolchain layer, parallel to — not inside — the Laravel stack. Laravel developers interact with it only through a documented make wp-serve / composer wp:serve wrapper script so the WP-CLI invocation is abstracted.
Migration path. Nothing to migrate. Adoption is additive: install the package into an existing WP-CLI phar environment (~/.wp-cli/packages/) or, preferably, bake it into a shared dev container image. Existing nginx/Apache/Valet workflows remain the default; this becomes an opt-in fast path.
Compatibility. Verify against the PHP minor versions in our base images (8.2/8.3) and WP-CLI 2.10+. Confirm the package's router-script handling supports pretty permalinks, since the built-in server does not emulate .htaccess rewrites — this is the most common surprise. It is not compatible with Laravel Sail, Octane, or FrankenPHP workflows; document that the two toolchains are separate.
Sequencing.
wp server with our plugin set; explicitly test loopback/cron behaviour.Maintenance. Near-zero if pinned and confined to dev/CI images; meaningful if left floating. Budget a recurring half-day per quarter to review upstream releases and WP-CLI compatibility. Renovate/Dependabot should watch the pinned tag, not an unversioned install.
Support. Community-only: GitHub issues with a small maintainer pool and ~68 stars. There is no vendor SLA and no internal team that will naturally own it. Assign explicit ownership to whichever team owns the WordPress toolchain; if no such team exists, that is a reason to defer adoption rather than absorb an orphan.
Scaling. Not applicable in the traditional sense — it is a per-developer, single-process dev server. CI concurrency is the only real scaling concern: each job needs a unique port or an ephemeral container, and the single-threaded default limits parallel test throughput. Cap at a handful of concurrent WordPress CI jobs before considering a containerized alternative.
Failure modes.
Ramp-up. Low for any PHP developer — one command, one flag set, roughly an hour to fluency. The real learning curve is WordPress-specific (docroot layout, wp-config.php expectations, plugin interactions), not the package itself. Provide the wrapper script and runbook up front so developers never need to read the upstream README.
TPM recommendation. Approve as a scoped, pinned, dev/CI-only tool contingent on the WordPress-inventory question and a source-verification step; reject any proposal to treat it as part of the Laravel application stack.
How can I help you explore Laravel packages today?