Search by

laravarc / eventer

Transport-agnostic domain event dispatch and consumption for Laravel — broker-agnostic SEND/RECEIVE with EventContract wire envelopes.

Maintainers

Package info

github.com/laravarc/eventer

pkg:composer/laravarc/eventer

Transparency log

Statistics

Installs: 2

Dependents: 1

Suggesters: 1

Stars: 1

Open Issues: 0

v1.0.0 2026-09-05 16:59 UTC

This package is auto-updated.

Last update: 2026-09-05 17:17:27 UTC


README

Transport-agnostic domain event dispatch and consumption for Laravel.

Usable with or without laravarc/core.

Design Principles

  • Broker agnostic — the same domain event can be sent or received through Laravel, RabbitMQ, Kafka, Redis, webhooks, or custom transporters.
  • Framework friendly — integrates with Laravel's event dispatcher, queue, pipeline, and service container.
  • Language agnostic — wire envelopes use stable eventName + version, not PHP class names.
  • Contract firstEventContract defines the public API between producers and consumers.
  • Eventer orchestrates events, not brokers — transporters are pluggable adapters; Eventer owns routing, contracts, and orchestration.

Install

composer require laravarc/eventer
php artisan vendor:publish --tag=eventer-config
php artisan laravarc:eventer cache

Quick start

use Laravarc\Eventer\Contracts\EventContract;
use Laravarc\Eventer\Facades\Eventer;

final class UserDeleted implements EventContract
{
    public function __construct(public int $userId) {}

    public static function eventName(): string { return 'user.deleted'; }
    public static function version(): int { return 1; }
}

Eventer::dispatch(new UserDeleted(42));
Eventer::channel('external')->dispatch(new UserDeleted(42));
Eventer::internal()->dispatch(new UserDeleted(42));
Eventer::via('laravel')->dispatchNoFallback(new UserDeleted(42));

Commands

Command Alias Purpose
laravarc:eventer cache larc:eventer cache Build event name → class index (PSR-4 scan only; see scan_* config)
laravarc:eventer cache --clear same Clear cached index
laravarc:eventer manifest larc:eventer manifest Output JSON contract manifest
laravarc:eventer consume {transporter} larc:eventer consume Consume inbound events from a Receivable transporter
laravarc:eventer make-transport {Name} larc:eventer make-transport Scaffold a custom transporter

Event index scan config

laravarc:eventer cache never iterates the Composer classmap (that would load arbitrary vendor classes and can fatal). Configure discovery in config/eventer.php:

Key Purpose
scan_paths Project roots whose composer.json PSR-4 maps are read
scan_namespaces Extra namespaces to include (e.g. packages under vendor/)
exclude_namespaces Namespace prefixes to skip
exclude_classes / include_classes Per-class deny/allow lists

Eventer vs Laravel Event

Eventer facade Laravel Event facade
Purpose Domain-event transport (channels, transporters, fallback) In-process listener bus
Typical use Eventer::dispatch($event) Listeners, Event::fake()

Use Eventer when you care how/where a domain event is delivered. Use Laravel Event for classic in-process listener registration.

Documentation

Topic Guide
Installation & setup docs/01-installation.md
Defining events (EventContract) docs/02-defining-events.md
Dispatching events docs/03-dispatching.md
Channels & routing docs/04-channels.md
Transporters & config docs/05-transporters.md
Consuming events docs/06-consuming.md
Wire format (envelope) docs/07-wire-format.md
Artisan commands docs/08-commands.md
Configuration reference docs/09-configuration.md
Testing docs/10-testing.md

License

MIT — see LICENSE.