PHPackages                             hpwebdeveloper/laravel-failed-jobs - 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. [Queues &amp; Workers](/categories/queues)
4. /
5. hpwebdeveloper/laravel-failed-jobs

ActiveLibrary[Queues &amp; Workers](/categories/queues)

hpwebdeveloper/laravel-failed-jobs
==================================

UI for Laravel failed jobs.

v1.0.1(2y ago)183.2k↓83.3%2MITPHPPHP ^7.3|^8.0CI passing

Since Jan 31Pushed 5mo ago1 watchersCompare

[ Source](https://github.com/HPWebdeveloper/laravel-failed-jobs)[ Packagist](https://packagist.org/packages/hpwebdeveloper/laravel-failed-jobs)[ RSS](/packages/hpwebdeveloper-laravel-failed-jobs/feed)WikiDiscussions main Synced 3d ago

READMEChangelog (2)Dependencies (12)Versions (4)Used By (0)

[![Build Status](https://github.com/HPWebdeveloper/laravel-failed-jobs/workflows/tests/badge.svg)](https://github.com/HPWebdeveloper/laravel-failed-jobs/actions)[![Latest Stable Version](https://camo.githubusercontent.com/e4120219649a2d5b6ef18b647b4af0bd5e84adef05ad2ccffe57ee652a0d67a7/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f4850576562646576656c6f7065722f6c61726176656c2d6661696c65642d6a6f6273)](https://packagist.org/packages/HPWebdeveloper/laravel-failed-jobs)[![License](https://camo.githubusercontent.com/4d17c584a46a9e0e767a5d3150bc2c2e972d8cd50341082b8cd102df0dd65c0f/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f4850576562646576656c6f7065722f6c61726176656c2d6661696c65642d6a6f6273)](https://packagist.org/packages/HPWebdeveloper/laravel-failed-jobs)

Laravel Failed Jobs
===================

[](#laravel-failed-jobs)

👉 Laravel-Failed-Jobs gives you a Horizon-like dashboard just for failed jobs, even **when you’re not using Redis or Horizon**.

👉 It reads directly from the failed\_jobs table and lets you see **payloads**, **exceptions**, and **details clearly in a UI**, instead of digging through the database.

👉 View only (no retry/delete management), works with any queue driver, and can run **locally or remotely** from another Laravel app.

Introduction:
-------------

[](#introduction)

If you're running an application with a queue driver other than Redis or dispatch a job to [a particular connection](https://laravel.com/docs/10.x/queues#dispatching-to-a-particular-connection)other than Redis, which is exclusively supported by [Laravel Horizon](https://laravel.com/docs/10.x/horizon), you might be missing out on the elegant features that Horizon offers. Laravel Horizon is known for its elegance and a wide range of implemented features. One of its standout features is its ability to present detailed information about failed job payloads and automatically load new failed jobs.

In your specific application, if you've been longing for a similar Horizon-like UI to monitor failed jobs, the Laravel-Failed-Jobs package has got you covered. This package streamlines the visualization of failed jobs, eliminating the need to connect to a database client and search through `failed_jobs` records to identify the cause of a job's failure.

[![Screenshot 2024-02-01 at 7 55 42 PM](https://private-user-images.githubusercontent.com/16323354/301670231-2ec7ebad-1ad9-4927-8bff-5ce4002e1a7c.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODMxODc3NTksIm5iZiI6MTc4MzE4NzQ1OSwicGF0aCI6Ii8xNjMyMzM1NC8zMDE2NzAyMzEtMmVjN2ViYWQtMWFkOS00OTI3LThiZmYtNWNlNDAwMmUxYTdjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA3MDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNzA0VDE3NTA1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ5MzgwMzc5ZGM0ZDIzODhiY2I5ZWVmNjY4ZGRiZjNkYmM0MzU3MjA4ODZhNWU5ZDcyYmUzODhhMjRjM2YxM2EmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.ihFT0w3M6lmRywGgaG7J3dOto3zfdUF31aEJ6CAYmZA)](https://private-user-images.githubusercontent.com/16323354/301670231-2ec7ebad-1ad9-4927-8bff-5ce4002e1a7c.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODMxODc3NTksIm5iZiI6MTc4MzE4NzQ1OSwicGF0aCI6Ii8xNjMyMzM1NC8zMDE2NzAyMzEtMmVjN2ViYWQtMWFkOS00OTI3LThiZmYtNWNlNDAwMmUxYTdjLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA3MDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNzA0VDE3NTA1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWQ5MzgwMzc5ZGM0ZDIzODhiY2I5ZWVmNjY4ZGRiZjNkYmM0MzU3MjA4ODZhNWU5ZDcyYmUzODhhMjRjM2YxM2EmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.ihFT0w3M6lmRywGgaG7J3dOto3zfdUF31aEJ6CAYmZA)

Key Benefits:
-------------

[](#key-benefits)

- Seamless Integration: You can seamlessly integrate the Laravel-Failed-Jobs package into your project, even if you are already using Laravel Horizon. There's no conflict between the two.
- While Horizon primarily reads and writes data to Redis, Laravel-Failed-Jobs retrieves data from the failed\_jobs table.
- With Laravel-Failed-Jobs, you can enjoy the convenience of monitoring failed jobs in your application, regardless of your queue driver. This package brings the elegance of Laravel Horizon's failed jobs UI to your specific setup.
- Remote Connection Mode: This package offers two operational modes, each with its distinct setup. The Basic mode setup enabling dashboard authentication mirror that of Laravel Horizon. Remote mode is particularly beneficial for applications functioning solely as API service providers, where there is no user model or admin user. In such scenarios, the Gate definition within `FailedJobsServiceProvider`, which typically restricts access the Laravel-Failed-Jobs dashboard in non-local environments, is not applicable. Remote mode enables access to the main application from a separate Laravel application, hosted on a distinct URL address, in both local and production environments.

As you correctly understood, it's important to note that the Laravel-Failed-Jobs package focuses solely on enhancing the visualization of failed jobs and does not offer managing of failed jobs or the comprehensive set of robust features found in Laravel Horizon.

I - Installation (basic mode):
------------------------------

[](#i---installation-basic-mode)

If you have already installed Laravel Horizon, you can still install Laravel-Failed-Jobs without any conflict. Also it follows the same installation process as Laravel Horizon.

You may install Laravel-Failed-Jobs package into your project using the Composer package manager:

```
composer require hpwebdeveloper/laravel-failed-jobs
```

After installing Laravel-Failed-Jobs, publish the assets using the `failedjobs:install` Artisan command.

```
php artisan failedjobs:install
```

This command will automatically publish the `failedjobs` config file, `FailedJobsServiceProvider`service provider and also the resource view files into the `public/vendor/failedjobs` directory.

To upgrade the package, you need to use the following command after upgrading via composer:

```
php artisan failedjobs:publish
```

You may need to modify the `FailedJobsServiceProvider` to determine who can access the dashboard in production environment.

Dashboard
---------

[](#dashboard)

The Laravel-Failed-Jobs dashboard is accessible through the `/failedjobs` route by default. However, if you wish to define a new path, you can do so by setting the `FAILEDJOBS_PATH` variable in the `.env` file.

Dashboard Authorization
-----------------------

[](#dashboard-authorization)

The`app/Providers/FailedJobsServiceProvider.php` class applies Laravel `Gate` to determine who can access FailedJobs in non-local environments. You need to follow the [same document of Horizon](https://laravel.com/docs/10.x/horizon#dashboard-authorization)to secure the dashboard in production environment.

[![Screenshot 2024-02-01 at 7 54 17 PM](https://private-user-images.githubusercontent.com/16323354/301670278-05abc4ab-ede6-4e90-b713-bc540015435d.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODMxODc3NTksIm5iZiI6MTc4MzE4NzQ1OSwicGF0aCI6Ii8xNjMyMzM1NC8zMDE2NzAyNzgtMDVhYmM0YWItZWRlNi00ZTkwLWI3MTMtYmM1NDAwMTU0MzVkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA3MDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNzA0VDE3NTA1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWNiNWU1NmQ5YjMyMWI0YTUxMGUxZThjMWU4NTRlYzU4OTFkY2M2OGU0M2RhYzZkNzZmZDlmODljMjhmZjliNTYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.nGZhrcN3-Xj-5U-_7gbXv1RUc6aB8WMl-5kANvN_W0g)](https://private-user-images.githubusercontent.com/16323354/301670278-05abc4ab-ede6-4e90-b713-bc540015435d.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODMxODc3NTksIm5iZiI6MTc4MzE4NzQ1OSwicGF0aCI6Ii8xNjMyMzM1NC8zMDE2NzAyNzgtMDVhYmM0YWItZWRlNi00ZTkwLWI3MTMtYmM1NDAwMTU0MzVkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA3MDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNzA0VDE3NTA1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPWNiNWU1NmQ5YjMyMWI0YTUxMGUxZThjMWU4NTRlYzU4OTFkY2M2OGU0M2RhYzZkNzZmZDlmODljMjhmZjliNTYmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.nGZhrcN3-Xj-5U-_7gbXv1RUc6aB8WMl-5kANvN_W0g)

[![Screenshot 2024-02-01 at 7 55 27 PM](https://private-user-images.githubusercontent.com/16323354/301670338-30e1dd9e-316b-4d8e-80a4-ef7df195bbcd.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODMxODc3NTksIm5iZiI6MTc4MzE4NzQ1OSwicGF0aCI6Ii8xNjMyMzM1NC8zMDE2NzAzMzgtMzBlMWRkOWUtMzE2Yi00ZDhlLTgwYTQtZWY3ZGYxOTViYmNkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA3MDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNzA0VDE3NTA1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ2YmU0ZTQ5MzYwOTk2YjkwYjNmZGEzY2Q0MWVkN2FiZjFlZDI3MWZmZWY4MDk2NzIyOGY1OGFjMTQ4ZDFkZTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.cHiVDGORLqCJ6BLZjJuoMsVYvOcQ775_vpAQY6GWieo)](https://private-user-images.githubusercontent.com/16323354/301670338-30e1dd9e-316b-4d8e-80a4-ef7df195bbcd.png?jwt=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3ODMxODc3NTksIm5iZiI6MTc4MzE4NzQ1OSwicGF0aCI6Ii8xNjMyMzM1NC8zMDE2NzAzMzgtMzBlMWRkOWUtMzE2Yi00ZDhlLTgwYTQtZWY3ZGYxOTViYmNkLnBuZz9YLUFtei1BbGdvcml0aG09QVdTNC1ITUFDLVNIQTI1NiZYLUFtei1DcmVkZW50aWFsPUFLSUFWQ09EWUxTQTUzUFFLNFpBJTJGMjAyNjA3MDQlMkZ1cy1lYXN0LTElMkZzMyUyRmF3czRfcmVxdWVzdCZYLUFtei1EYXRlPTIwMjYwNzA0VDE3NTA1OVomWC1BbXotRXhwaXJlcz0zMDAmWC1BbXotU2lnbmF0dXJlPTQ2YmU0ZTQ5MzYwOTk2YjkwYjNmZGEzY2Q0MWVkN2FiZjFlZDI3MWZmZWY4MDk2NzIyOGY1OGFjMTQ4ZDFkZTkmWC1BbXotU2lnbmVkSGVhZGVycz1ob3N0JnJlc3BvbnNlLWNvbnRlbnQtdHlwZT1pbWFnZSUyRnBuZyJ9.cHiVDGORLqCJ6BLZjJuoMsVYvOcQ775_vpAQY6GWieo)

II - Installation (remote mode):
--------------------------------

[](#ii---installation-remote-mode)

Remote mode enables access to the main application from a separate Laravel application, hosted on a distinct URL address, in both local and production environments.

### Prepare package in both applications

[](#prepare-package-in-both-applications)

To use this package in remote mode, you need to install the package in both main and remote applications.

You may install the Laravel-Failed-Jobs package into your project using the composer package manager:

Note: currently the remote feature is under `feature/remote-connect` branch.

```
composer require hpwebdeveloper/laravel-failed-jobs:dev-feature/remote-connect
```

Then install the assets using the `failedjobs:install` Artisan command.

```
php artisan failedjobs:install
```

### Prepare the environments variables

[](#prepare-the-environments-variables)

In this mode you need to propertly configure the following environment variables in both applications:

```
    'axios_base_url' => env('AXIOS_BASE_URL', ''),
    'server_access_token' => env('FAILEDJOBS_SERVER_ACCESS_TOKEN'),
    'dashboard_access_token' => env('FAILEDJOBS_DASHBOARD_ACCESS_TOKEN'),
```

`axios_base_url` is the base URL of the main application which you have to set in the local/remote application. Setting this variable is mandatory in remote mode.

`server_access_token` is the access token to access the main application from the remote application. It is mandatory to set this variable in the main application `.env` file. It is mandatory to set `dashboard_access_token` variable in the remote application equal to the value of the `server_access_token` in the main application.

### Secure the endpoint

[](#secure-the-endpoint)

As in the `failedjobs` config file defined, the dashboard is accessible through the `/failedjobs` route by default. But it is recommended to change it when using the package in the remote mode.

It is simply possible by setting the `FAILEDJOBS_PATH` variable in the `.env`file of both applications with a hash value and then define that value as a path in the `cors` config file of the main application.

Modifying the `cors` config file in the main application is required because in the remote mode we are dealing with two different applications served in two different URLs. Laravel automatically respond to Cross-Origin Resource Sharing (CORS) OPTIONS HTTP requests with values that you configure in the `cors` config file. Read more about [CORS](https://laravel.com/docs/10.x/routing#cors).

Hence in summary

- Set the `FAILEDJOBS_PATH` variable in the `.env` file of the **main** application with a hash value like `failedjobs_4a5b6c7d`
- Set the `FAILEDJOBS_PATH` variable in the `.env` file of the **remote** application with a hash value like `failedjobs_4a5b6c7d`
- Open the `cors.php` config file of the main application and modify the following code accordingly:

```
// before
        'paths' => ['api/*', 'sanctum/csrf-cookie'],
// after
        'paths' => ['failedjobs_4a5b6c7d/*', 'api/*', 'sanctum/csrf-cookie'],
```

Then access the dashboard using the following URL: `http://your-local-application.test/failedjobs_4a5b6c7d`.

As your main application is configured like `APP_ENV=production`the Failed-Jobs dashboard is not accessible in the production environment. While you can access the dashboard in the local environment through this URL: `http://your-local-application.test/failedjobs_4a5b6c7d`.

Of course you can access the dashboard in the main application if you set the `axios_base_url` variable in the main application `.env` file as well.

Licensing
---------

[](#licensing)

This repository uses two licenses:

- The original codebase is distributed under the MIT License (MIT) (Copyright (c) Taylor Otwell), which you can find in the [LICENSE](https://github.com/HPWebdeveloper/laravel-failed-jobs/blob/main/LICENSE.md) file.
- Any modifications made to the original codebase are subject to our own license, which you can find in the [LICENSE](https://github.com/HPWebdeveloper/laravel-failed-jobs/blob/main/LICENSE.md) file.

###  Health Score

36

—

LowBetter than 79% of packages

Maintenance48

Moderate activity, may be stable

Popularity27

Limited adoption so far

Community9

Small or concentrated contributor base

Maturity49

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

Total

2

Last Release

884d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/cc1b18dc5a22ae254c91a5f3a247951d882ba99594b59a746dfd9f68901babd8?d=identicon)[panjeh](/maintainers/panjeh)

---

Top Contributors

[![HPWebdeveloper](https://avatars.githubusercontent.com/u/16323354?v=4)](https://github.com/HPWebdeveloper "HPWebdeveloper (13 commits)")

---

Tags

failedjobslaravelqueuelaraveljobsfailed

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/hpwebdeveloper-laravel-failed-jobs/health.svg)

```
[![Health](https://phpackages.com/badges/hpwebdeveloper-laravel-failed-jobs/health.svg)](https://phpackages.com/packages/hpwebdeveloper-laravel-failed-jobs)
```

###  Alternatives

[laravel/horizon

Dashboard and code-driven configuration for Laravel queues.

4.2k95.4M307](/packages/laravel-horizon)[laravel/framework

The Laravel Framework.

34.8k543.8M20.1k](/packages/laravel-framework)[illuminate/queue

The Illuminate Queue package.

21332.6M1.6k](/packages/illuminate-queue)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9762.4M131](/packages/roots-acorn)[laravel/pulse

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

1.7k15.1M132](/packages/laravel-pulse)[tightenco/jigsaw

Simple static sites with Laravel's Blade.

2.3k453.6k30](/packages/tightenco-jigsaw)

PHPackages © 2026

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