indatus/dispatcher
Indatus Dispatcher is a Laravel package for scheduling Artisan commands and queued jobs with a fluent API. Define cron-style schedules, manage overlaps, and log or email command output, offering a flexible alternative to Laravel's built-in scheduler.
Architecture fit. indatus/dispatcher is a pre-5.1 Laravel artifact: it lets teams declare Artisan command schedules in source code, a capability Laravel absorbed into core in 5.1 via Illuminate\Console\Scheduling and app/Console/Kernel.php::schedule(). For any application on Laravel 5.1 or newer, adopting it creates a second, redundant scheduling subsystem with its own DSL, its own cron wiring, and its own semantics. The only defensible fit is a legacy application already pinned to Laravel 4.x/5.0 that currently depends on the package and needs a controlled exit.
Integration feasibility. Mechanically straightforward on the target stack: Composer install, service provider registration, optional config publish, and a single * * * * * cron entry invoking the package’s schedule runner. The real gate is dependency resolution — the package’s illuminate/* constraints date to 2015 and will almost certainly conflict with any modern laravel/framework. Confirm PHP compatibility before committing: 2015-era code predates PHP 7/8 hardening and may hit removed constructs, dynamic-property deprecations, or fatal errors on PHP 8. Verify the exact entry point (Schedulable classes, the runner command name, and cron contract) against the repo README rather than assumptions.
Technical risk. High. Last release 2015-03-26, zero dependents, no security response path, no upstream maintainer. Scheduling is operationally sensitive — missed runs are silent, duplicate runs are expensive — and the package predates native withoutOverlapping, onOneServer, and schedule monitoring. Every defect, CVE, or PHP upgrade break becomes internal work under MIT (forking is legal, but ownership cost transfers fully to us).
Key questions.
Schedulable classes, and side-effecting commands currently run through this package?Stack fit. Greenfield and 5.1+ applications: do not adopt — native scheduler is maintained, documented, and integrates with schedule:run, schedule:list, and schedule:test. Legacy 4.x/5.0: use only as a contained dependency with a documented exit plan; do not extend it with new schedules.
Migration path.
schedule() entries using ->command(), ->cron()/frequency helpers, ->timezone(), ->withoutOverlapping(), and ->onOneServer() where applicable.php artisan schedule:run every-minute entry.spatie/laravel-schedule-monitor or a heartbeat check).Compatibility. Gate the decision on composer require --dry-run / composer why-not against the actual lockfile. Treat PHP runtime compatibility and Laravel console kernel signature changes as separate checkpoints. If the app is on Laravel 5.1+, the package is not installable and the migration is mandatory, not optional.
Sequencing. Freeze new schedule additions in dispatcher → build native schedule in parallel → shadow-run and reconcile → cut cron → delete package → instrument monitoring. This order avoids a dual-runner window where both crons fire.
Maintenance. Effectively zero upstream maintenance; the team inherits all defects. Budget an explicit fork-and-patch allowance if the legacy app cannot migrate this quarter.
Support. No vendor. Community knowledge is 2014–2015 GitHub issues and stale StackOverflow; internal documentation and a named owner are required before the last engineer familiar with the DSL leaves.
Scaling. Minute-level cron evaluation is fine at low volume, but per-command evaluation without locking risks duplicate execution across multiple app nodes and overlapping long-running jobs. Native scheduler features (withoutOverlapping, onOneServer, runInBackground) are the correct answer at scale and are unavailable here.
Failure modes. Silent missed runs with no alerting; overlapping executions; timezone/DST drift; command signature changes after framework upgrades breaking the schedule silently; PHP runtime deprecations taking down the cron entry and therefore every downstream job. Regardless of path, add heartbeat/alerting before cutover — this package provides no observability.
Ramp-up. Low individual learning curve for anyone fluent in Artisan, but the knowledge is a dead end. Estimate half a day to port a simple schedule and several days if custom Schedulable classes, side effects, or multi-node overlap semantics are involved.
Recommendation. Do not adopt for new work. If the package is already in production, treat removal as a scheduled technical-debt item with a fixed deadline: migrate to the native scheduler, add monitoring, and delete the dependency. The 1,043 stars reflect 2015-era relevance, not current viability; zero dependents and a 19.68 opportunity score reinforce that this is a migration problem, not a build-versus-buy decision.
How can I help you explore Laravel packages today?