Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Bundle Laravel Package

php-quartz/bundle

PHP Quartz Bundle brings Quartz-style job scheduling to Laravel and PHP applications, giving you a structured way to define, schedule, and manage recurring tasks. It helps organize background jobs and time-based workflows while reducing reliance on hand-written cron entries.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package is a Symfony bundle, not a Laravel package, despite being evaluated for a Laravel/PHP context. That distinction is the single most important architectural finding. A Symfony bundle registers itself through Bundle classes, DependencyInjection\Extension config trees, and compiler passes — none of which Laravel's service container or bootstrap/app.php lifecycle understands. Laravel can import individual Symfony components (Console, EventDispatcher, DependencyInjection are already in vendor/), but it cannot consume a bundle's auto-wiring, configuration schema, or kernel boot hooks. The practical consequence: "integration" here means writing an adapter layer that manually instantiates the core php-quartz scheduler, reproduces the bundle's config semantics in config/quartz.php, and drives it from a Laravel console command or the native scheduler. The bundle's advertised value — "minimal boilerplate" — is largely forfeited in a Laravel host.

Integration feasibility. Low to moderate. The core scheduling concepts (jobs, triggers, listeners, cron-style expressions) are portable PHP and would survive the transplant; the bundle glue would not. Estimated effort is a small spike (1–2 days) to confirm the core library installs and runs under the target PHP version, followed by genuine adapter work if the spike passes. The larger feasibility question is whether a "Quartz-style" scheduler is meaningful in PHP at all: Quartz's defining strengths are a persistent JDBC job store, clustered failover, and a long-lived scheduler daemon. PHP has no equivalent resident process by default — jobs execute inside a console invocation or web request, so in-memory trigger state, misfire handling, and recovery semantics either don't exist or must be reimplemented with a database and locks. If the core package does not ship a durable store, the package is essentially a cron-expression runner with extra abstraction.

Technical risk. High, and concentrated rather than diffuse:

  • Archived and dormant since the 2019-06-10 release; [READ-ONLY], 2 stars, 0 dependents. No security patching, no PHP 8.x compatibility guarantees, no issue triage. Any defect becomes yours.
  • Era mismatch. A 2019 Symfony bundle targets Symfony 3.x/4.x and PHP 7.x idioms — likely Symfony\Component\Console APIs, possibly deprecated container patterns, possibly PSR-11 gaps. Laravel 9+ requires PHP 8.0+, and Laravel 10/11 require 8.1/8.2. Compatibility is unverified and plausible-to-unlikely without patching.
  • Zero ecosystem signal. No dependents means no field-tested failure modes, no community answers, no third-party fixes. The TPM should treat this as an internal fork candidate, not a dependency.
  • Semantic risk. Marketing language ("Quartz-style," "lifecycle," "listeners") may overstate durability. Verify before trusting it with anything revenue-affecting.

Key questions to resolve before committing:

  1. Does the core php-quartz library provide a persistent job store (database-backed triggers, misfire policies), or is state purely in-memory per process?
  2. What are the composer.json PHP and Symfony constraint ranges, and does the code parse/run under PHP 8.1+?
  3. How are jobs executed — fork/pcntl, subprocess, or synchronous in-process? This determines whether one slow job blocks the schedule.
  4. Is there concurrency control (locks, withoutOverlapping equivalent) for multi-instance deployments?
  5. What does the bundle actually add over the core library — config tree, DI aliases, console commands — and can that be reproduced in ~200 lines of Laravel service-provider code?
  6. Who owns the fork if we adopt it, and what is the maintenance budget?

TPM read: this is not a "should we install it" decision; it's a "is there a scheduling model in the core library worth porting" decision. Default recommendation is to prototype against Laravel's native scheduler plus dragonmantank/cron-expression first, and only pursue php-quartz if the spike demonstrates a capability the native stack genuinely lacks.

Integration Approach

Stack fit. Poor as delivered, workable only as a source of ideas or an internal fork. Laravel's scheduling surface — app/Console/Kernel.php or routes/console.php, Schedule::command(), ->cron(), ->withoutOverlapping(), ->onOneServer(), ->runInBackground() — already covers the overwhelming majority of what a Quartz-style abstraction offers, with first-party support, active maintenance, and broad operational familiarity. Adopting php-quartz/bundle means importing a foreign lifecycle model and then reconciling it with Laravel's, which is usually worse than either alone.

