PHPackages                             deck/deck - 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. deck/deck

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

deck/deck
=========

Job-class observability and safe cancellation for Laravel queues. Works with or without Horizon.

1.1.10(1w ago)087↓75%MITPHPPHP ^8.3CI passing

Since May 17Pushed 1w agoCompare

[ Source](https://github.com/getdeckapp/deck)[ Packagist](https://packagist.org/packages/deck/deck)[ Docs](https://github.com/getdeckapp/deck)[ GitHub Sponsors](https://github.com/tormjens)[ RSS](/packages/deck-deck/feed)WikiDiscussions master Synced 1w ago

READMEChangelog (10)Dependencies (32)Versions (30)Used By (0)

Deck
====

[](#deck)

**Job-class observability and safe cancellation for Laravel apps running [Horizon](https://laravel.com/docs/horizon).**

> Horizon flies the workers. Deck runs the operation.

Deck is a **durable control plane** on top of Horizon: per job-class history, searchable executions, cooperative cancel, dispatch blocking, and optional **[Deck Cloud](https://deckapp.cloud)** when you run many services. It does not replace `php artisan horizon`.

---

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

[](#quick-start)

```
composer require deck/deck
php artisan deck:install
php artisan migrate
```

Open `/deck`. Reuse Horizon’s authorization gate by default.

```
DECK_PROJECT=billing-api
DECK_ENVIRONMENT=production
```

Optional Cloud agent (three variables):

```
DECK_API_KEY=your-agent-token
```

---

Documentation
-------------

[](#documentation)

Guide[Getting started](docs/getting-started.md)Install, migrate, Horizon auth, assets[Horizon &amp; Deck](docs/horizon.md)What each tool is for[Usage](docs/usage.md)Dashboard, cancel, block, retry, alerts[Production](docs/production.md)Dedicated DB, retention, Redis, security[Configuration](docs/configuration.md)Environment variables and config keys[Deck Cloud](docs/deck-cloud.md)Multi-app control plane and agent APIAlso on **[deckapp.cloud/docs](https://deckapp.cloud/docs)** when published.

**Changelog:** [CHANGELOG.md](CHANGELOG.md) · **Security:** [SECURITY.md](SECURITY.md)

---

Why Deck?
---------

[](#why-deck)

Horizon gives youDeck addsWorker supervision and auto-balancingPer job-class **last run** and statusRecent jobs in Redis (short retention)**Durable execution log** in your databaseFailed job retry UI**Search and filter** by class, queue, connection, tagThroughput and wait-time metrics**Cooperative cancel** and **block job classes**—**Stale-job** and **unprocessed-queue** alertsEvery row is scoped by `project` and `environment` for multi-app teams and Deck Cloud.

---

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

[](#requirements)

PHP 8.3+ · Laravel 11–13 · Database · Redis (queues + cancel/block flags) · [Horizon](https://laravel.com/docs/horizon) 5.x recommended

---

Development
-----------

[](#development)

```
composer test
```

---

License
-------

[](#license)

MIT © [Tor Morten Jensen](https://github.com/tormjens). See [LICENSE.md](LICENSE.md).

###  Health Score

48

—

FairBetter than 94% of packages

Maintenance98

Actively maintained with recent releases

Popularity13

Limited adoption so far

Community11

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 88% 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

24

Last Release

8d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/16b2089f55ff5ab3154ef21caec78446d23b1515cc074d2d1c2bf184a9e64603?d=identicon)[tormjens](/maintainers/tormjens)

---

Top Contributors

[![tormjens](https://avatars.githubusercontent.com/u/3974889?v=4)](https://github.com/tormjens "tormjens (73 commits)")[![claude](https://avatars.githubusercontent.com/u/81847?v=4)](https://github.com/claude "claude (3 commits)")[![cursoragent](https://avatars.githubusercontent.com/u/199161495?v=4)](https://github.com/cursoragent "cursoragent (3 commits)")[![Copilot](https://avatars.githubusercontent.com/in/1143301?v=4)](https://github.com/Copilot "Copilot (2 commits)")[![dependabot[bot]](https://avatars.githubusercontent.com/in/29110?v=4)](https://github.com/dependabot[bot] "dependabot[bot] (2 commits)")

---

Tags

laravelqueuejobshorizondeck

###  Code Quality

TestsPest

Static AnalysisPHPStan

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/deck-deck/health.svg)

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

###  Alternatives

[psalm/plugin-laravel

Psalm plugin for Laravel

3325.1M337](/packages/psalm-plugin-laravel)[laravel/horizon

Dashboard and code-driven configuration for Laravel queues.

4.1k91.3M277](/packages/laravel-horizon)[spatie/laravel-health

Monitor the health of a Laravel application

88011.3M149](/packages/spatie-laravel-health)[laravel/pulse

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

1.7k14.1M120](/packages/laravel-pulse)[harris21/laravel-fuse

Circuit breaker for Laravel queue jobs. Protect your workers from cascading failures.

24740.3k](/packages/harris21-laravel-fuse)[laravel/ai

The official AI SDK for Laravel.

9782.1M153](/packages/laravel-ai)

PHPackages © 2026

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