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

Cron Bundle Laravel Package

ite/cron-bundle

ite/cron-bundle is a PHP package for defining, scheduling, and managing recurring cron jobs. It lets you configure scheduled tasks and run them reliably without manual crontab edits, simplifying background job automation.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit — poor. ite/cron-bundle is packaged as a Symfony2 Bundle, which is a fundamentally different extension model from Laravel's service-provider architecture. Laravel has no Bundle class, no DependencyInjection\Extension, no compiler passes, and no YAML service-definition pipeline. Leveraging this package in a Laravel codebase is not an "install and configure" exercise; it is a port. Every integration point the bundle relies on — the container, the event dispatcher, the console application, configuration loading — maps to a Laravel equivalent that does not exist by default, and each would need a hand-written adapter or a partial reimplementation.

Integration feasibility — low, and the effort is hard to justify. The functional value proposition (register cron-scheduled tasks, evaluate due times, dispatch execution) is already covered natively in Laravel by the Scheduler (app/Console/Kernel.php / routes/console.php in newer versions) built on dragonmantank/cron-expression, which is a mature, widely depended-upon library with first-class Laravel support. Any capability in this bundle would have to be reimplemented on top of primitives Laravel already ships. The realistic integration path is therefore not integrating the bundle but mining it for design ideas and reimplementing them in idiomatic Laravel.

Technical risk — high, concentrated in provenance and maintenance. Symfony2 reached end-of-life years ago, so the bundle's own dependency constraints almost certainly pin PHP and Symfony versions well below what any current Laravel release supports (Laravel 10/11 require PHP 8.1+, and Composer will reject the install on version constraints alone). The package signal is close to zero: 1 star, 0 dependents, opportunity score of ~20, and an overall score of 0.005. Zero dependents means no production validation, no downstream bug reports, and no evidence that the cron-evaluation logic has been exercised against real-world edge cases. There is also no implied security-response channel — a CVE in a transitive Symfony2 component would leave you stranded.

Key questions for the maintainer / sponsor:

  1. What is the bundle's actual PHP and Symfony version constraint set, and does it resolve at all against our Composer baseline?
  2. Which specific behaviors do we need that Laravel's Scheduler does not already provide — is there a concrete gap, or is this a "not invented here" pull?
  3. Is the package licensed permissively enough for a fork-and-own model, and are we prepared to own that fork permanently?
  4. Does it persist job state (Doctrine entity, filesystem) and what is the schema/licensing of that state?
  5. What is the overlap-protection model — per-host lock, shared store, or none?

Integration Approach

Stack fit — incompatible by default. The bundle assumes a Symfony2 kernel boot sequence and a services.yml-driven container. A Laravel application boots a service provider stack; the closest analogue is a package service provider that manually instantiates bundle classes, injects Laravel's Illuminate\Console\Application in place of Symfony's Console\Application, and replaces Symfony's EventDispatcherInterface with Laravel's dispatcher. That adapter layer is bespoke code with no upstream support, which converts a third-party dependency into internal surface area on day one.

Migration path — recommend reimplementation over integration. The pragmatic sequencing is:

  1. Spike (1 week max): attempt a Composer install in a throwaway Laravel skeleton purely to establish whether the dependency graph resolves. Expect failure; the outcome is documentation, not a working install.
  2. Capability extraction: enumerate the scheduling semantics the bundle provides (due-time evaluation, task registration, run history, locking) and map each to a Laravel-native answer — schedule() definitions, withoutOverlapping(), onOneServer(), runInBackground(), ->timezone().
  3. Gap fill: for anything genuinely missing, implement it as a thin internal package depending on dragonmantank/cron-expression (the same library Laravel's scheduler uses), not on this bundle.
  4. Decommission: do not carry a Symfony2 shim into production.

Compatibility — assume friction. No PSR-11/PSR-14 alignment is likely given the Symfony2 era; the bundle predates the symfony/contracts split. Timezone and DST handling in cron evaluation is a classic correctness trap and there is no test-coverage signal here to suggest it was addressed. Plan for a full static review of the cron-matching logic if any part of it is copied.

Sequencing if integration is mandated: isolate behind a narrow internal Scheduler interface first, wrap the bundle as one implementation behind that interface, and keep a native implementation alongside it so the bundle can be removed without touching call sites. Do not let bundle types leak into application code.

Operational Impact

Maintenance — you inherit the package. With no upstream activity and zero dependents, there is no realistic expectation of fixes, PHP-version bumps, or security patches. Every future PHP upgrade becomes a fork-maintenance task on code the team did not write. This is the dominant lifecycle cost and it recurs annually.

Support — effectively none. There is no vendor, no active maintainer community, and no issue triage. Internal on-call becomes the sole escalation path for a component with no documentation depth. Budget for a design document written from reading the source, because tribal knowledge will not exist.

Scaling — a real concern. Cron scheduling in a multi-node deployment requires a shared lock or a leader-election mechanism to prevent duplicate execution. If the bundle's locking is per-process or per-host, horizontal scaling will silently double-fire tasks. Verify overlap semantics before any multi-instance rollout; onOneServer() with a shared cache store is the native answer and should be the default posture.

Failure modes to instrument for:

  • Silent non-execution — the worst case for schedulers; no run means no logs and no alert. Require a dead-man's-switch heartbeat per scheduled job regardless of implementation.
  • Duplicate execution — no cross-node lock, or lock TTL shorter than job runtime.
  • Long-running overlap — no withoutOverlapping equivalent, leading to unbounded concurrency and resource exhaustion.
  • Drift and DST errors — naive date() comparisons around timezone transitions cause skipped or doubled runs.
  • Cron-expression parse failures — a malformed expression that throws at boot versus at evaluation time, with differing blast radius.
  • State-store coupling — if job state lives in a Doctrine-managed table, introducing Eloquent or a second ORM into the same database is ongoing operational friction.

Ramp-up — moderate to high for the wrong reasons. An engineer must learn a decade-old Symfony2 DI idiom to reason about a component whose entire job is already handled by framework-native APIs they likely know well. The knowledge acquired has no transfer value elsewhere in the stack, which is a poor return on onboarding time.

Recommendation. Do not adopt ite/cron-bundle in a Laravel context. The architecture mismatch is structural rather than cosmetic, the maintenance liability is permanent, and the functional gap it would fill does not exist — Laravel's Scheduler plus dragonmantank/cron-expression covers the surface area with active maintenance and a large dependent base. If the team has a specific scheduling capability that Laravel genuinely lacks, the correct move is a small internal package on top of cron-expression, scoped to that gap, and reviewed against the edge cases listed above. Treat this repository as a reference implementation to read, not a dependency to ship.

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.
jinas/dhivatar
store-doc/laravel-storage-driver
plus-it/laravel-translation-manager
diephp/perhaps
diephp/telegraph
osmaviation/spreadsheet
microsoft/fluentui-system-icons
mmccook/php-json-canonicalization-scheme
middlewares/firewall
qubiqx/montapacking
nyoncode/laravel-package-console
pnscripts/filament-broadquill-lite
pnscripts/laravel-sentfold-lite
vleap/mx-sdk-laravel-internal
twidpay/utils
htetmyathlaing/scout-elasticsearch-driver
artisan-toolbox/front-awesome
ls/client-assistant
users-au/laravel-client
cgv/localized-resource