Skip to content

Firing events is easy. Making them arrive is not.

Setting up Event-Driven Architecture in PHP manually means writing event classes, registering listeners, managing queue integration, and hoping the schema does not drift. Jardis generates typed domain events with automatic queue publishing for every Bounded Context.

Event-Driven Architecture in PHP does not fail at the concept.

It fails because nobody builds the infrastructure consistently enough to last.

Event schemas drift over time

An event gets extended, but consumers do not know. Fields get renamed, removed, or reordered. No central schema, no contract. After a year, the event format in production speaks a different language than the code.

Listeners are wired invisibly

Who listens to which event? It is somewhere in a service provider registration, spread across multiple files. New developers cannot follow the data flow. Side effects happen unexpectedly because nobody knows all the listeners.

Queue integration is manual work

Every domain event that should be processed asynchronously needs separate configuration: queue connection, job class, retry logic, serialization. Recurring infrastructure work that looks identical in every PHP project and still happens by hand every time.

Domain Events as First-Class Citizens in PHP.

Jardis generates Event-Driven Architecture PHP at the domain level: typed events, automatic queue publishing, no manual registration.

DOMAIN EVENTS

Typed events derived from the domain model

Jardis generates typed PHP classes for domain events per Bounded Context. Not as generic arrays, but as versioned, strongly typed objects with their own namespace. The event schema is part of the generated code, not an external document that goes stale.

QUEUE PUBLISHING

Event-Driven Architecture PHP without configuration overhead

Generated domain events come with automatic queue publishing built in. No separate job setup, no manual serialization, no per-event retry configuration. Whether RabbitMQ or Kafka: the generated event structures adapt to the queue integration, not the other way around.

DOMAIN LEVEL

EDA at the domain level, not the I/O level

Jardis does not do reactive I/O programming like ReactPHP. The generated Event-Driven Architecture operates at the domain level: commands trigger domain events, events propagate between Bounded Contexts. Each BC stays decoupled, communication is explicit and typed.

See what three files turn into.

Three definition files in, a complete bounded context out. Browse the generated code.

E-Commerce / Sales
schema.yaml
# Database Schema — Sales Bounded Context
# This file defines the persistent storage structure.

schema:
  domain: ECommerce
  boundedContext: Sales

tables:
  order:
    columns:
      id:
        type: integer
        primary: true
        autoIncrement: true
      public_id:
        type: uuid7
        unique: true
      customer_email:
        type: string
        length: 255
      status:
        type: string
        length: 32
        default: "draft"
      total_amount:
        type: integer
      currency:
        type: string
        length: 3
        default: "EUR"
      created_at:
        type: datetime
      updated_at:
        type: datetime
        nullable: true

  order_item:
    columns:
      id:
        type: integer
        primary: true
        autoIncrement: true
      order_id:
        type: integer
        foreignKey:
          table: order
          column: id
          onDelete: cascade
      product_name:
        type: string
        length: 255
      sku:
        type: string
        length: 64
      quantity:
        type: integer
      unit_price:
        type: integer
      line_total:
        type: integer
Files
Definitions (Input)
Generated Code (Output)
BUILDER OUTPUT
80%
Event infrastructure per BC generatedDomain events, queue publishing, event classes, and propagation logic. Per Bounded Context, from a single schema definition.
0
manual event registrations
100%
typed event objects
ONBOARDING
3x
faster onboarding into event flowsNew developers immediately see which events a Bounded Context publishes and which it consumes. No digging through service provider registrations.

Why Teams Choose Jardis for Event-Driven Architecture.

Because EDA does not fail at the idea. It fails at the discipline required to keep it consistent.

> Explicit Decoupling

Every BC knows what it publishes

Generated domain events are part of the Bounded Context, not a global event list. Which events a BC publishes is readable in the code. No hidden side effects, no invisible dependencies between domains.

> Queue Integration

RabbitMQ and Kafka without configuration overhead

The generated event structures are designed for asynchronous processing. Queue publishing is not an afterthought, it is generated. Serialization, retry logic, and dead letter handling are included.

> Schema Stability

Event schemas do not drift

Typed PHP classes instead of generic arrays. When an event schema changes, the build breaks, not production. Consumers notice immediately when a contract is violated.

Event-Driven Architecture PHP that holds up in code?

Join the Waitlist

Structure costs less than chaos.

Free Trial

Try Jardis 7 Days Free

Point Jardis at your real domain. Discovery, structure, and your first platform build.

Join Waitlist
20 Discovery Runs
5 Structure Builds
1 Platform Build
All Jardis packages as open source
Jardis Base
€29per month

The complete DDD architecture with all classes and contracts. Your team ships features, not infrastructure.

Join Waitlist
Unlimited Discovery Runs
Unlimited Structure Builds
All 26 Jardis packages included
PHPStan Level 8 from day one
Jardis Pro
€180per month

The complete business logic with handlers, validation, and pipelines. What used to be a sprint is now a build.

Join Waitlist
Everything from Jardis Base
Commands, queries, and events fully implemented
Platform code in seconds instead of weeks
Additional Runs for €89 each
Enterprise

More than 20 Platform Builds per month?

Let's talk

Be there when Jardis launches.

Sign up. You'll get access as soon as we go live. Including a free trial.

100+ developers are already waiting for launch

Curious how Jardis works?

Discover Jardis

Frequently Asked Questions

Answers about Event-Driven Architecture with Jardis.

Laravel and Symfony have their own event systems for technical events. Jardis generates domain events: business-level occurrences from your domain model, typed, versioned, and built for asynchronous queue processing. They belong to the Bounded Context, not the framework.