yangusik/symfony-spawn
Symfony Spawn is a lightweight bundle for launching and managing background processes in Symfony applications. It provides a simple service-based API to run commands asynchronously and keep long-running tasks out of the request cycle.
HttpServerConfig::setWorkers(). This means you can now realistically evaluate replacing external process managers (Supervisor + multiple php-fpm/Octane instances) with an in-process worker pool for long-running or parallel workloads — relevant to any roadmap item touching queue throughput, background jobs, report generation, or fan-out API aggregation.setWorkers() refactor signals intent to align with Symfony's HTTP server config conventions, which lowers the cost of standardizing on one config surface across services.Consider it when all of the following hold:
HttpServerConfig::setWorkers()), matching how you already configure your HTTP server/FrankenPHP/RoadRunner setup.Look elsewhere when:
Recommendation: treat v0.2.3 as an evaluation-grade candidate. Pilot behind an internal abstraction, benchmark against your current Supervisor/Octane baseline, and avoid committing a public roadmap until at least a v0.5 or 1.0 with sustained release cadence.
For executives (one paragraph): We're tracking an open-source PHP package, symfony-spawn, that lets our Laravel/Symfony services run work in parallel inside a single process instead of paying for extra containers and process managers. Version 0.2.3 fixed its core multi-threading capability and standardized how worker count is configured — the two things that previously made it unusable. It's early-stage (pre-1.0, small maintainer base), so the right move is a time-boxed pilot on one CPU-bound workload to measure throughput-per-container and cost-per-job against our current setup. If the pilot shows savings, we get a cheaper scaling story; if not, we lose a few engineering days. Recommended decision: approve a scoped pilot, not adoption.
For engineering leadership: The notable change is that the multi-threaded runner now actually works (thread closure handling plus cache warmup), and the worker pool is driven by HttpServerConfig::setWorkers() — meaning concurrency becomes a single, familiar config knob rather than bespoke process orchestration. This is the first release where a real benchmark is meaningful. Risks: v0.x API churn (a refactor already landed in this release), dependency on PHP threading extensions, observability gaps versus Horizon/Supervisor, and bus-factor risk with first-time contributor activity. Mitigation: implement behind an internal TaskRunner interface, pin 0.2.3, and require a documented fallback to our existing worker fleet.
For the engineering team: Don't wire this into production paths yet. Build a spike that exercises the worker pool with setWorkers() against a representative CPU-bound job, measure latency percentiles and memory under sustained load, and confirm your PHP build supports the threading model. Capture cold-start improvement from cache warmup separately — that number alone may justify further investigation even if parallelism doesn't.
Ask: Two engineer-days for the spike plus a benchmark write-up, decision review at the next platform sync.
How can I help you explore Laravel packages today?