PHPackages                             skywarth/chaotic-schedule - 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. [Utility &amp; Helpers](/categories/utility)
4. /
5. skywarth/chaotic-schedule

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

skywarth/chaotic-schedule
=========================

Randomize scheduled command execution time and date intervals

v2.0.0(12mo ago)12142.3k—5.9%1[1 issues](https://github.com/skywarth/chaotic-schedule/issues)Apache-2.0PHPPHP &gt;=8.1CI passing

Since Aug 26Pushed 10mo ago2 watchersCompare

[ Source](https://github.com/skywarth/chaotic-schedule)[ Packagist](https://packagist.org/packages/skywarth/chaotic-schedule)[ Fund](https://www.buymeacoffee.com/skywarth)[ GitHub Sponsors](https://github.com/skywarth)[ RSS](/packages/skywarth-chaotic-schedule/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (7)Dependencies (4)Versions (11)Used By (0)

Chaotic Schedule
================

[](#chaotic-schedule)

Laravel package for randomizing command schedule intervals via pRNGs.

[![Reliability Rating](https://camo.githubusercontent.com/28beae3165033abe986effe06a9d2b341c17ca073f64f258c99393761be41f96/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d736b7977617274685f6368616f7469632d7363686564756c65266d65747269633d72656c696162696c6974795f726174696e67)](https://sonarcloud.io/summary/new_code?id=skywarth_chaotic-schedule)[![Maintainability Rating](https://camo.githubusercontent.com/5ee3710ad5e295cbc79453f762f4bc680324c13d4efdd829c5c8610a8be3ba70/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d736b7977617274685f6368616f7469632d7363686564756c65266d65747269633d7371616c655f726174696e67)](https://sonarcloud.io/summary/new_code?id=skywarth_chaotic-schedule)[![Duplicated Lines (%)](https://camo.githubusercontent.com/952eab51cdaa796368592ebf376abd3f661528b9433cc7b6d6b7172492c9386d/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d736b7977617274685f6368616f7469632d7363686564756c65266d65747269633d6475706c6963617465645f6c696e65735f64656e73697479)](https://sonarcloud.io/summary/new_code?id=skywarth_chaotic-schedule)

[![codecov](https://camo.githubusercontent.com/92d7a6d62806a859c881ef36a623c9326ce1af75febb77884819766c97e33d9b/68747470733a2f2f636f6465636f762e696f2f67682f736b7977617274682f6368616f7469632d7363686564756c652f67726170682f62616467652e7376673f746f6b656e3d474e53473538364c4732)](https://codecov.io/gh/skywarth/chaotic-schedule)[![Quality Gate Status](https://camo.githubusercontent.com/e85df12baebd45aae59a9b0caedcad539ee0c973a0725d2739ef52210b1ca40c/68747470733a2f2f736f6e6172636c6f75642e696f2f6170692f70726f6a6563745f6261646765732f6d6561737572653f70726f6a6563743d736b7977617274685f6368616f7469632d7363686564756c65266d65747269633d616c6572745f737461747573)](https://sonarcloud.io/summary/new_code?id=skywarth_chaotic-schedule)

[![DeepSource](https://camo.githubusercontent.com/72f08e617b138850a7d5c96c2b0d2a42c9b899d272e85b15d8f8956b26c1d5c9/68747470733a2f2f6170702e64656570736f757263652e636f6d2f67682f736b7977617274682f6368616f7469632d7363686564756c652e7376672f3f6c6162656c3d6163746976652b6973737565732673686f775f7472656e643d7472756526746f6b656e3d6b6c707536436c4b50784e5a6d3441386654507838664a55)](https://app.deepsource.com/gh/skywarth/chaotic-schedule/?ref=repository-badge)[![DeepSource](https://camo.githubusercontent.com/efda35099a328dd0ab9e3a0731e5ecf61dbbfc1ad6d644810b0c340f92289641/68747470733a2f2f6170702e64656570736f757263652e636f6d2f67682f736b7977617274682f6368616f7469632d7363686564756c652e7376672f3f6c6162656c3d7265736f6c7665642b6973737565732673686f775f7472656e643d7472756526746f6b656e3d6b6c707536436c4b50784e5a6d3441386654507838664a55)](https://app.deepsource.com/gh/skywarth/chaotic-schedule/?ref=repository-badge)

Packagist:

Table of Contents
-----------------

[](#table-of-contents)

- [Installation](#installation)
- [Problem Definition](#problem-definition)
    - [Use Cases](#use-cases)
- [Documentation](#documentation)
    - [How to Use](#how-to-use)
        - [Random Time Macros](#random-time-macros)
            - [atRandom](#at-random)
            - [dailyAtRandom](#daily-at-random)
            - [hourlyAtRandom](#hourly-at-random)
            - [hourlyMultipleAtRandom](#hourly-multiple-at-random)
        - [Random Date Macros](#random-date-macros)
    - [Info for Nerds](#info-for-nerds)
        - [Consistency, seed and pRNG](#consistency-seed-prng)
        - [Asserting the chaos](#asserting-the-chaos)
        - [Performance](#performance)
- [Roadmap &amp; TODOs](#roadmap-and-todos)
- [Credits &amp; References](#credits-and-references)

Installation
------------

[](#installation)

1. Consider the requirements and compatibilities

Package versionPHP versionLaravel versionStatusRemarks*(TBA)*`8.4``>=v12.x`⚠️Current support status unknown, use at your own risk. If you confirm it to be working, please let us know. Will be done after the previous upgrade. Planned to be done before the end of 2025`v2.0.0``8.1`` >=v9.x` `diff([4,8,15,16,23,42])->values(); };
```

Optional closure to tweak the designated random run minutes according to your needs. For example you may use this to run the command only on those minutes which are not in an array.

 Designated random run minutes `Collection` that consist of `int` minutes (between 0-59) and `Event` (Schedule) instance is injected, meanwhile `Collection` response that contains `int` minutes between 0-59 is expected from the closure.- ##### Example usage #1

    [](#example-usage-1-2)

Run a command 4-5 (random) times per hour, only on weekdays (constant, every day), between 08:00 and 18:00 (constant, every hour between these). Minutes of each hour are random.

> [https://www.reddit.com/r/laravel/comments/18v714l/comment/ktkyc72/?utm\_source=share&amp;utm\_medium=web2x&amp;context=3](https://www.reddit.com/r/laravel/comments/18v714l/comment/ktkyc72/?utm_source=share&utm_medium=web2x&context=3)

```
$schedule->command('your-command-signature:here')->hourlyMultipleAtRandom(0,59,4,5)->weekdays()->between('08:00','18:00');
```

- ##### Example usage #2

    [](#example-usage-2-2)

Run a command exactly 8 times an hour, it should run only between 20-40 minute marks, run only on wednesdays.

```
$schedule->command('your-command-signature:here')->hourlyMultipleAtRandom(20,40,8,8)->wednesdays();
```

- ##### Example usage #3

    [](#example-usage-3-2)

Run a command 2-6 times an hour, it should run only between 10-48 minute marks, run only on; tuesday,thursday,saturday, it should run only on even(divisible by 2) minutes.

```
$schedule->command('your-command-signature:here')->hourlyMultipleAtRandom(10,48,2,6,null,function(Collection $designatedMinutes,Event $event){
    return $designatedMinutes->map(function(int $minute){
        return $minute-(($minute%2));//rounding numbers to closest even number, if the number is odd
    });
})->days([Schedule::TUESDAY, Schedule::THURSDAY,Schedule::SATURDAY])();
```

---

### Random Date Macros

[](#random-date-macros)

#### 1. `->randomDays(int $periodType, ?array $daysOfTheWeek, int $timesMin, int $timesMax, ?string $uniqueIdentifier=null,?callable $closure=null)`

[](#1--randomdaysint-periodtype-array-daysoftheweek-int-timesmin-int-timesmax-string-uniqueidentifiernullcallable-closurenull)

Used for scheduling your commands to run at random dates for given constraints and period.

- Only designates random **run date**
- Doesn't designate any run time on the schedule. So you **have to** provide some time scheduling such as `hourly()`, `everySixHours()`, `everyTenMinutes()`, `atRandom()` etc.

ParameterTypeExample ValueDescription`periodType`int`RandomDateScheduleBasis::Week`The most crucial parameter for random date scheduling. It defines the period of the random date range, seed basis/consistency and generated random dates. It defines the seed for the random dates, so for the given period your randoms stay consistent. You may use any value presented in `RandomDateScheduleBasis` class/enum.`daysOfWeek`array (nullable)`[Carbon::Sunday, Carbon::Tuesday]`Days of the week that will be used for random date generation. Only those days you pass will be picked and used. For example: if you pass `[Carbon::Wednesday, Carbon:: Monday]`, random dates will be only on wednesdays and mondays. Since it is optional, if you don't pass anything for it that means all days of the week will be available to be used.`timesMin`int`2`Defines the minimum amount of times the command is expected to run for the given period. E.g: period is `week` and `timesMin=4`, that means this command will run at least 4 times each week.`timesMax`int`12`Defines the maximum amount of times the command is expected to run for the given period. E.g: period is `month` and `timesMin=5` and `timesMax=12`, that means this command will run at least 5, at most 12 times each month. Exact number of times that it'll run is resolved in runtime according to seed.`uniqueIdentifier`string (nullable)`'my-custom-identifier'`Custom identifier that will be used for determining seed for the given command. If null/default provided, command's signature will be used for this. **It is primarily used for distinguishing randomization of same command schedules.**`closure`callable (nullable)```
function(Collection $possibleDates, Event $schedule){return $possibleDates->filter(function (Carbon $date){     return $date->day%2!==0;//odd numbered days only });}
```

Closure parameter for adjusting random dates for the command.
 This closure is especially useful if you would like to exclude certain dates, or add some dates to the possible dates to choose from.

 Possible dates as `Carbon` instances are injected as `collection` to the closures, these dates represent the pool of possible dates to choose from for random dates, it doesn't represent designated run dates. `Event` (Schedule) instance is injected as well. Closure response is expected to be a `collection` of `Carbon` instances.- ##### Example usage #1

    [](#example-usage-1-3)

Run a command 5 to 10 times/days (as in dates) each month randomly.

```
$schedule->command('your-command-signature:here')->randomDays(RandomDateScheduleBasis::MONTH,[],5,10);
```

- ##### Example usage #2

    [](#example-usage-2-3)

Run a command exactly 2 times (as in dates) per week, but only on wednesdays or saturdays.

```
$schedule->command('your-command-signature:here')->randomDays(RandomDateScheduleBasis::WEEK,[Carbon::WEDNESDAY,Carbon::SATURDAY],2,2);
```

- ##### Example usage #3

    [](#example-usage-3-3)

Run a command 15-30 times (as in dates) per year, only on Fridays.

```
$schedule->command('your-command-signature:here')->randomDays(RandomDateScheduleBasis::YEAR,[Carbon::FRIDAY],15,30);
```

- ##### Example usage #4

    [](#example-usage-4-1)

Run a command 1 to 3 times (as in dates) per month, only on weekends, and only on odd days .

```
$schedule->command('your-command-signature:here')->randomDays(
    RandomDateScheduleBasis::MONTH,
    [Carbon::SATURDAY,Carbon::SUNDAY],
    1,3,
    null,
    function (Collection $dates){
        return $dates->filter(function (Carbon $date){
            return $date->day%2!==0;//odd numbered days only
        });
    }
);
```

### Joint examples

[](#joint-examples)

Examples about using both random time and random date macros together.

- ##### Example usage #1

    [](#example-usage-1-4)

Run a command 1 to 2 times (as in dates) among Friday, Tuesday, Sunday, and only between 14:48 - 16:54

```
$schedule->command('your-command-signature:here')->weekly()->randomDays(RandomDateScheduleBasis::WEEK,[Carbon::FRIDAY,Carbon::Tuesday,Carbon::Sunday],1,2)->atRandom('14:48','16:54');
```

### Info for nerds

[](#info-for-nerds)

#### Consistency, seed and pRNG

[](#consistency-seed-and-prng)

It was a concern to generate consistent and same random values for the duration of the given interval. This is due to the fact that the Laravel scheduler is triggered via CRON tab every minute. So we needed a solution to generate consistent randoms for each trigger of the scheduler. Otherwise, it would simply designate random date/time runs each time it runs, which will result in: commands never running at all (because run designation changes constantly), or commands running more that desired/planned.

In the world of cryptography and statistics, such challenges are tackled via pRNGs (pseudo random number generators). pRNGs as indicated in its name: is a pseudo random number generator which works with seed values and generates randoms determined by that seed, hence the name. Therefore, pRNGs would allow us to generate consistent and exactly same random values as long as seed remains the same. Now the question is what seed shall we pair pRNG with? After some pondering around, I deduced that if I give corresponding date/time of the interval, it would effectively be consistent throughout the interval. Henceforth, all the randomizing methods and macros work by utilizing `SeedGenerationService` which is responsible for generating seeds based on certain intervals (day, month, week etc.) This ensures your random run date/times are consistent throughout the interval, enabling consistency.

To those with a keen eye, this might present a possible problem. If the seed is paired only with interval, wouldn't that result in identical random date/time runs for separate commands? **Exactly!**Because of this, `SeedGenerationService` also takes command signatures into consideration by incorporating `uniqueIdentifier` (which is either command signature or custom identifier) into it's seed designation methods. This way, even if the separate commands have identical random scheduling, they'll have distinct randomization for them thanks to the `uniqueIdentifier`

#### Asserting the chaos

[](#asserting-the-chaos)

When dealing with pRNGs, nothing is truly chaotic and random, actually. It's all mathematics and statistics, it's deterministic. In order to ensure no harm could come from these randoms, I've prepared dozens of unit and feature tests for the different aspects of the library. From seed generation to generated random consistency, from distribution uniformity to validations, from design pattern implementation to dependency injection, all is well tested and asserted. See the code coverage reports and CI/CD runs regarding these functional tests.

#### Performance

[](#performance)

As you might already know, Laravel scheduler runs every minute via CRON tab entry (see: ). And since `kernel.php` (where you define your schedules) runs every minute, Laravel has to determine whether each command is designated to run at this minute or not. This is performed by running &amp; checking datetime scheduling assignments and `->when()` statements on your command scheduling.

This library heavily relies on pRNG, seed generation based on date/time and run designations. Hence, it is no surprise these calculations, randomization (pseudo) and designations are performed each time your `kernel.php` runs, which is every minute as explained on the previous paragraph. **So yes, if you're on low-specs, it could affect your pipeline. Because these seed determination, run date/time designations, pseudo-random values are determined on each schedule iteration.** Massive amounts (250+) of randomized command schedules could clog your server performance a bit in terms of memory usage.

But other than that, as the *Jules* from *Pulp Fiction* said:

> "As far as I know, MF is tip-top"

Roadmap &amp; TODOs
-------------------

[](#roadmap--todos)

- PHP &amp; Laravel version upgrade
    - Upgrade the baseline PHP version to &gt;=`8.X` for the new release, dropping support for PHP `7.4` and below, starting with new release
    - Upgrade to PHP `8.4` and Laravel `v12.x`. Beware this is not gonna be easy, there are huge changes to scheduler and CRON, as well as the API.
- Problem: These damned PRNG doesn't work well with massive seed values.
    - Abstract class for RNG adapters to enforce seed format (size, type, etc.)~~
    - New hashing solution for steady flow of seeds (on SeedGenerationService).
        - Every method in the service should pass through hashing, `intval` on its own is just poor.
- Timezone adaptation, we should utilize timezone macro. (Canceled. Not needed. Laravel handles it)
- Closure based schedules, those that do not have a command.
- Time based macros
    - Random for `->at('15:30')`. Exact singular time.
    - Random for `->hourlyAt(17)`
    - Random for `->dailyAt('13:00')`
    - (Skip. Not really necessary) Random for `->twiceDailyAt(1, 13, 15)`
    - (Not feasible. What are we going to bind/anchor our seed on ?) Random for **custom** `everyRandomMinutes()`
    - \[!\] Seeds should be expanded and distinguished. Example case: `->days(Schedule::MONDAY,Schedule::FRIDAY,Schedule::SATURDAY)->atRandom('09:00','22:44')`. Otherwise, it doesn't display next due date correctly. Not really a bug but incorrect in terms of informing the user. Config for this might be better. `->nextRunDate()` acts up for the `->daily()`.
    - Closure parameters for adjustments and flexibility
    - Determine and indicate boundary inclusivity
- Date based macros
    - (Changed a bit) Create an array of the designated days of the week to be selected from. Shuffle this array using RNG. Based on the requirement (like 2 times a week or 6 times a month), slice the array to get the required number of days. Return the selected days.
    - It should enable the following scenarios (times in the following only define date/day based times! It doesn't take time/minute into account.)
        - Once a week, any day of the week
        - Once a week, among wednesday and friday
            - Example: It'll run wednesday this week. (Basically you roll dice each week)
        - Twice a week, among thursday, saturday and monday.
            - Example: It'll run thursday and monday this week
            - Example: It'll run saturday and monday this week
        - 1-3 times this week, on tuesday, wednesday and friday **(need validation so that the times doesn't exceed max possible days)**
            - Example: this week it'll run 2 times, on tuesday and wednesday
            - Example: this week it'll run once, on friday.
        - 2-7 times this week, on any day of the week
            - Example: this week it'll run 5 times on \[...\]
        - Once a month, on any day of the week
        - 4 times a month, on only odd number of the day of the month (3,7,17,23)
        - 10-20 times a month, on monday, wednesday, thursday and saturday
        - 30 times a year, on monday and wednesday.
        - This one is not easy: 10 times a year, on saturday and sunday, runs should have a buffer span of at least 4 weeks. So it would run at the minimum per 4 weeks.
    - So here's the gatherings so far, analysis:
        - `period` context. Week, month, year...
        - Constraints and limitations: `days of the week` (separate param), `buffer` (Separate param? .what should be the minimum diff between designated runs) ,others (such as running only on odd number days) can be handled via closures hopefully
        - There is `times`, defining how many times it should run for the given `period`. It is not related at all with random time schedules.
        - `times` should be validated to not exceed max possible runs for the given `period` and constraints (day of the weeks etc)
- Indicating next runs dates. Either via overriding `schedule:list` or defining a custom command which works specifically for commands that use our macros.
    - Mark the commands that use our macros.
- CI/CD pipeline (build, run tests, maybe auto publish?)
- Add `randomMultipleMinutesSchedule` to documentation
- Separate test classes per method/macro basis
- PHPDoc comments for methods and classes
- Inject basis dateTime Carbon instance into the closures
- Unit/feature tests
    - Time based methods and macros
        - Macro registration assertion
        - Consistency of generated randoms based on seed
        - Unique identifier (parameter and auto)
        - Invalid params (out of range, min-max order, format)
        - Boundaries are respected (min-max values, does the generated time exceed these limits ?)
            - On RNGAdapter
            - On macros
        - Closures
    - Date based methods and macros
        - Macro registration assertion
        - Consistency of generated randoms based on seed
        - Unique identifier (parameter and auto)
        - Invalid params (out of range, min-max order, format)
        - Closures
    - Unified macro usage feature test
    - Timezone tests
        - Applying timezone works in conjunction with time macros
        - Applying timezone works in conjunction with date macros
    - \[CRUCIBLE!\] Merge all distributed date-time iteration methods in tests into one
- [Use case from reddit, N1](https://www.reddit.com/r/laravel/comments/18v714l/comment/ktkyc72/?utm_source=share&utm_medium=web2x&context=3)
- Possible bug: `->dateOfWeek` and `->dateOfWeekIso` differ per monday-sunday diff in start. Check existing assertions.

Credits &amp; References
------------------------

[](#credits--references)

### Endorsement &amp; media

[](#endorsement--media)

- Featured post on **Laravel News**

    - [LinkedIn announcement](https://www.linkedin.com/posts/laravel-news_randomize-command-execution-time-with-the-activity-7204478587154874368-20I_?utm_source=share&utm_medium=member_desktop&rcm=ACoAACI6CJIB5Ovt6opOu7H5tiFTGvt-xR0kdEo)
    - [Blog post](https://laravel-news.com/chaotic-schedule-pacakge-for-laravel) by Paul Redmond
    - [LinkedIn Initial release announcement on](https://www.linkedin.com/posts/laravel-news_release-v110-skywarthchaotic-schedule-activity-7204135330101248004-wrIL?utm_source=share&utm_medium=member_desktop&rcm=ACoAACI6CJIB5Ovt6opOu7H5tiFTGvt-xR0kdEo)
    - Kudos to the author and Laravel News for allowing this package to reach a greater audience
- Featured on **Best of Laravel**

    -
    - [LinkedIn post](https://www.linkedin.com/posts/bestoflaravel_dailyresource-php-laravel-activity-7345302103545810945-Bp8x?utm_source=share&utm_medium=member_desktop&rcm=ACoAACI6CJIB5Ovt6opOu7H5tiFTGvt-xR0kdEo)
    - [Instagram post](https://www.instagram.com/p/DLgs6XlItz3/?utm_source=ig_web_copy_link)
    - There is also some Twitter post too

### RNGs

[](#rngs)

- [Mersenne Twister](https://github.com/ruafozy/php-mersenne-twister)
- [Seed Spring](https://github.com/paragonie/seedspring)
-  (Not Implemented)
-  (Not Implemented)

### IDE

[](#ide)

This project has been developed using JetBrains products. Thanks for their [support for open-source development](https://www.jetbrains.com/community/opensource/#support).

[![JetBrains Logo (Main) logo.](https://camo.githubusercontent.com/3cf726e7cdadba47755b7f7ea4227945a92a2fa48aadf4a2573140ec6501c989/68747470733a2f2f7265736f75726365732e6a6574627261696e732e636f6d2f73746f726167652f70726f64756374732f636f6d70616e792f6272616e642f6c6f676f732f6a625f6265616d2e737667)](https://camo.githubusercontent.com/3cf726e7cdadba47755b7f7ea4227945a92a2fa48aadf4a2573140ec6501c989/68747470733a2f2f7265736f75726365732e6a6574627261696e732e636f6d2f73746f726167652f70726f64756374732f636f6d70616e792f6272616e642f6c6f676f732f6a625f6265616d2e737667)[![PhpStorm logo.](https://camo.githubusercontent.com/1e31d98d23a59aa7fddbdae1155126adeac9ad6cded9a478fc8c5d377942c433/68747470733a2f2f7265736f75726365732e6a6574627261696e732e636f6d2f73746f726167652f70726f64756374732f636f6d70616e792f6272616e642f6c6f676f732f50687053746f726d2e737667)](https://camo.githubusercontent.com/1e31d98d23a59aa7fddbdae1155126adeac9ad6cded9a478fc8c5d377942c433/68747470733a2f2f7265736f75726365732e6a6574627261696e732e636f6d2f73746f726167652f70726f64756374732f636f6d70616e792f6272616e642f6c6f676f732f50687053746f726d2e737667)

###  Health Score

45

—

FairBetter than 93% of packages

Maintenance51

Moderate activity, may be stable

Popularity43

Moderate usage in the ecosystem

Community11

Small or concentrated contributor base

Maturity58

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 98.8% 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 ~105 days

Recently: every ~131 days

Total

7

Last Release

362d ago

Major Versions

v0.2.1-beta → v1.0.02023-12-13

v1.1.0 → v2.0.02025-05-22

PHP version history (2 changes)v1.0.0PHP &gt;=7.4

v2.0.0PHP &gt;=8.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/324ea42ba1f4d1d9a88440dddb1fe6ec30174f9388a8ca765514c8bb086353b1?d=identicon)[skywarth](/maintainers/skywarth)

---

Top Contributors

[![skywarth](https://avatars.githubusercontent.com/u/23261263?v=4)](https://github.com/skywarth "skywarth (161 commits)")[![deepsource-io[bot]](https://avatars.githubusercontent.com/in/16372?v=4)](https://github.com/deepsource-io[bot] "deepsource-io[bot] (2 commits)")

---

Tags

commandlaravellaravel-packagelaravel-randommersenne-twisterphpphp-prngprngrandomrandom-intervalrandom-scheduleschedulerandomlaravelschedulecommandPRNGrandom-schedulelaravel-randomrandom-intervalrandom-frequency

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/skywarth-chaotic-schedule/health.svg)

```
[![Health](https://phpackages.com/badges/skywarth-chaotic-schedule/health.svg)](https://phpackages.com/packages/skywarth-chaotic-schedule)
```

###  Alternatives

[laraveljutsu/zap

A flexible, performant, and developer-friendly schedule management system for Laravel

1.4k69.1k](/packages/laraveljutsu-zap)[msztorc/laravel-env

Laravel env helper commands

7855.4k](/packages/msztorc-laravel-env)[tkachikov/chronos

Settings commands for Laravel Scheduling

173.4k](/packages/tkachikov-chronos)[indeev/laravel-schedule-calendar

Laravel Schedule Calendar - a package providing developers with a concise and visual representation of scheduled tasks, enabling easy analysis of load distribution throughout the day or week for optimized task scheduling.

557.7k](/packages/indeev-laravel-schedule-calendar)

PHPackages © 2026

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