{"id":22496998,"url":"https://github.com/morebec/orkestramono","last_synced_at":"2025-10-14T15:42:18.781Z","repository":{"id":49500771,"uuid":"358720522","full_name":"Morebec/OrkestraMono","owner":"Morebec","description":"Orkestra is a library of infrastructure and architecture helpers for creating CQRS/ES/DDD applications","archived":false,"fork":false,"pushed_at":"2023-03-31T18:45:07.000Z","size":824,"stargazers_count":2,"open_issues_count":2,"forks_count":0,"subscribers_count":1,"default_branch":"2.x","last_synced_at":"2025-03-27T21:32:10.672Z","etag":null,"topics":["cqrs","ddd","event-sourcing","infrastructure","orkestra","orkestra-components"],"latest_commit_sha":null,"homepage":"","language":"PHP","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Morebec.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2021-04-16T21:11:13.000Z","updated_at":"2023-01-19T12:26:35.000Z","dependencies_parsed_at":"2024-12-06T20:15:36.150Z","dependency_job_id":"14d02053-86a3-4d28-b657-49f89865775b","html_url":"https://github.com/Morebec/OrkestraMono","commit_stats":null,"previous_names":[],"tags_count":25,"template":false,"template_full_name":null,"purl":"pkg:github/Morebec/OrkestraMono","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Morebec%2FOrkestraMono","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Morebec%2FOrkestraMono/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Morebec%2FOrkestraMono/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Morebec%2FOrkestraMono/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Morebec","download_url":"https://codeload.github.com/Morebec/OrkestraMono/tar.gz/refs/heads/2.x","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Morebec%2FOrkestraMono/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279019343,"owners_count":26086711,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-14T02:00:06.444Z","response_time":60,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["cqrs","ddd","event-sourcing","infrastructure","orkestra","orkestra-components"],"created_at":"2024-12-06T20:15:21.849Z","updated_at":"2025-10-14T15:42:18.747Z","avatar_url":"https://github.com/Morebec.png","language":"PHP","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Orkestra\n[![Monorepo Split](https://github.com/Morebec/OrkestraMono/actions/workflows/split-repo.yaml/badge.svg)](https://github.com/Morebec/OrkestraMono/actions/workflows/split-repo.yaml)\n\nOrkestra is a set of PHP components for building Systems and Applications using concepts from\nDomain Driven Design (DDD), Command Query Responsibility Segregation (CQRS) and Event Souring (ES).\n\nThese components can be used independently according to the needs of the systems.\n\nThe main goal behind this set of components is to simplify the plumbing required \nto support the principles of DDD/CQRS/ES and allow developers to build systems \nby simply focusing on the core domain and business logic. \n\nThese components are Infrastructure and Framework independent, allowing them to be used in any kind of setup.\nThere is currently a component tailored for easy integration with the Symfony Framework to simplify the process even further.\n\n### The Orkestra components\n\n#### Core Components\nHere's a list of the current core components of Orkestra:\n- **[Messaging](https://github.com/Morebec/orkestra-messaging)**: Provides the building block to define messages and handlers such as Commands, Queries, Events, Time based messages called (Timers).\n  It also includes the basic mechanisms to integrate intra-process message buses to an application to map messages to their message handlers while providing hooks\n  to alter the behaviour of sending messages to their handlers. In short, it's the Mediator pattern with helpers for CQRS.\n- **[Modeling](https://github.com/Morebec/orkestra-modeling)**:  Provides the building blocks for Modeling Entities, Aggregates and Aggregate Roots.\n- **[EventSourcing](https://github.com/Morebec/orkestra-event-sourcing)**: This component contains the building block to add Event Sourcing capabilities to a system. It provides implementations\n  for Event Sourced Aggregate Roots, interfaces for an Event Store as well as Event Processors which are services responsible for forwarding events saved in an event store\n  to the various components of the system.\n- **[Normalization](https://github.com/Morebec/orkestra-normalization)**: This component allows transforming complex object trees into simple PHP arrays of primitives for easy serialization in any format. As a side effect it greatly reduces the need for\n  ORMs while decoupling persistence mechanism from the domain model as it does not require annotations or inheriting interfaces. In short, it provides ways to do: `Entity -\u003e array -\u003e dump to database (MongoDb, PostgreSql, Redis etc.)`\n- **[Privacy](https://github.com/Morebec/orkestra-privacy)**: This component provides building blocks to make Personal Data and Privacy an explicit requirement of the system and to simplify  the integration of regulations such as GDPR or CCPA.\n- **[DateTime](https://github.com/Morebec/orkestra-datetime)**: Based on `cake-php/chronos` to improve the capabilities of DateTimes in an Immutable fashion as well as providing interfaces to access time through `ClockInterface` some an application can provide different means to get the current time in different contexts, such as time travel.\n- **[Enum](https://github.com/Morebec/orkestra-enum)**: Provides typed Enum to PHP.\n- **[Collections](https://github.com/Morebec/orkestra-collections)**: Provides typed Collections.\n- **[Exceptions](https://github.com/Morebec/orkestra-collections)**: Provides common exceptions.\n- **[Retry](https://github.com/Morebec/orkestra-retry)**: Provides utilities to improve the resiliency of some components in a system through the use of Retry Classes with support for delays and exponential backoff. \n- **[Worker](https://github.com/Morebec/orkestra-worker)**: Provides simple interfaces and base classes to define workers that should be used to run business logic in background processes.\n\n#### Infrastructure Specific Components\nThere are also infrastructure specific implementations of some the Interfaces from the core Components:\n- **[PostgreSQLDocumentStore](https://github.com/Morebec/orkestra-postgresql-document-store)**: Allows treating PostgreSQL like a Document Store.\n- **[PostgreSQLEventStore](https://github.com/Morebec/orkestra-postgresql-event-store)**: Implementation of an Event Store in PostgreSQL.\n- **[PostgreSQLPersonalInformationStore](https://github.com/Morebec/orkestra-postgresql-personal-information-store)**: To be used with the [Privacy](https://github.com/Morebec/orkestra-privacy) component, allows storing personal data of users in an encrypted form in a PostgreSQL Database.\n- **[PostgreSQLTimerStorage](https://github.com/Morebec/orkestra-postgresql-timer-storage)**: Allows storing timers of the [Messaging](https://github.com/Morebec/orkestra-messaging) component, making it easy to trigger tasks in the future in a much more complex way than Cron by using custom logic.\n\n#### Framework Integrations\nHere are additional components for easier integration with specific frameworks:\n- **[SymfonyBundle](https://github.com/Morebec/orkestra-symfony-bundle)**: Integrates various Orkestra Components with Symfony, while also providing a Module system in order to structure projects in a Bounded Context oriented approach.\n- **[Orkestra Framework](https://github.com/Morebec/orkestra-framework)**: Corresponds to an opinionated integration of all the core components with Symfony. It has useful defaults as well as some technical decisions for quickly bootstrapping projects.\n\n## Monorepo\nThe current repository is maintained as a Monorepo, all issues and pull requests for any of the components should be done in this repository.\nInternally whenever a new release is made it is propagated to the standalone repositories of the different components.\nFor more information please read the [Contribution Guide](./docs/ContributionGuide.md).\n\n## Getting Started\nTo get started, please read the following [page](https://github.com/Morebec/orkestra-framework) from the documentation.\n\n## Help \u0026 Support\nIf you are using Orkestra Components in your project and are stuck on something or want to deepen your understanding of the code base, do not hesitate to open an issue in this repository,\nwe will try our best to help you.\n\n## Contributing\nOrkestra is open for contributions. If you want to contribute to one of the components or the documentation, please read\nthe [Contribution Guide](./docs/ContributionGuide.md).\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorebec%2Forkestramono","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmorebec%2Forkestramono","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmorebec%2Forkestramono/lists"}