Migration path (if pursued). Do not attempt to install the bundle. Instead:

  1. Install the core php-quartz library only, in an isolated spike branch.
  2. Write a QuartzServiceProvider that binds the scheduler as a singleton, reads config/quartz.php, and registers jobs from a registration array — replicating the bundle's DI extension by hand.
  3. Expose a single artisan command (quartz:run) as the execution entrypoint, and register it in Laravel's scheduler with ->everyMinute()->withoutOverlapping() so Laravel owns cadence and mutual exclusion, and Quartz owns only job dispatch.
  4. Bridge logging and events to Laravel's Log and event dispatcher so failures surface in existing observability.

Compatibility. Treat PHP 8.1+ and Laravel 10+ as unsupported until proven otherwise. Expect to patch composer.json constraints, replace deprecated Symfony calls, and possibly fix return-type signatures for PHP 8. Budget for a maintained fork under the org's namespace with a pinned branch, not a ^1.0 constraint on Packagist.

Sequencing.

  • Week 1 — Feasibility spike. Core library install, one job end-to-end under PHP 8.x, document what breaks. Kill criteria: fails to run, or requires more than trivial patching.
  • Week 2 — Capability gap analysis. Compare against native Laravel scheduler on: persistence, misfire handling, overlap prevention, timezone/DST, backfill, multi-node. If native wins on ≥80%, stop.
  • Week 3 — Adapter build (conditional). Service provider, config, console command, event bridge, fork published internally.
  • Week 4 — Pilot. One non-critical recurring job in staging for two weeks, with alerting on missed runs.
  • Then decide on broader rollout. Do not sequence this ahead of any active delivery commitment; the ROI is speculative.

Alternative to state explicitly in the decision record: Laravel native scheduler + cache/database locks for onOneServer, plus a jobs audit table for run history, delivers most of the "Quartz-style" benefit at near-zero maintenance cost. If the driver is distributed, durable, resumable scheduling, the honest answer is a queue-backed system (Laravel Queues with delayed dispatch, or a dedicated scheduler service) rather than a 2019 PHP port of a Java library.

Operational Impact

Maintenance. This is the dominant cost. Archived in 2019 with no release since means every future PHP or Laravel upgrade is a manual compatibility project owned by your team. Realistically: one internal maintainer, a fork, a quarterly dependency-review line item, and a standing risk that a PHP minor release breaks assumptions in 5-year-old container code. Compare against near-zero for the native scheduler. The 2-star / 0-dependent profile also means no upstream path for bug reports — the fork is permanent.

Support. None. No vendor, no active maintainers, no community. Internal escalation is the only escalation. Documentation is a short description plus a repository README; expect institutional knowledge to concentrate in one or two engineers, which is itself a bus-factor risk.

Scaling. Constrained by PHP's execution model. Concurrency is bounded by how jobs are dispatched — if synchronous, a long job delays subsequent triggers; if forked, you inherit pcntl portability issues (not available on Windows, awkward in some container/FPM environments). Horizontal scaling requires distributed locking that the bundle likely does not provide; you would add onOneServer semantics yourself via Laravel's cache locks or a database advisory lock. Vertical scaling is bounded by per-process memory in long-running console commands — a known leak vector for scheduler loops. If job volume grows beyond a few hundred executions per hour, the abstraction becomes a bottleneck you must instrument and probably replace.

Failure modes to design for. Missed executions during deploys and restarts (no daemon, no catch-up unless explicitly implemented); overlapping runs across multiple app instances without locking; silent job failures when no listener is wired to the event dispatcher; timezone and DST drift if the core uses naive date handling; trigger drift from fixed-interval loops accumulating execution time; and unrecoverable scheduler state if persistence exists but the schema is undocumented. Each of these needs an explicit mitigation — dead-man's-switch alerting on expected job cadence, an execution audit table, and overlap guards — and each mitigation is work the native scheduler gives you largely for free.

Ramp-up. Moderate but lopsided. The scheduling concepts are familiar to any engineer who has used cron or Sidekiq; the friction is Symfony bundle conventions (DI extensions, compiler passes, tag-based registration) applied inside a Laravel codebase where no one expects them. Expect 2–3 days for a mid-level engineer to become productive in the adapter, plus ongoing context loss every time ownership changes. Documentation burden falls entirely on the adopting team, and the sparse upstream docs mean the fork's README becomes the real spec.

TPM recommendation. Score of 0.155 with 2 stars, 0 dependents, and an archived 2019 release is a fair reflection. Fund a timeboxed spike only to close the question, default to Laravel's native scheduler, and require a documented capability gap before any adoption. If a gap is confirmed, adopt the core library under an internal fork — never the bundle — and assign a named owner with an explicit maintenance budget before the first production job runs.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
frankyso/ipaymu
3mdikram/worldmoneywords
snowsoft/config
itmosoft/laravel-subscriptions
larva/laravel-ai-qwen
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox
pairus/product-data
fayne/laravel-filament-cms-core