PHPackages                             pascallieverse/laravel-dawn - 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. [Caching](/categories/caching)
4. /
5. pascallieverse/laravel-dawn

ActiveLibrary[Caching](/categories/caching)

pascallieverse/laravel-dawn
===========================

Rust-powered Laravel queue manager dashboard

0.1.14(1mo ago)0178↓33.3%MITPHPPHP ^8.1

Since Feb 16Pushed 1mo agoCompare

[ Source](https://github.com/pascallieverse/laravel-dawn)[ Packagist](https://packagist.org/packages/pascallieverse/laravel-dawn)[ RSS](/packages/pascallieverse-laravel-dawn/feed)WikiDiscussions main Synced 1mo ago

READMEChangelog (10)Dependencies (14)Versions (17)Used By (0)

Dawn (Experimantal)
===================

[](#dawn-experimantal)

Warning

**This project is experimantal**

This project is mostly written by AI and still experimantal, everything should work but needs to be tested and improved further)

A Rust-powered queue manager and dashboard for Laravel. Dawn replaces PHP as the queue worker — a compiled Rust binary pops jobs from Redis directly, delegates PHP execution via warm worker pools or isolated processes, and writes all metrics to Redis. A Livewire dashboard gives you real-time visibility into your queues.

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

[](#requirements)

- PHP 8.1+
- Laravel 10, 11, or 12
- Redis
- `ext-pcntl` (Linux/macOS only — not required on Windows)

Quick Start
-----------

[](#quick-start)

```
composer require pascallieverse/laravel-dawn
php artisan dawn:install
./vendor/bin/dawn
```

That's it. The install command handles everything:

- Publishes `config/dawn.php` and a service provider
- Sets `QUEUE_CONNECTION=dawn` in your `.env`
- Sets a unique `DAWN_PREFIX` based on your app name (safe for multi-project servers)
- Registers the queue connection automatically (no need to edit `config/queue.php`)

The Rust binary reads your Laravel config directly at startup (`php artisan dawn:export-config`) — no intermediate config files to maintain.

Dashboard
---------

[](#dashboard)

Visit `/dawn` in your browser. In non-local environments, access is controlled by the `viewDawn` gate in `app/Providers/DawnServiceProvider.php`:

```
protected function gate(): void
{
    Gate::define('viewDawn', function ($user) {
        return in_array($user->email, [
            'admin@example.com',
        ]);
    });
}
```

### Pages

[](#pages)

- **Dashboard** — Live stats and workload overview
- **Monitoring** — Tag-based job monitoring
- **Metrics** — Job and queue throughput/runtime
- **Performance** — Historical charts
- **Jobs** — Pending, processing, completed, failed, and silenced
- **Batches** — Job batch inspection

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

[](#configuration)

After install, the config lives at `config/dawn.php`. The defaults work out of the box — you only need to change things when tuning for production. Changes take effect the next time you restart the Dawn binary.

### Queues

[](#queues)

By default Dawn processes the `default` queue with up to 10 workers. To process additional queues:

```
'defaults' => [
    'supervisor-1' => [
        'queue' => ['default', 'emails', 'notifications'],
        'maxProcesses' => 10,
    ],
],
```

Or split into separate supervisors:

```
'defaults' => [
    'default' => [
        'queue' => ['default'],
        'maxProcesses' => 5,
    ],
    'emails' => [
        'queue' => ['emails'],
        'maxProcesses' => 3,
    ],
],
```

All other options have sensible defaults and are documented in the config file.

### Environment Overrides

[](#environment-overrides)

Override supervisor settings per environment:

```
'environments' => [
    'production' => [
        'supervisor-1' => [
            'maxProcesses' => 20,
        ],
    ],
    'local' => [
        'supervisor-1' => [
            'maxProcesses' => 3,
        ],
    ],
],
```

### Isolated Jobs

[](#isolated-jobs)

Jobs that should run in their own PHP process instead of the warm pool:

```
'isolated' => [
    App\Jobs\HeavyJob::class,
],
```

Or implement the `Dawn\Contracts\Isolated` interface on the job class.

### Silenced Jobs

[](#silenced-jobs)

Jobs excluded from monitoring and metrics:

```
'silenced' => [
    App\Jobs\FrequentPingJob::class,
],
```

Deploying to Production
-----------------------

[](#deploying-to-production)

### Generate a Service Config

[](#generate-a-service-config)

Dawn can generate a ready-to-use config for your process manager:

```
# Interactive — auto-detects your OS and suggests the right option
php artisan dawn:service

# Or specify directly
php artisan dawn:service supervisor   # Linux (Supervisor)
php artisan dawn:service systemd      # Linux (systemd)
php artisan dawn:service launchd      # macOS
php artisan dawn:service windows      # Windows (NSSM)
```

Options:

```
php artisan dawn:service supervisor --user=deploy --log=/var/log/dawn.log
```

#### Supervisor (Linux)

[](#supervisor-linux)

```
php artisan dawn:service supervisor
# Outputs: dawn-{app-name}-supervisor.conf
sudo cp dawn-*-supervisor.conf /etc/supervisor/conf.d/
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start dawn-my-app
```

#### systemd (Linux)

[](#systemd-linux)

```
php artisan dawn:service systemd
# Outputs: dawn-{app-name}.service
sudo cp dawn-*.service /etc/systemd/system/
sudo systemctl daemon-reload
sudo systemctl enable dawn-my-app
sudo systemctl start dawn-my-app
```

#### launchd (macOS)

[](#launchd-macos)

```
php artisan dawn:service launchd
# Outputs: com.dawn.{app-name}.plist
cp com.dawn.my-app.plist ~/Library/LaunchAgents/
launchctl load ~/Library/LaunchAgents/com.dawn.my-app.plist
```

#### Windows Service (NSSM)

[](#windows-service-nssm)

```
php artisan dawn:service windows
# Outputs: dawn-{app-name}.bat (foreground) + NSSM install instructions
```

To run as a Windows Service, install [NSSM](https://nssm.cc) and follow the printed instructions. Dawn also generates a `.bat` file for running in the foreground during development.

The generated configs include the correct paths to your PHP binary and project directory — no manual editing needed. On Forge servers, the user is auto-detected (including isolated sites).

### Deploying on Laravel Forge

[](#deploying-on-laravel-forge)

Forge uses Supervisor under the hood, so Dawn integrates naturally.

#### 1. Install Dawn in your project

[](#1-install-dawn-in-your-project)

```
composer require pascallieverse/laravel-dawn
php artisan dawn:install
```

Commit the changes (`config/dawn.php`, `DawnServiceProvider.php`, `.env` updates) and deploy.

#### 2. Create a Daemon in Forge

[](#2-create-a-daemon-in-forge)

In the Forge dashboard, go to your server → **Daemons** → **Create Daemon**.

You must use the **absolute path** to the Dawn binary and specify your PHP version explicitly. Replace `{user}` with your Forge site user (e.g. `forge`, or the isolated site user) and `{site}` with your site directory name:

FieldValueCommandSee belowUser`{user}`Directory`/home/{user}/{site}`Processes`1`Start Seconds`1`Stop Seconds`15`Stop Signal`SIGTERM`**Command** (must be a single line with absolute paths):

```
/home/{user}/{site}/vendor/pascallieverse/laravel-dawn/bin/dawn-linux-x64 --php /usr/bin/php8.4 --log-file /home/{user}/.forge/dawn.log

```

Adjust `php8.4` to match your site's PHP version (`php8.3`, `php8.2`, etc.).

> **Important:** Only run **1 process** — Dawn manages its own worker pool internally. Running multiple Dawn processes will cause duplicate job execution.

Click **Save**. Forge will create and start the Supervisor config automatically.

#### 3. Configure the Dashboard Gate

[](#3-configure-the-dashboard-gate)

Edit `app/Providers/DawnServiceProvider.php` to grant dashboard access:

```
protected function gate(): void
{
    Gate::define('viewDawn', function ($user) {
        return in_array($user->email, [
            'your-email@example.com',
        ]);
    });
}
```

Visit `https://your-site.com/dawn` to access the dashboard.

#### 4. Add to your Deployment Script

[](#4-add-to-your-deployment-script)

In the Forge dashboard, go to your site → **Deployments** → **Deployment Script**. Add the following after `composer install`:

```
# Ensure Dawn binary is executable (Composer doesn't preserve permissions)
chmod +x vendor/pascallieverse/laravel-dawn/bin/dawn-linux-x64

# Restart Dawn (finishes current jobs, then Supervisor restarts it)
php artisan dawn:terminate
```

A full deployment script example:

```
cd /home/{user}/{site}

git pull origin $FORGE_SITE_BRANCH

composer install --no-dev --no-interaction --prefer-dist --optimize-autoloader

# Ensure Dawn binary is executable
chmod +x vendor/pascallieverse/laravel-dawn/bin/dawn-linux-x64

php artisan migrate --force

# Restart Dawn (finishes current jobs, then Supervisor restarts it)
php artisan dawn:terminate

php artisan config:cache
php artisan route:cache
php artisan view:cache
```

#### 5. Verify it's Running

[](#5-verify-its-running)

```
# Check the Dawn log
cat /home/{user}/.forge/dawn.log

# Or check Supervisor directly
sudo supervisorctl status
```

#### Troubleshooting on Forge

[](#troubleshooting-on-forge)

- **Dawn won't start / stops immediately with no log** — Make sure the daemon command uses **absolute paths** (not relative). Supervisor does not reliably resolve relative paths even with a `directory` setting. Also ensure the binary is executable (`chmod +x`).
- **"Exec format error"** — You're running the wrong binary for your server's architecture. Forge servers are typically `linux-x64`. Use `dawn-linux-x64`, not the macOS or ARM binary.
- **Jobs not processing** — Verify `QUEUE_CONNECTION=dawn` in your `.env` and that Redis is running. Run `php artisan dawn:export-config` to check the resolved configuration.
- **Dashboard returns 403** — Update the `viewDawn` gate in `DawnServiceProvider.php` with your email.
- **Wrong PHP version** — Forge servers with multiple PHP versions need the explicit `--php /usr/bin/php8.x` flag. The bare `php` command may point to a different version or not be in Supervisor's PATH.

### Static Config File

[](#static-config-file)

By default Dawn reads config from Laravel at startup. If you prefer a static config file (e.g. for faster startup or to pin a known-good config):

```
php artisan dawn:export-config > dawn.json
./vendor/bin/dawn --config dawn.json
```

### Multiple Projects on One Server

[](#multiple-projects-on-one-server)

Dawn handles this automatically. Each project gets:

- **Unique Redis prefix** — `dawn:install` sets `DAWN_PREFIX=dawn:{app_name}:` in `.env`, so each project's keys are isolated even on a shared Redis server.
- **Unique service name** — `dawn:service` names the service `dawn-{app-name}` (e.g. `dawn-my-shop`, `dawn-admin-panel`), so multiple services can coexist.

If you need to change the prefix after install, update `DAWN_PREFIX` in `.env` and restart Dawn.

### CLI Options

[](#cli-options)

OptionDefaultDescription`--config`Path to a static JSON config (if omitted, reads from Laravel)`--working-dir``.`Laravel project root`--php``php`PHP binary path`--environment`Override app environment`--log-level``info``debug`, `info`, `warn`, `error``--log-file`Log to file instead of stderrArtisan Commands
----------------

[](#artisan-commands)

CommandDescription`dawn:install`Install Dawn (config, assets, .env setup)`dawn:service`Generate service config (Supervisor, systemd, launchd, Windows)`dawn:export-config`Export config as JSON (for static config or debugging)`dawn:status`Show supervisor status`dawn:pause`Pause queue processing`dawn:continue`Resume queue processing`dawn:terminate`Gracefully stop the supervisor`dawn:snapshot`Take a metrics snapshot`dawn:clear-metrics`Clear stored metrics`dawn:purge`Purge all Dawn data from RedisLicense
-------

[](#license)

MIT

###  Health Score

40

—

FairBetter than 88% of packages

Maintenance89

Actively maintained with recent releases

Popularity15

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity41

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 ~2 days

Total

15

Last Release

58d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/451a556e583ce3e8e5340fa10765bf2b325b6e9891f572f0b6d08926ee59561b?d=identicon)[pascallieverse](/maintainers/pascallieverse)

---

Top Contributors

[![pascallieverse](https://avatars.githubusercontent.com/u/10560507?v=4)](https://github.com/pascallieverse "pascallieverse (35 commits)")

---

Tags

laravelredisqueuedashboardrust

###  Code Quality

TestsPHPUnit

### Embed Badge

![Health badge](/badges/pascallieverse-laravel-dawn/health.svg)

```
[![Health](https://phpackages.com/badges/pascallieverse-laravel-dawn/health.svg)](https://phpackages.com/packages/pascallieverse-laravel-dawn)
```

###  Alternatives

[laravel/horizon

Dashboard and code-driven configuration for Laravel queues.

4.2k84.2M225](/packages/laravel-horizon)[laravel/pulse

Laravel Pulse is a real-time application performance monitoring tool and dashboard for your Laravel application.

1.7k12.1M99](/packages/laravel-pulse)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9682.1M97](/packages/roots-acorn)[yangusik/laravel-balanced-queue

Laravel queue management with load balancing between partitions (user groups)

786.4k](/packages/yangusik-laravel-balanced-queue)[monospice/laravel-redis-sentinel-drivers

Redis Sentinel integration for Laravel and Lumen.

103830.5k](/packages/monospice-laravel-redis-sentinel-drivers)[namoshek/laravel-redis-sentinel

An extension of Laravels Redis driver which supports connecting to a Redis master through Redis Sentinel.

38679.0k](/packages/namoshek-laravel-redis-sentinel)

PHPackages © 2026

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