PHPackages                             nilanjank/scheduler-hub-laravel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Admin Panels](/categories/admin)
4. /
5. nilanjank/scheduler-hub-laravel

ActiveLibrary[Admin Panels](/categories/admin)

nilanjank/scheduler-hub-laravel
===============================

A Laravel scheduled-task dashboard with persistent run history and failure notifications (mail, Slack, webhook).

v1.1.0(1mo ago)0268[1 issues](https://github.com/nilanjan-k/scheduler-hub-laravel/issues)MITPHPPHP ^8.2CI failing

Since Jul 15Pushed 1mo agoCompare

[ Source](https://github.com/nilanjan-k/scheduler-hub-laravel)[ Packagist](https://packagist.org/packages/nilanjank/scheduler-hub-laravel)[ Docs](https://github.com/nilanjank/scheduler-hub-laravel)[ RSS](/packages/nilanjank-scheduler-hub-laravel/feed)WikiDiscussions main Synced 1w ago

READMEChangelogDependencies (9)Versions (3)Used By (0)

 [![Laravel 11, 12, 13](https://camo.githubusercontent.com/afee0cfa7253c01ebb1c83448d41b8ddd9d091dd5bc9e00b4533da6faa715e97/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d3131253230253743253230313225323025374325323031332d4646324432303f7374796c653d666f722d7468652d6261646765266c6f676f3d6c61726176656c266c6f676f436f6c6f723d7768697465)](https://camo.githubusercontent.com/afee0cfa7253c01ebb1c83448d41b8ddd9d091dd5bc9e00b4533da6faa715e97/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d3131253230253743253230313225323025374325323031332d4646324432303f7374796c653d666f722d7468652d6261646765266c6f676f3d6c61726176656c266c6f676f436f6c6f723d7768697465)

🛰️ Scheduler Hub
================

[](#️-scheduler-hub)

 **A control center for Laravel's task scheduler.**
 See every scheduled task at a glance, trigger runs on demand, and never lose track of what happened — with a persistent run history and real failure alerts.

 [![Latest Version on Packagist](https://camo.githubusercontent.com/26b4036c43e5715f19d60aa15a40ce63eff5039e8e30539924fa34d97bc37e4f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6e696c616e6a616e6b2f7363686564756c65722d6875622d6c61726176656c2e7376673f7374796c653d666c61742d73717561726526636f6c6f723d363336366631)](https://packagist.org/packages/nilanjank/scheduler-hub-laravel) [![Tests](https://camo.githubusercontent.com/73aa79c75d36f2d85052b741b0cd457a9432411f54ebb6ba5d48b54400c0c66c/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f616374696f6e732f776f726b666c6f772f7374617475732f6e696c616e6a616e6b2f7363686564756c65722d6875622d6c61726176656c2f72756e2d74657374732e796d6c3f6272616e63683d6d61696e266c6162656c3d7465737473267374796c653d666c61742d737175617265)](https://github.com/nilanjank/scheduler-hub-laravel/actions) [![Total Downloads](https://camo.githubusercontent.com/ef7beb6e82154464f4c1b535446e3eaa6b186cdd75986efbcb14fb2a5e7b825b/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6e696c616e6a616e6b2f7363686564756c65722d6875622d6c61726176656c2e7376673f7374796c653d666c61742d73717561726526636f6c6f723d363336366631)](https://packagist.org/packages/nilanjank/scheduler-hub-laravel) [![License MIT](https://camo.githubusercontent.com/ab640cbfd1e49e62eaa5af6d95384810d964850a91d0761a0ab7dd82f1d888c4/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d3633363666312e7376673f7374796c653d666c61742d737175617265)](LICENSE.md)

---

Why Scheduler Hub
-----------------

[](#why-scheduler-hub)

Most Laravel scheduler dashboards stop at "here's a list of your cron jobs." Scheduler Hub goes further:

🗂️ **Persistent run history**Every scheduled run — not just manual ones — is recorded automatically by hooking into Laravel's native scheduler events. History stays accurate even if nobody ever opens the dashboard.🔔 **Failure notifications**Mail, Slack, and signed generic webhooks, each independently toggleable. Know the moment something breaks, wherever your team already looks.🆔 **Stable task identity**Tasks are identified by a hash of their command, expression, timezone, and description — not their position in the schedule list — so the "Run" button always hits the task you meant, even if the schedule changes between page load and click.🎨 **Clean, fast dashboard**Live search, type filters, status badges, and an in-browser output viewer. No build step, no JS framework — just a single Blade view.🔒 **Locked down by default**Disabled out of the box. Gate-based or callback-based authorization, configurable middleware, and manual execution off unless you explicitly turn it on.---

Requirements
------------

[](#requirements)

LaravelPHP11.x8.2+12.x8.2+13.x8.3+Installation
------------

[](#installation)

```
composer require nilanjank/scheduler-hub-laravel
php artisan vendor:publish --tag=scheduler-hub-config
php artisan migrate
```

Quick start
-----------

[](#quick-start)

```
// routes/console.php
use Illuminate\Support\Facades\Schedule;

Schedule::command('inspire')
    ->everyMinute()
    ->description('Displays a random motivational quote.');
```

```
SCHEDULER_HUB_ENABLED=true
```

Visit `http://localhost:8000/scheduler-hub` 🎉

To allow the **Run now** button:

```
SCHEDULER_HUB_MANUAL_EXECUTION=true
```

The **Tasks** tab lists every registered task with its next run and, if history is on, its most recent run status. The **History** tab shows every recorded run, filterable by status, with full output/error on click.

---

Configuration
-------------

[](#configuration)

Everything lives in `config/scheduler-hub.php`:

```
'enabled' => env('SCHEDULER_HUB_ENABLED', false),
'path' => env('SCHEDULER_HUB_PATH', 'scheduler-hub'),
'middleware' => ['web', 'auth'],
'ability' => env('SCHEDULER_HUB_ABILITY', 'viewSchedulerHub'),
'authorize' => null,

'manual_execution' => env('SCHEDULER_HUB_MANUAL_EXECUTION', false),
'output_limit' => env('SCHEDULER_HUB_OUTPUT_LIMIT', 12000),

'history' => [
    'enabled' => true,
    'track_scheduled_runs' => true,
    'retention_days' => 30,
    'per_page' => 25,
],

'notifications' => [
    'enabled' => false,
    'notify_on' => ['failure'],
    'channels' => [
        'mail' => ['enabled' => false, 'to' => null],
        'slack' => ['enabled' => false, 'webhook_url' => null],
        'webhook' => ['enabled' => false, 'url' => null, 'secret' => null],
    ],
],
```

### 🔒 Security

[](#-security)

The dashboard is **disabled by default**. To use it in production:

```
SCHEDULER_HUB_ENABLED=true
SCHEDULER_HUB_MANUAL_EXECUTION=false
```

The default Gate only allows access in the `local` environment. Define it yourself for anything else:

```
use Illuminate\Support\Facades\Gate;

Gate::define('viewSchedulerHub', fn ($user) => $user->is_admin);
```

Or use the `authorize` config callback instead of a Gate:

```
'authorize' => fn (\Illuminate\Http\Request $request) => $request->user()?->is_admin === true,
```

> ⚠️ Never mount this behind only `['web']` middleware on a public app.

### 🔔 Notifications

[](#-notifications)

Enable the channels you want:

```
SCHEDULER_HUB_NOTIFICATIONS_ENABLED=true

SCHEDULER_HUB_NOTIFY_MAIL_ENABLED=true
SCHEDULER_HUB_NOTIFY_MAIL_TO="ops@example.com,alerts@example.com"

SCHEDULER_HUB_NOTIFY_SLACK_ENABLED=true
SCHEDULER_HUB_NOTIFY_SLACK_WEBHOOK_URL="https://hooks.slack.com/services/…"

SCHEDULER_HUB_NOTIFY_WEBHOOK_ENABLED=true
SCHEDULER_HUB_NOTIFY_WEBHOOK_URL="https://example.com/hooks/scheduler"
SCHEDULER_HUB_NOTIFY_WEBHOOK_SECRET="a-long-random-string"
```

Mail and Slack fire on `failure` by default (`notify_on`). The generic webhook always fires for whichever statuses are in `notify_on`, so it can double as a success ping too if you add `success` to that list.

Webhook requests are signed with an `X-Scheduler-Hub-Signature` header (HMAC-SHA256 of the raw JSON body) whenever a secret is configured — verify it on the receiving end before trusting the payload.

### 🗑️ Run history retention

[](#️-run-history-retention)

Old runs don't accumulate forever — schedule the built-in prune command:

```
// routes/console.php
use Illuminate\Support\Facades\Schedule;

Schedule::command('scheduler-hub:prune')->daily();
```

Retention window is controlled by `history.retention_days` in the config.

---

License
-------

[](#license)

Released under the [MIT License](LICENSE.md).

###  Health Score

43

—

FairBetter than 89% of packages

Maintenance90

Actively maintained with recent releases

Popularity17

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity47

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

2

Last Release

47d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/173082519?v=4)[Nilanjan K](/maintainers/nilanjan-k)[@nilanjan-k](https://github.com/nilanjan-k)

---

Top Contributors

[![nilanjan-k](https://avatars.githubusercontent.com/u/173082519?v=4)](https://github.com/nilanjan-k "nilanjan-k (3 commits)")

---

Tags

schedulerlaravelnotificationscrondashboardtask-managerrun-history

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/nilanjank-scheduler-hub-laravel/health.svg)

```
[![Health](https://phpackages.com/badges/nilanjank-scheduler-hub-laravel/health.svg)](https://phpackages.com/packages/nilanjank-scheduler-hub-laravel)
```

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3365.5M359](/packages/psalm-plugin-laravel)[laravel/cashier

Laravel Cashier provides an expressive, fluent interface to Stripe's subscription billing services.

2.5k31.8M166](/packages/laravel-cashier)[spatie/laravel-health

Monitor the health of a Laravel application

89313.5M195](/packages/spatie-laravel-health)[laravel/ai

The official AI SDK for Laravel.

1.1k6.4M360](/packages/laravel-ai)[laravel/mcp

Rapidly build MCP servers for your Laravel applications.

80732.6M270](/packages/laravel-mcp)[fleetbase/core-api

Core Framework and Resources for Fleetbase API

1346.4k29](/packages/fleetbase-core-api)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
