PHPackages                             league/tactician - 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. [CLI &amp; Console](/categories/cli)
4. /
5. league/tactician

ActiveLibrary[CLI &amp; Console](/categories/cli)

league/tactician
================

A small, flexible command bus. Handy for building service layers.

v1.2.0(4mo ago)86415.4M—5.7%86[2 issues](https://github.com/thephpleague/tactician/issues)[1 PRs](https://github.com/thephpleague/tactician/pulls)20MITPHPPHP &gt;=7.1CI passing

Since Feb 12Pushed 4mo ago28 watchersCompare

[ Source](https://github.com/thephpleague/tactician)[ Packagist](https://packagist.org/packages/league/tactician)[ RSS](/packages/league-tactician/feed)WikiDiscussions 1.x Synced 1mo ago

READMEChangelog (10)Dependencies (3)Versions (17)Used By (20)

Tactician
=========

[](#tactician)

[![Scrutinizer Code Quality](https://camo.githubusercontent.com/f0dafcb12cc712652b32057c1b747c54f66d7cf0e6fdab3029d166c6f02ceeef/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f7468657068706c65616775652f74616374696369616e2f6261646765732f7175616c6974792d73636f72652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/thephpleague/tactician/?branch=master)[![Code Coverage](https://camo.githubusercontent.com/824b6b034de70b49199f291a6cb61651b734629d0f5c644d073a3986fc088f71/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f7468657068706c65616775652f74616374696369616e2f6261646765732f636f7665726167652e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/thephpleague/tactician/?branch=master)[![Build Status](https://camo.githubusercontent.com/171a53f028dae72171db8fb19c3870de8c5d359658287a99c5e5b6d2ec522e41/68747470733a2f2f7363727574696e697a65722d63692e636f6d2f672f7468657068706c65616775652f74616374696369616e2f6261646765732f6275696c642e706e673f623d6d6173746572)](https://scrutinizer-ci.com/g/thephpleague/tactician/build-status/master)[![MIT License](https://camo.githubusercontent.com/074b89bca64d3edc93a1db6c7e3b1636b874540ba91d66367c0e5e354c56d0ea/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d627269676874677265656e2e737667)](https://github.com/thephpleague/tactician/blob/master/LICENSE)[![SensioLabsInsight](https://camo.githubusercontent.com/c10184613e6dcc8bf9404fb2e7030dac2ec7afe4d1d6de6a26049931887e43d3/68747470733a2f2f696e73696768742e73656e73696f6c6162732e636f6d2f70726f6a656374732f35343237356137382d626337302d346262332d396163342d3465656537303063366131632f736d616c6c2e706e67)](https://insight.sensiolabs.com/projects/54275a78-bc70-4bb3-9ac4-4eee700c6a1c)

A small, pluggable command bus.

See the [full docs](http://tactician.thephpleague.com) or the examples directory to get started.

Install
-------

[](#install)

Using Composer:

`composer require league/tactician`

Plugins
-------

[](#plugins)

The core Tactician package is small but there are several plugin packages that extend the usefulness of Tactician:

- [Logger](https://github.com/thephpleague/tactician-logger): Adds PSR-3 logging support for receiving, completing or failing commands.
- [Container](http://github.com/thephpleague/tactician-container): Lazy load handlers from any container implementing container-interop.
- [Doctrine](https://github.com/thephpleague/tactician-doctrine): Wraps commands in separate Doctrine ORM transactions.
- [Bernard](https://github.com/thephpleague/tactician-bernard): Allows queuing your commands in the background, using [the Bernard Queuing library](https://github.com/bernardphp/bernard).
- [Command Events](https://github.com/thephpleague/tactician-command-events): Fires events for all major moments in the command life-cycle.
- [Locking](http://tactician.thephpleague.com/plugins/locking-middleware/): Only allows one command to be executed at a time.
- [and many more](https://packagist.org/search/?q=tactician)

Framework Integration
---------------------

[](#framework-integration)

There are a number of framework integration packages for Tactician, [search for Tactician on Packagist](https://packagist.org/search/?q=tactician) for the most up-to-date listings.

Testing
-------

[](#testing)

To run all unit tests, use the locally installed PHPUnit:

```
$ ./vendor/bin/phpunit

```

Security
--------

[](#security)

Tactician has no previous security disclosures and due to the nature of the project is unlikely to. However, if you're concerned you've found a security sensitive issue in Tactician or one of its related projects, please email disclosures \[at\] rosstuck dot com.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) for details.

###  Health Score

67

—

FairBetter than 100% of packages

Maintenance74

Regular maintenance activity

Popularity70

Solid adoption and visibility

Community48

Growing community involvement

Maturity66

Established project with proven stability

 Bus Factor1

Top contributor holds 70.9% 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 ~330 days

Recently: every ~736 days

Total

13

Last Release

148d ago

Major Versions

v0.6.1 → 1.02015-12-31

v1.0.3 → 2.0-rc12019-07-28

PHP version history (3 changes)v0.3.0PHP &gt;=5.5

2.0-rc1PHP &gt;=7.2

v1.1.0PHP &gt;=7.1

### Community

Maintainers

![](https://www.gravatar.com/avatar/08b3ff6fe26e7316ae1da92af62c040380ae6bb1056794d44c6151ac74240e54?d=identicon)[rosstuck](/maintainers/rosstuck)

---

Top Contributors

[![rosstuck](https://avatars.githubusercontent.com/u/146766?v=4)](https://github.com/rosstuck "rosstuck (144 commits)")[![sagikazarmark](https://avatars.githubusercontent.com/u/1226384?v=4)](https://github.com/sagikazarmark "sagikazarmark (13 commits)")[![boekkooi](https://avatars.githubusercontent.com/u/399895?v=4)](https://github.com/boekkooi "boekkooi (8 commits)")[![snapshotpl](https://avatars.githubusercontent.com/u/312655?v=4)](https://github.com/snapshotpl "snapshotpl (7 commits)")[![renan](https://avatars.githubusercontent.com/u/28046?v=4)](https://github.com/renan "renan (6 commits)")[![frankdejonge](https://avatars.githubusercontent.com/u/534693?v=4)](https://github.com/frankdejonge "frankdejonge (4 commits)")[![rtuin](https://avatars.githubusercontent.com/u/360150?v=4)](https://github.com/rtuin "rtuin (3 commits)")[![chalasr](https://avatars.githubusercontent.com/u/7502063?v=4)](https://github.com/chalasr "chalasr (3 commits)")[![tomaszhanc](https://avatars.githubusercontent.com/u/7013293?v=4)](https://github.com/tomaszhanc "tomaszhanc (2 commits)")[![localheinz](https://avatars.githubusercontent.com/u/605483?v=4)](https://github.com/localheinz "localheinz (2 commits)")[![acairns](https://avatars.githubusercontent.com/u/705212?v=4)](https://github.com/acairns "acairns (1 commits)")[![ZeljkaBlazek](https://avatars.githubusercontent.com/u/32762399?v=4)](https://github.com/ZeljkaBlazek "ZeljkaBlazek (1 commits)")[![GrahamCampbell](https://avatars.githubusercontent.com/u/2829600?v=4)](https://github.com/GrahamCampbell "GrahamCampbell (1 commits)")[![guiwoda](https://avatars.githubusercontent.com/u/1625545?v=4)](https://github.com/guiwoda "guiwoda (1 commits)")[![hannesvdvreken](https://avatars.githubusercontent.com/u/1410358?v=4)](https://github.com/hannesvdvreken "hannesvdvreken (1 commits)")[![javespi](https://avatars.githubusercontent.com/u/1534117?v=4)](https://github.com/javespi "javespi (1 commits)")[![jesseobrien](https://avatars.githubusercontent.com/u/865481?v=4)](https://github.com/jesseobrien "jesseobrien (1 commits)")[![jlaswell](https://avatars.githubusercontent.com/u/1676217?v=4)](https://github.com/jlaswell "jlaswell (1 commits)")[![lunika](https://avatars.githubusercontent.com/u/767834?v=4)](https://github.com/lunika "lunika (1 commits)")[![MarkRedeman](https://avatars.githubusercontent.com/u/1114829?v=4)](https://github.com/MarkRedeman "MarkRedeman (1 commits)")

---

Tags

command-bushacktoberfesttacticiancommandcommand busservice layer

###  Code Quality

TestsPHPUnit

Code StylePHP\_CodeSniffer

### Embed Badge

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

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

###  Alternatives

[league/climate

PHP's best friend for the terminal. CLImate allows you to easily output colored text, special formats, and more.

1.9k14.0M273](/packages/league-climate)[nategood/commando

PHP CLI Commando Style

8123.3M38](/packages/nategood-commando)[helhum/typo3-console

A reliable and powerful command line interface for TYPO3 CMS

2939.0M192](/packages/helhum-typo3-console)[adhocore/cli

Command line interface library for PHP

3501.2M50](/packages/adhocore-cli)[illuminated/console-mutex

Mutex for Laravel Console Commands.

146938.2k1](/packages/illuminated-console-mutex)[aura/cli

Provides the equivalent of request (Context) and response (Stdio) classes for a command line environment, including Getopt support.

1051.6M29](/packages/aura-cli)

PHPackages © 2026

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