Documentation

Laravel Scheduler
Control Center

A breathtaking, premium, real-time developer dashboard for monitoring, searching, filtering, and manually executing Laravel scheduled tasks in a single click — fully inspired by Laravel Pulse.

PHP 8.4+Laravel 11 / 12 / 13MIT Licensev1.1.0
Dashboard Screenshot

Overview

devakshay/scheduler-list-laravel is a zero-dependency Laravel package that provides a stunning, self-contained web dashboard for your application's task scheduler. Once installed, visit/schedulers in your browser to see every registered scheduled task with its next run time, cron expression, type, and constraints — all in real time.

✨ Package Features

Pulse-Style Dashboard
A premium user interface featuring fluid modern glassmorphism panels, HSL colors, and subtle micro-animations.
Steady Toggle Theme
Full Dark and Light theme adaptability with local storage persistence and transition controls.
Controlled Manual Triggering
Optionally trigger Artisan commands, Closure callbacks, and shell jobs directly from the UI when explicitly enabled.
Beautiful Built-in Console
Executes and streams terminal logs in real-time within an interactive overlay (custom-designed in Xcode-dark and DevTools-light styles).
Fuzzy Search & Filtering
Instantly search by command name, expression, or description. Filter tasks by type (Artisan, Callbacks, Shell) with active badge indicators.
Smart Meta Indicators
Real-time next run schedules (Carbon countdowns), timezone details, total task count, and task constraints (e.g. withoutOverlapping, onOneServer).

Installation

Step 1 — Install via Composer

bash
composer require devakshay/scheduler-list-laravel

Step 2 — Publish the Config File

Publish the simplified, clean configuration file to your application's config/ directory:

bash
php artisan vendor:publish --tag="scheduler-list-laravel-config"

Configuration

The published config file at config/scheduler-list.php structure is as follows:

php
<?php

return [
    /*
     * The path/URL where the scheduler dashboard will be accessible.
     */
    'path' => env('SCHEDULER_LIST_PATH', 'schedulers'),

    /*
     * The middleware applied to the scheduler dashboard routes.
     * Keep auth enabled in production and add any tenant/admin/IP middleware your app needs.
     */
    'middleware' => ['web', 'auth'],

    /*
     * Optional Gate ability used by the package. The default Gate only grants access
     * in local environments; production apps should define this ability explicitly.
     */
    'ability' => env('SCHEDULER_LIST_ABILITY', 'viewSchedulerList'),

    /*
     * Optional authorization callback. Return true to allow access.
     */
    'authorize' => null,

    /*
     * Whether the scheduler dashboard is enabled.
     */
    'enabled' => env('SCHEDULER_LIST_ENABLED', false),

    /*
     * Allow developers to run scheduled tasks manually from the dashboard.
     */
    'manual_execution' => env('SCHEDULER_LIST_MANUAL_EXECUTION', false),

    /*
     * Maximum number of output characters returned to the browser after a manual run.
     */
    'output_limit' => 12000,
];

Configuration Options

KeyTypeDefaultDescription
pathstring'schedulers'The URL path where the dashboard is mounted.
middlewarearray['web', 'auth']Middleware array stack. Add custom admin/IP protection middlewares here.
abilitystring'viewSchedulerList'Optional gate authorization check name.
authorizeClosure|nullnullOptional authorization callback (e.g. fn($req) => true).
enabledbooleanfalseMaster toggle to enable or disable the dashboard.
manual_executionbooleanfalseControls whether users can trigger tasks manually via the UI.
output_limitinteger12000Max character length captured and returned from console tasks.

Production Security

⚠️Never expose the dashboard publicly in production. It allows users to trigger arbitrary shell and artisan codes on your host machines. Protect it deliberately.

The dashboard is disabled by default. To use it safely in production, configure your environment variables:

env
SCHEDULER_LIST_ENABLED=true
SCHEDULER_LIST_MANUAL_EXECUTION=false

Option A — Define an Access Gate

Define the Gate inside your application's service providers:

php
use Illuminate\Support\Facades\Gate;

Gate::define('viewSchedulerList', function ($user) {
    return $user->is_admin;
});

Option B — Direct Authorization Callback

Publish the config and register an inline authorize check callback:

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

Usage

Register your scheduled tasks in routes/console.php (Laravel 11+):

php
use Illuminate\Support\Facades\Schedule;

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

Schedule::call(function () {
    echo "Processing database backups...";
})->everyFiveMinutes()->description('Database Backup');

Step 1 — Start the Local Server

bash
php artisan serve

Step 2 — Enable the Dashboard

Add this environment variable inside your local config .env:

env
SCHEDULER_LIST_ENABLED=true

Step 3 — Access and Trigger

Open 👉 http://localhost:8000/schedulers. To unlock manual runs via the UI buttons, set:

env
SCHEDULER_LIST_MANUAL_EXECUTION=true

Testing

The package includes a comprehensive feature test suite validating routes, manual triggers, standard output streaming, and security blocks:

bash
composer test

Contributing & License

🤝 Contributing

Contributions are welcome! Please feel free to open a Pull Request or report bugs in the GitHub Issues page.

📄 License

The MIT License (MIT). Please see the License File for more details.