A publish/subscribe event bus framework for Delphi applications to decouple components and layers.
Delphi Event Bus (DEB) is a publish/subscribe event bus framework for the Delphi platform, designed to decouple different parts and layers of an application while enabling efficient communication. It was inspired by the EventBus framework for Android and supports both VCL and FireMonkey applications.
Delphi developers building desktop or mobile applications with VCL or FireMonkey who need a decoupled, event-driven architecture for modular and maintainable code.
Developers choose DEB for its simplicity, attributes-based API that reduces boilerplate, and built-in thread synchronization that safely handles events across different thread modes without manual management.
Delphi Event Bus (for short DEB) is an Event Bus framework for Delphi
Open-Awesome is built by the community, for the community. Submit a project, suggest an awesome list, or help improve the catalog on GitHub.
Follows KISS and convention-over-configuration principles, allowing immediate use with the default TEventBus instance without complex setup, as highlighted in the README.
Supports TThreadMode in the Subscribe attribute for automatic synchronization between main and background threads, ensuring safe multi-threaded operation without manual management.
Uses the Subscribe attribute to declaratively define subscriber methods, reducing boilerplate code and improving code readability, as demonstrated in the code examples.
Enables string-based event communication through named channels, useful for simple message passing without defining custom event interfaces, shown in the channels example.
Version 2.0 introduced a breaking change requiring all events to be interfaces, which can force extensive refactoring in existing projects, as noted in the release notes.
Subscriber methods can only accept one parameter that must be an interface, restricting the handling of complex or multiple data points in events.
Tied exclusively to the Delphi platform (VCL/FireMonkey), making it unsuitable for projects that might expand to other languages or modern cross-platform frameworks.