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

rikudou/cron-bundle

A lightweight Symfony bundle for defining and managing cron jobs in PHP. Register scheduled tasks as services, trigger them from a single system cron entry, and keep recurring application jobs like cleanup, sync, and notifications organized and easy to maintain.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The dominant finding is a framework mismatch that should gate everything downstream: rikudou/cron-bundle is a Symfony 6 bundle, not a Laravel package. Its design assumes Symfony's bundle bootstrapping, service container, and symfony/console command registration to discover and dispatch jobs marked with cron expressions. None of that machinery exists in a Laravel application, so there is no configuration surface to install into. What is portable is the underlying idea — persist or declare a cron expression alongside a command, evaluate every minute, dispatch only what is due — and that idea is already implemented natively by Laravel's Illuminate\Console\Scheduling\Schedule. The correct architectural read is therefore: not a candidate dependency, but a compact reference for a dynamic, config-driven scheduling layer.

Integration feasibility. Low as shipped, and the feasible paths are all re-implementations rather than integrations. In descending order of effort: use dragonmantank/cron-expression directly (already present transitively through Laravel's scheduler) and skip the bundle; extract the expression-evaluation and due-job-selection logic into an internal helper, accepting ownership; or run the Symfony bundle as a sidecar CLI process — operationally expensive and architecturally awkward for the small amount of logic involved. Only the first option is realistic for a Laravel codebase.

Technical risk. High relative to delivered value. The risk signals are all supportability signals rather than code-quality signals: three GitHub stars, zero dependents, a single maintainer, and no evidence of an external review surface. For a scheduler specifically, that combination is more dangerous than usual because failures are silent and time-based — a job that never fires produces no exception, no alert, and no log line unless someone added one. The MIT license and small code surface make a fork-and-vendor strategy technically viable, but that converts a dependency decision into a maintenance commitment. Before any commitment, treat the following as unresolved: whether overlap protection exists and what lock backs it; how timezones, DST transitions, and missed runs after downtime are handled; whether exceptions are logged, retried, or swallowed; the supported PHP/Symfony version matrix and whether Symfony 7 is on the roadmap (it is versioned to Symfony 6, so it becomes an upgrade liability); and whether any test suite or CI exists. Any of these answering badly should close the evaluation outright.

Integration Approach

Stack fit. Poor for Laravel. Laravel ships a first-class scheduler with overlap protection (withoutOverlapping), onOneServer support, lifecycle hooks, output logging, and a mature battle-tested expression parser underneath. Nothing in this package's description identifies a capability missing from that. Even setting the framework mismatch aside, adopting it would be a net capability loss. In a genuine Symfony 6.3+ environment the calculus is also negative, because the first-party symfony/scheduler component is maintained by the core team and covers the same recurring-message ground with a real support path.

Migration path. There is nothing to migrate from — the decision is binary adoption, and the recommendation is no. Proposed path if the team wants certainty rather than a documentation-based verdict: stand the bundle up in a throwaway Symfony 6 app for two to three days purely to read its scheduling model through working code, then port only the mechanics we actually want — expression storage, per-minute due-job filtering, timezone handling, one lock per job — into a Laravel-native job class. Do not introduce the bundle as a dependency at any stage. The scope of the port is roughly 150–300 lines, which is the whole of what the package provides.

Compatibility. The package targets Symfony 6 and PHP 8.x. Laravel 10 and 11 depend on Symfony components such as console and http-foundation, so there is version-level overlap, but that is a shared-dependency coincidence, not an integration surface. Installing a Symfony bundle into Laravel registers no service provider and performs no bundle bootstrapping; the practical ceiling is calling classes manually, at which point we are maintaining a shadow scheduler for no gain.

Sequencing.

  1. Capability gap analysis against Laravel's native scheduler — one to two days, and expected to conclude there is no gap.
  2. If an unexpected gap appears, run an isolated read-only spike of the bundle in a throwaway Symfony app — two to three days.
  3. Decision gate: build internally, fork-and-vendor, or close as not-applicable.
  4. If anything is reused, pin and vendor the version, wrap it behind an internal interface, and add integration tests for overlap, timezone/DST behavior, and missed-run catch-up before it touches a production schedule.

Operational Impact

Maintenance. In practice the adopting team owns the code. A single-maintainer project with no dependents means no proxy for health — no downstream consumers exercising upgrades, no ecosystem pressure to keep releases clean. Budget for vendoring the pinned version and periodic manual review of upstream commits; do not plan around semantic-versioned releases or a security-response process, because neither is evidenced.

Support. Effectively nonexistent beyond reading the source. No forum, no issue-triage expectation, no documented upgrade guides, no community to consult at 2 a.m. Every production incident routes to our own on-call. That is acceptable for a well-understood internal parser and unacceptable for an inherited third-party one in a privileged execution path — the scheduler runs arbitrary registered commands, so it sits inside the blast radius of anything it invokes.

Scaling. Cron-style scheduling is inherently single-host unless paired with a distributed lock. Nothing in the package description suggests multi-node coordination, so horizontally scaling the app tier would require adding a lock backend — database advisory lock or Redis — and probably a dedicated scheduler process, which is net-new work the package does not absorb. This is solvable and is exactly what Laravel's onOneServer() already gives us.

Failure modes. The high-risk set for any scheduler, each of which must be verified rather than assumed from documentation: overlapping runs when a job outlasts its interval; silent failure with no alerting hook; timezone and DST drift for wall-clock-pinned jobs across tenants; missed runs during deploys or host restarts with no catch-up semantics; and clock skew across nodes. Because external testing is absent, every one of these is an in-house validation item. A missed schedule is the worst failure class to inherit — it is invisible until a downstream consumer notices missing data, usually days later, with no trace to diagnose.

Ramp-up. Trivially low for a developer — small codebase, familiar cron concepts, readable end to end in under an hour. The real cost is due-diligence overhead, which lands on the TPM: the effort is not in learning the tool but in proving it is safe to depend on, and the evidence base needed to do that does not exist here. Weighed against a native scheduler that already covers the same ground on a mature dependency, the correct record is evaluated and not adopted, cited as background research into alternative cron-scheduling designs and as a pattern reference for the internal build.

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.
takashato/laravel-vietqr
aitor24/laralang
kraenzle-ritter/entity-relations
dindigital/din-image
pomirleanu/image-colors
sawmainek/laravel-api-generator
delatbabel/jsonresponses
mouhamedfd/permissions-generator
eduplus/qr
laravel2580/idehelpers
delatbabel/viewpages
anavel/gettext
muhamadrezaar/highcharts
delatbabel/keylists
frankkessler/salesforce-laravel-oauth2-rest
anavel/foundation
wdmtech/enviricons
eii/laravel-captcha
muka/shape-reader
tdt/json