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

sbk/cron-bundle

sbk/cron-bundle provides cron expression handling for PHP applications: parse and validate cron schedules, calculate upcoming run times, and manage scheduled jobs. A lightweight helper for integrating cron-based task scheduling into your projects.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit

  • Framework mismatch is the headline. Despite the "Laravel/PHP package" framing, sbk/cron-bundle is a Symfony bundle, not a Laravel package. It ships as a bundle with a DependencyInjection extension, service definitions, and configuration tree — all of which presume the Symfony kernel and container. Laravel's service providers, container, and Artisan scheduler are structurally different. Treat any "integration" as a port, not an install.
  • Functionality overlaps with native capabilities. The package's value proposition — declaring cron jobs in configuration files rather than on the host crontab — is already solved in Laravel by the Task Scheduler (app/Console/Kernel.php / routes/console.php in 11.x) and in modern Symfony by the Scheduler component (5.4+/6.x). There is no capability gap this package fills that the framework does not already cover.
  • Cron-expression parsing is the only genuinely reusable piece; that logic exists in the far more mature dragonmantank/cron-expression, which Laravel itself depends on. Any salvage work should target that library, not this one.

Integration feasibility

  • Low, bordering on non-viable. Zero dependents and 10 stars mean no public evidence of anyone running it against a supported framework version. The repository is archived, so the maintainer has explicitly stopped accepting fixes.
  • Version drift risk is severe. An archived Symfony bundle of this vintage almost certainly targets Symfony 2.x/3.x — Symfony 2 has been EOL since 2019, 3.x since 2021 — and will not run on PHP 8.x without edits. Estimated effort to make it load cleanly in a current LTS stack is days, not hours, with no upstream support when it breaks.
  • No CI signal, no security posture. Archived repos typically have no dependency scanning, no CVE response, and no PHP 8 compatibility matrix. That is an unacceptable supply-chain position for a production scheduler.

Technical risk

  • Lifecycle risk: terminal. Archived + unmaintained + no dependents = effectively a dead dependency. Any adoption creates a permanent fork-ownership burden.
  • Correctness risk in the core domain. Cron scheduling is deceptively subtle (DST transitions, overlap/withoutOverlapping, timezone boundaries, missed-run catch-up). An abandoned implementation carries unresolved edge-case bugs you will discover in production, at 3 a.m., on a nightly job.
  • Silent-failure risk. Config-file-driven crons decouple job definition from the host crontab's single entry point; if the runner is not invoked or the config cache goes stale, jobs simply do not fire and nothing alarms by default.
  • Reputational/audit risk. Justifying an archived third-party bundle to a security review, when a first-party scheduler exists, is a losing argument.

Key questions

  1. What concrete requirement does this package meet that Laravel's schedule() / Symfony Scheduler cannot?
  2. Is the intent to port the config-driven abstraction as internal code rather than take a dependency? If so, the scope should be rewritten against a maintained cron-expression library.
  3. Who owns the fork, and what is the funded budget for indefinite maintenance?
  4. Do we have any hard constraint (legacy Symfony app, frozen PHP version) that makes this bundle the path of least resistance rather than a liability?
  5. Has security reviewed the archived-dependency policy exception this would require?

Integration Approach

Stack fit

  • Laravel: poor fit, recommend reject. The package is not namespaced or autoloaded for Laravel, has no service provider, and depends on Symfony DI primitives. Wiring it in would mean writing an adapter around a dead library to duplicate an existing first-party feature — negative ROI.
  • Legacy Symfony: conditional fit only. If the target is a Symfony 2.x/3.x application that is itself frozen and EOL, the bundle may match the surrounding technical debt. Even then, it is a stopgap, not a destination.
  • Recommended substitute. Laravel: native scheduler plus dragonmantank/cron-expression for ad-hoc expression parsing. Symfony: the native Scheduler component. Both are maintained, documented, and security-scanned.

Migration path (if the config-driven abstraction is genuinely required)

  1. Extract the requirement, not the code. Document the desired developer experience: jobs declared in version-controlled config, one host crontab entry, withoutOverlapping/onOneServer semantics, failure alerting.
  2. Reimplement against maintained primitives. A thin internal package (~200–400 LOC) that reads a config file and registers closures with the framework's native scheduler. This preserves the ergonomics without inheriting the dead dependency.
  3. Do not vendor the archived repo. Copying GPL-free MIT code is legally fine, but vendoring carries the bug surface forward with none of the upstream fixes.

