Installation
Installing Ecotone for Symfony, Laravel, Tempest or Stand Alone
Ecotone is the PHP architecture layer that grows with your system without rewrites. One Composer package adds CQRS, event sourcing, sagas, projections, outbox, EIP routing, and distributed messaging to Laravel, Symfony or Tempest via declarative PHP attributes — no rewrite, no bespoke glue.
Pick your stack below. Symfony, Laravel and Tempest get dedicated integration packages with auto-configuration; any other framework (or no framework) runs on Ecotone Lite through a PSR-11 container.
Prerequisites
Before installing Ecotone, ensure you have:
PHP 8.2 or higher (the Tempest integration requires PHP 8.4+)
Composer installed
A properly configured PHP project with PSR-4 autoloading
Install for Symfony
Step 1: Install the Ecotone Symfony Bundle using Composer
composer require ecotone/symfony-bundle
Step 2: Verify Bundle Registration
If you're using Symfony Flex (recommended), the bundle will auto-configure. If auto-configuration didn't work, manually register the bundle in config/bundles.php:
Ecotone\SymfonyBundle\EcotoneSymfonyBundle::class => ['all' => true]Step 3: Verify Installation
Run this command to check if Ecotone is properly installed:
By default Ecotone will look for Attributes in default Symfony catalog "src". If you do follow different structure, you can use "namespaces" configuration to tell Ecotone, where to look for.
Next steps for Symfony: reuse a Connection already defined in your application (Doctrine DBAL connection), turn an existing Doctrine entity into an Aggregate, or run handlers asynchronously on an existing Messenger transport.
Install for Laravel
Step 1: Install the Ecotone Laravel Package
composer require ecotone/laravel
Step 2: Verify Provider Registration
The service provider should be automatically registered via Laravel's package discovery. If auto-registration didn't work, manually add the provider to config/app.php:
Step 3: Verify Installation
Run this command to check if Ecotone is properly installed:
By default Ecotone will look for Attributes in default Laravel catalog "app". If you do follow different structure, you can use "namespaces" configuration to tell Ecotone, where to look for.
Step 4 (optional): Publish the configuration file
This creates config/ecotone.php, where you can configure namespaces, cache, serialization, the error channel, and your Enterprise licence key.
Next steps for Laravel: reuse a connection from config/database.php (Doctrine DBAL connection), use an Eloquent model as an Aggregate, or run handlers asynchronously on your existing Laravel queues.
Install for Tempest
The Tempest integration requires PHP 8.4+ (Tempest's own requirement).
Step 1: Install the Ecotone Tempest Package
composer require ecotone/tempest
Step 2: Verify Installation
Tempest auto-discovers the package — no bundle/provider registration is needed. Run this command to check Ecotone is installed:
By default Ecotone auto-discovers Attributes in your Tempest application's PSR-4 roots (for example App\).
If you follow a different structure, use the "namespaces" configuration to tell Ecotone where to look.
Step 3 (optional): Configure Ecotone
Ecotone works with zero configuration. To set the service name, licence key, serialization or error channel, create a discovered ecotone.config.php returning an EcotoneConfig object — see Tempest Configuration.
Next steps for Tempest: reuse your Tempest database connection (including multi-tenant), use a Tempest model as an Aggregate, or run handlers asynchronously over a message broker channel (DBAL, AMQP, Redis, Kafka, SQS).
Install Ecotone Lite (No framework)
If you're using no framework or framework different than Symfony or Laravel, then you may use Ecotone Lite to bootstrap Ecotone.
composer require ecotone/ecotone
In order to start, you need to have a composer.json with PSR-4 or PSR-0 autoload setup.
With Custom Dependency Container
If you already have Dependency Container configured, then:
Load namespaces
By default Ecotone will look for Attributes only in Classes provided under "classesToResolve". If we want to look for Attributes in given set of Namespaces, we can pass it to the configuration.
With no Dependency Container
You may actually run Ecotone without any Dependency Container. That may be useful for small applications, testing or when we want to run some small Ecotone's script.
Ecotone Lite Application
You may use out of the box Ecotone Lite Application, which provide you with Dependency Container.
composer require ecotone/lite-application
With default configuration, Ecotone will look for classes inside "src" catalog.
Database tables
Ecotone creates tables only for the features you actually use, and they live in your database — your backups, your retention, your access control:
Transactional outbox / DBAL message channel
enqueue
Dead letter (stored failed messages)
ecotone_error_messages
Deduplication
ecotone_deduplication
Document store
ecotone_document_store
Event store (Event Sourcing)
per-stream tables
By default these are created automatically on first use. To create them explicitly — or to ship them through your own migration tooling — use the console command:
Pass --sql instead of --initialize to print the CREATE TABLE statements, so you can paste them into your own Doctrine Migrations or Laravel migration.
Common Installation Issues
"Class not found" errors
Problem: Ecotone can't find your classes with attributes. Solution: Make sure your classes are in the correct namespace and directory structure matches your PSR-4 autoloading configuration.
Bundle/Provider not registered
Problem: Ecotone commands are not available. Solution:
For Symfony: Check that the bundle is listed in
config/bundles.phpFor Laravel: Check that the provider is in
config/app.phpor that package discovery is enabled
Permission errors
Problem: Cache directory is not writable. Solution: Ensure your web server has write permissions to the cache directory (usually var/cache for Symfony or storage/framework/cache for Laravel).
Last updated
Was this helpful?