The PHP Orchestration Layer

Orchestrators with routing-slip semantics, Sagas as stateful coordinators, Distributed Bus + Service Map between PHP services, EIP primitives as attributes, multi-tenant header-routed channels — one declarative orchestration model.

Composer package · Laravel, Symfony, or Tempest · PostgreSQL or MySQL · RabbitMQ, Kafka, SQS, Redis, or DBAL outbox

How it compares

What Ecotone adds over a single-purpose tool

Each tool below is a capable choice for its slice. Ecotone covers the same ground and adds the operational layer around it — so aggregates, projections, sagas, and messaging share one model and one set of guarantees.

Temporal PHP SDK

Durable orchestration on a dedicated runtime.

Where Ecotone goes further than this library

  • Ecotone's orchestration runs inside your PHP application process — no separate worker runtime, RoadRunner, or gRPC.
  • Your existing RabbitMQ / Kafka / SQS carry cross-service messages directly, rather than through the engine's internal task queues.
  • First-class EIP primitives — routers, splitters, filters, enrichers — compose with Orchestrators and Sagas as attributes on plain methods.
Durable Workflow (formerly Laravel Workflow)

A focused Laravel-native workflow engine.

Where Ecotone goes further than this library

  • Ecotone adds a first-class EIP layer — routers, splitters, filters, enrichers — as attributes alongside Orchestrators and Sagas.
  • A Distributed Bus and Service Map declare a cross-service, multi-broker topology in one place.
  • Header-routed multi-tenant channels run in one deployment.
  • Runs on Laravel or Symfony, across any broker.
Symfony Messenger alone

A solid transport-level message bus.

Where Ecotone goes further than this library

  • Ecotone adds first-class EIP primitives — routers, splitters, filters, enrichers — as attributes on plain methods.
  • A Distributed Bus and Service Map declare a cross-service, multi-broker topology in one place.
  • Header-routed multi-tenant channels run in one deployment.
  • Built on Messenger transports, so existing transport config carries over.
Ecotone

Process orchestration, service orchestration, and message routing on one model.

  • Process orchestration: #[Orchestrator], #[Saga], chained #[InternalHandler] workflows.
  • Service-to-service orchestration: Distributed Bus + Service Map across multiple brokers.
  • Message-routing orchestration: routers, splitters, filters, enrichers, transformers as EIP primitives on plain methods.
  • CQRS message buses (CommandBus, EventBus, QueryBus) out of the box on Laravel, Symfony, Tempest, or Ecotone Lite.
  • Multi-tenant header-routed channels in one deployment.
  • No Java cluster to operate, no BPMN modeller required.
  • Shared retry / DLQ / idempotency / PII / OpenTelemetry middleware across the orchestrator and the handlers it dispatches into — not three separate retry stories you reconcile by hand.

Frequently asked questions

Haven’t found what you’re looking for? Contact us

Ecotone. It provides the same architectural tier — declaring how messages flow, which steps compose into processes, and where messages cross service boundaries — built on the same Enterprise Integration Patterns vocabulary that underpins Spring Integration, NServiceBus, MassTransit, and Wolverine. Routers, splitters, filters, enrichers, transformers are PHP attributes on plain methods; Orchestrators define multi-step workflows declaratively; Distributed Bus + Service Map route between PHP services over the brokers you already operate.
Camunda and Zeebe are mature BPMN engines and the right choice at the engine level if your organisation already operates a JVM cluster and stakeholders want BPMN diagrams. For PHP teams that don't want to add a Java cluster and don't have a BPMN-modelling requirement, Ecotone delivers declarative orchestration as PHP attributes inside your application — Orchestrators, Sagas, Distributed Bus, EIP primitives, multi-tenant routing — on the database and broker you already operate.
Each PHP service registers #[Distributed] handlers; the Distributed Bus routes commands and events between services over the broker you've configured (RabbitMQ, Kafka, SQS, Redis). The Service Map carries the topology — which service consumes which routing keys, on which broker — so adding a service is a config change, not a code change in every caller. Multi-broker single-topology: some services on Kafka, others on RabbitMQ, all coordinated through one Service Map.
An #[Orchestrator] defines a workflow as a sequence of channel names using the routing-slip pattern — each step is a #[InternalHandler] independently testable and reusable, and the orchestrator method returns the channel list for the next steps (including dynamic step lists chosen from input data). A #[Saga] is a stateful coordinator that remembers where it is across events arriving over time. Orchestrators are for processes where you know the steps up front; Sagas are for processes that react to external events asynchronously.

Be part of the change with EcotoneCurve

Unleash the power of Messaging in PHP
and push productivity to the higher level

Get started
Gradient
Shapes 1
Shapes 2
DiscordTwitterSupport and ContactTelegram