mczolko/heroku-scheduler-bundle
A Symfony bundle that integrates Heroku Scheduler with your app, letting you register and run recurring console commands and scheduled jobs on Heroku dynos without separate cron infrastructure.
Architecture fit: This is a Symfony bundle (mczolko/heroku-scheduler-bundle), not a Laravel package, despite the framing. Laravel ships its own first-class scheduler (App\Console\Kernel::schedule(), schedule:run, withoutOverlapping, onOneServer). The bundle's integration model is Symfony's Bundle + DI container registration, which does not map onto Laravel's service container or package auto-discovery. The mismatch is structural, not cosmetic.
Integration feasibility: Low as a direct dependency. Adopting it inside Laravel would mean pulling Symfony components into a Laravel app and hand-wiring a bundle that Laravel's kernel never boots. The realistic path is to treat it as a reference implementation and reimplement its behavior in a Laravel console command — the bundle's actual surface area is almost certainly a thin wrapper around invoking console commands from Heroku Scheduler, so porting is cheaper than adapting.
Technical risk: High.
Key questions:
heroku scheduler invocation of console commands?composer.json actually pin, and does it resolve against our Laravel version?Stack fit: Non-fit for Laravel. The idiomatic pattern is Laravel's native scheduler driven by the Heroku Scheduler add-on calling php artisan schedule:run on a one-off dyno. That gives us overlap control, per-job timeouts, and observability without a third-party bundle.
Migration path:
Console\Kernel and let Heroku Scheduler only tick schedule:run.Compatibility: Must verify Composer resolution against PHP 8.x and the Symfony component versions Laravel 10/11 already ship. Expect conflicts; do not force --ignore-platform-reqs to make it install.
Sequencing:
schedule:run).Maintenance: Effectively unmaintained upstream. Any fork becomes ours to own in perpetuity — full cost of ownership, zero upstream leverage. This is the dominant operational fact.
Support: No vendor, no community (1 star, 0 dependents). Knowledge is entirely internal; bus factor is whoever wrote the port.
Scaling: Heroku Scheduler granularity is coarse (10-minute / hourly / daily) and runs on ephemeral one-off dynos. Concurrency, overlap, and distributed locking must be handled by us. Laravel's withoutOverlapping() and onOneServer() are strictly better primitives than anything this bundle can offer.
Failure modes:
Ramp-up: Trivial in complexity terms — the package is small and the domain (scheduled console jobs) is well understood. The risk is abandonment, not learning curve. Reimplementation effort is realistically under two engineer-days, which makes "port it ourselves" strictly cheaper than "adopt and maintain a dead dependency."
How can I help you explore Laravel packages today?