PHPackages                             circli/event-dispatcher - 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. circli/event-dispatcher

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

circli/event-dispatcher
=======================

PSR-14 event dispatcher implementation.

3.0.0(2y ago)440.0k↓67.4%4MITPHPPHP ^8.0CI failing

Since Jan 21Pushed 5mo ago1 watchersCompare

[ Source](https://github.com/circli/event-dispatcher)[ Packagist](https://packagist.org/packages/circli/event-dispatcher)[ RSS](/packages/circli-event-dispatcher/feed)WikiDiscussions 3.x Synced yesterday

READMEChangelog (9)Dependencies (6)Versions (18)Used By (4)

Circli Event Dispatcher
=======================

[](#circli-event-dispatcher)

[![Latest Version on Packagist](https://camo.githubusercontent.com/ff21983e79fb33fe69b243d49812802010c383e22b1d1d760b4c368213fde528/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f636972636c692f6576656e742d646973706174636865722e737667)](https://packagist.org/packages/circli/event-dispatcher)[![Software License](https://camo.githubusercontent.com/0989e2305d0cca2da428e39ecb51de19689239876bd1843d392691c0b4e92bdf/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f6c6963656e73652f636972636c692f6576656e742d646973706174636865722e737667)](LICENSE.md)[![Build Status](https://github.com/circli/event-dispatcher/actions/workflows/unit-test.yml/badge.svg)](https://github.com/circli/event-dispatcher/actions/workflows/unit-test.yml)[![Coverage Status](https://camo.githubusercontent.com/70bc0b0d1c7b66100ce6c13d61e119b55610bd2131c6b56b48360b82b37eaa99/68747470733a2f2f636f766572616c6c732e696f2f7265706f732f6769746875622f636972636c692f6576656e742d646973706174636865722f62616467652e7376673f6272616e63683d322e78)](https://coveralls.io/github/circli/event-dispatcher?branch=2.x)

The package provides a standard event dispatcher, as well as one null dispatcher that can be used as default dispatcher in the `EventDispatcherAwareInterface`

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

[](#installation)

Via Composer

```
$ composer require circli/event-dispatcher

```

Usage
-----

[](#usage)

The dispatcher accepts a `Psr\EventDispatcher\ListenerProviderInterface` to its constructor

Basic example:

```
use Circli\EventDispatcher\EventDispatcher;
use Circli\EventDispatcher\ListenerProvider\DefaultProvider;

$provider = new DefaultProvider();
$dispatcher = new EventDispatcher($provider);

$provider->listen(Event::class, function(Event $e) {
    // do stuff
});

$dispatcher->dispatch(new Event());
```

Providers
---------

[](#providers)

The package includes a couple of providers for ease of use. You can also find some useful provider in [`fig/event-dispatcher-util`](https://github.com/php-fig/event-dispatcher-util)

### `DefaultProvider`

[](#defaultprovider)

```
use Circli\EventDispatcher\ListenerProvider\DefaultProvider;
$provider = new DefaultProvider();
$provider->listen(Event::class, $listener);
```

### `PriorityProvider`

[](#priorityprovider)

```
use Circli\EventDispatcher\ListenerProvider\PriorityProvider;
$provider = new PriorityProvider();

//Add listener with lower than default priority
$provider->listen(Event::class, $listener, 900);

//Add listener with higher than default priority
$provider->listen(Event::class, $listener, 1100);

//Add listener with normal priority
$provider->listen(Event::class, $listener);
```

### `ContainerListenerProvider`

[](#containerlistenerprovider)

Use a Psr-11 container to lazy load the callbacks.

```
use Circli\EventDispatcher\ListenerProvider\ContainerListenerProvider;
$container = new SomePsr11Container();

$provider = new ContainerListenerProvider($container);
$provider->addService(Event::class, EventListener::class);
```

### `PriorityAggregateProvider`

[](#priorityaggregateprovider)

```
use Circli\EventDispatcher\ListenerProvider\PriorityAggregateProvider;
use Circli\EventDispatcher\ListenerProvider\DefaultProvider;

$aggregateProvider = new PriorityAggregateProvider();
$aggregateProvider->addProvider(new DefaultProvider());

// Add with higher than default priority
$aggregateProvider->addProviderWithPriority(new DefaultProvider(), 1500);

// Add with lower than default priority
$aggregateProvider->addProviderWithPriority(new DefaultProvider(), 500);
```

### `FilterableProvider`

[](#filterableprovider)

```
use Circli\EventDispatcher\ListenerProvider\FilterableProvider;

$provider = new FilterableProvider();

$provider->listen(RandomEvent::class, $listener, function ($event) {
    return ifRandomExternalThingIsTrue();
});
```

###  Health Score

46

—

FairBetter than 92% of packages

Maintenance50

Moderate activity, may be stable

Popularity31

Limited adoption so far

Community13

Small or concentrated contributor base

Maturity74

Established project with proven stability

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

Recently: every ~312 days

Total

14

Last Release

154d ago

Major Versions

1.1.0 → 2.0.02019-04-02

2.x-dev → 3.0.02023-10-24

PHP version history (3 changes)2.2.0PHP ~7.2

2.3.0PHP &gt;=7.2

3.0.0PHP ^8.0

### Community

Maintainers

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

---

Top Contributors

[![sunkan](https://avatars.githubusercontent.com/u/568492?v=4)](https://github.com/sunkan "sunkan (45 commits)")

---

Tags

eventspsr-14Circli

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Type Coverage Yes

### Embed Badge

![Health badge](/badges/circli-event-dispatcher/health.svg)

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

###  Alternatives

[symfony/symfony

The Symfony PHP framework

31.4k87.2M2.2k](/packages/symfony-symfony)[symfony/dependency-injection

Allows you to standardize and centralize the way objects are constructed in your application

4.2k455.6M9.6k](/packages/symfony-dependency-injection)[deptrac/deptrac

Deptrac is a static code analysis tool that helps to enforce rules for dependencies between software layers.

3.0k8.8M118](/packages/deptrac-deptrac)[mcp/sdk

Model Context Protocol SDK for Client and Server applications in PHP

1.5k1.5M88](/packages/mcp-sdk)[drupal/core-recommended

Locked core dependencies; require this project INSTEAD OF drupal/core.

6942.5M421](/packages/drupal-core-recommended)[ecotone/ecotone

Enterprise architecture layer for Laravel and Symfony — CQRS, Event Sourcing, Durable Workflows (Sagas, Orchestrators), Projections, and Outbox messaging via PHP attributes.

564576.7k52](/packages/ecotone-ecotone)

PHPackages © 2026

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