Compatibility

  • Assume PHP ≤7.x and Symfony ≤3.x until proven otherwise; verify via composer.json constraints before any spike.
  • Laravel 10/11 require PHP 8.1+; Symfony 6/7 require PHP 8.1+. There is a near-certain hard incompatibility gap here.
  • Test matrix should include DST transitions, timezone offsets, job overlap, and container cold-start (config cache warmup).

Sequencing

  1. Week 0 — Decision spike (1–2 days): confirm framework, PHP constraint, and whether native scheduler already satisfies the requirement. Expect this to end the evaluation.
  2. If rejected (expected): document the decision and the native alternative; no further work.
  3. If a legacy exception is granted: isolate behind an internal interface, time-box to one quarter, and fund a replacement ticket at the same time.
  4. Never sequence this as a greenfield dependency. It is only defensible as a scoped remediation inside an already-EOL application.

Operational Impact

Maintenance

  • You inherit the maintenance. Archived means no upstream patches, no PHP major-version bumps, no CVE triage. Budget a standing allocation for fork upkeep or accept decay.
  • Fork drift is permanent. Once patched for PHP 8, the codebase is yours; there is no path to reconverge with upstream.
  • Documentation is thin and stale. Ten stars implies near-zero community Q&A; onboarding cost falls entirely on internal tribal knowledge.

Support

  • No maintainer, no issue tracker triage, no security advisories. Incident response is 100% internal, including during on-call rotations.
  • Escalation path is "read the source." That is acceptable for a 300-line internal utility; it is not acceptable for the component that runs your billing crons.
  • Vendor/audit exposure. An archived third-party dependency in a scheduling-critical path is a recurring finding in security and compliance reviews.

Scaling

  • Horizontal scaling is the hardest part. Config-file cron definitions historically assume a single runner. Multi-node deployments need distributed locking (onOneServer) to prevent duplicate execution; a legacy bundle will not provide this. In Laravel, that is a one-line ->onOneServer() on the native scheduler — a strong argument for the native path.
  • Job volume grows linearly in the config file and there is no built-in observability, retry policy, or dead-letter handling. As the schedule grows past a few dozen entries, you will be building monitoring around a black box.
  • No queue integration. Long-running jobs will block the runner unless you push them onto a queue — which the framework does natively and this bundle does not.

Failure modes

  • Silent non-execution — config typo, stale config cache, or runner not invoked: jobs stop and nothing alerts. Highest-severity mode.
  • Duplicate execution — multiple app servers each running the scheduler with no lock; double-charges, duplicate emails.
  • Overlap — a slow job starting again while the prior run is still active; memory exhaustion, data races.
  • DST/timezone errors — jobs run twice or not at all on transition days.
  • PHP upgrade breakage — the package fails to parse on a newer runtime, taking the whole bootstrap down with it.
  • Abandoned-dependency discovery — a security audit flags it post-launch, forcing an emergency migration on someone else's timeline.
  • Mitigation for all of the above: heartbeat monitoring (e.g., a dead-man's-switch on scheduler completion), per-job execution logging, and an alert on zero-runs-within-window.

Ramp-up

  • Engineer time to productivity: ~1–2 days for a Symfony-fluent engineer to understand the bundle and its config schema; +3–5 days for a Laravel engineer, who must first learn Symfony bundle conventions before porting.
  • Organizational ramp-up is the larger cost: the team must internalize that this dependency has no upstream, which changes how every bug report is handled — from "file an issue" to "fix it ourselves."
  • Recommended position: do not adopt. The native scheduler in Laravel (or Symfony's Scheduler component) delivers the same config-declarative ergonomics with active maintenance, security coverage, distributed locking, and zero fork liability. This package's correct role in the evaluation is as a pattern reference, not a dependency.
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.
ignibyte/aic-framework
glavweb/data-schema-bundle
glavweb/datagrid-bundle
tacticmedia/scim-server
uni-method/frame
neika-ai/sdk
adachsoft/php-code-style
pharaonic/laravel-notification-dependencies
beautinow/translug
dev-brainiac/bot-cloaked
octoberrain/html
octoberrain/extension
octoberrain/exception
octoberrain/contracts
adachsoft/api-version-bundle
cgv/localized-resource
noith/settings
kda/laravel-package
kda/filament-dynamic-navigation
bypersoft/signbox