otobus/event_bus
57.3
Adequate · 21 September 2026
1.4k
lines of production code
Elixir
primary language
7
measurements over time
What this system is
This system is an Elixir-based event bus library designed for managing asynchronous event processing and subscription management. It provides a modular architecture with dedicated components for topics, subscriptions, notifications, observations, and data storage, all operating as independent GenServers. The system supports structured event models with metadata and timing, allowing developers to register subscribers and handle events with configurable behavior and robust error handling.
How it got here
2017 — EventBus architecture refactoring
9 changes.
This period focused on initializing the project infrastructure and significantly refactoring the EventBus library to replace a monolithic GenServer architecture with a modular, typed system of specialized child processes. The changes introduced a structured Event model and updated configuration files to modern Elixir standards, supported by comprehensive test coverage for the new components.
2018 — Event bus refactoring and test coverage
7 changes.
The event bus system was restructured by splitting monolithic services into dedicated modules for notification, observation, storage, and subscription. This refactoring was accompanied by the creation of new utility modules for time and ID generation, with comprehensive test coverage added for all new and refactored components.
Features
Introduces new utility modules for time and ID generation
The codebase now includes three new utility modules in the lib/event\_bus/utils directory: EventBus.Util.Base62, which handles base62 encoding and unique ID generation; EventBus.Util.MonotonicTime, which calculates monotonically increasing time values; and EventBus.Util.Regex, which provides a helper to check if a list of keys includes a specific key using regex matching. These changes reorganize and extract specific functionality into dedicated modules.
_lib/event\bus/utils · high confidence
Project initialization and tooling configuration
The repository was initialized with essential project metadata and tooling configurations. This includes adding a .formatter.exs file to configure Elixir code formatting, a CHANGELOG.md file following the Keep a Changelog format, and a .gitignore file updated to include new build artifacts and temporary files. Additionally, the .travis.yml file was updated to include dialyzer, coverage, and credo checks, and the README.md was expanded with detailed usage examples and feature descriptions.
(repo-wide) · high confidence
Behavioural changes
Internal manager modules reorganized under the managers namespace
The internal manager modules (Notification, Observation, Store, Subscription, and Topic) have been moved into the lib/event\_bus/managers directory. This change improves code organization and documentation by grouping related internal components together, while maintaining the existing GenServer-based architecture for each manager.
_lib/event\bus/managers · high confidence
Introduce structured Event model with metadata and duration tracking
The EventBus library now uses a dedicated \EventBus.Model.Event\ struct to represent events, replacing the previous tuple-based approach. This new model enforces required fields (\id\, \topic\, \data\) and adds optional metadata fields including \initialized\_at\, \occurred\_at\, \source\, and \ttl\. The model also includes a \duration/1\ function to calculate the time difference between initialization and occurrence, providing built-in timing capabilities for events.
_lib/event\bus/models · high confidence
Migrate configuration files to Elixir 1.13+ syntax
The project has updated its configuration files to use the modern \import Config\ syntax introduced in Elixir 1.13, replacing the legacy \use Mix.Config\ approach. This change standardizes the configuration setup across development, production, and test environments, ensuring compatibility with newer Elixir versions and removing deprecated configuration patterns.
config · medium confidence
Refactored EventBus architecture with new module structure
The EventBus library has been refactored to improve modularity and developer experience. The previous \EventManager\ and \SubscriptionManager\ GenServers have been replaced by a new set of specialized modules: \Topic\, \Subscription\, \Notification\, \Store\, and \Observation\, each with their own GenServer lifecycle. A new \EventSource\ module provides builder and notifier blocks for constructing events, and the application supervisor now explicitly manages these five new child processes instead of the previous two. This change also introduces a \register\_topics/0\ helper in the application to load topic configurations.
_lib/event\bus · high confidence
Refactored event bus architecture with modular managers and typed subscribers
The EventBus module has been significantly refactored to support configurable subscribers, allowing a single module to handle events with different configurations. The public API now uses typed subscriber definitions (supporting both simple modules and {module, config} tuples) and delegates core logic to new internal modules under the EventBus.Manager namespace (Notification, Observation, Store, Subscription, Topic). This change introduces type specs for events and subscribers, adds topic existence checking, and replaces the previous tuple-based event data with a dedicated Event struct. Users will see changes in how they subscribe and unsubscribe, as the API now expects structured subscriber definitions rather than raw modules or tuples.
lib · medium confidence
Refactored event bus services into dedicated modules
The event bus implementation has been restructured by splitting the previous monolithic services into four distinct modules: Notification, Observation, Store, and Subscription. This refactoring isolates responsibilities, with Notification handling event dispatching, Observation tracking completion/skipped states, Store managing event persistence, and Subscription managing subscriber lists. This change improves code organization and type safety within the event bus system.
_lib/event\bus/services · high confidence
Test coverage
Added and reorganized tests for the event bus; Added tests for Event duration calculation; Added tests for EventBus services; Added tests for utility modules; Added unit tests for event bus manager modules; Updated EventBus tests to use structured Event models and explicit subscriber configuration; Updated test helper with new subscriber and error-handling test cases.
Dependencies
Update development dependencies and lockfile
The project's development dependencies have been updated: Credo is now at version 1.6, Dialyxir at 1.1.0, ExCoveralls at 0.14.4, and ExDoc at 0.26.0. The mix.lock file has been regenerated to reflect these new versions and their transitive dependencies.
(dependencies) · high confidence
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
How this codebase got here
Score
- CAI 58 → 57 (-1.1)
- Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.
Lenses
- Code Health 100 → 100 (+0.0)
- Architecture 69 → 69 (+0.0)
- Maturity 44 → 44 (+0.0)
- Readiness 60 → 62 (+1.7)
- Security 98 → 79 (-19.2)
Resolved (6)
- Coverage not included — suite not readable by the collector
- Dependency hygiene not measured — no supported dependency manifest was read
- High CVE: [GHSA redacted] (mix.lock)
- No exposed public API
- Test reliability not included
- dormant codebase — no living knowledge left to concentrate
New (10)
- Documentation: no usage examples (README.md)
- High CVE: [GHSA redacted] (mix.lock)
- No SBOM
- No artifact signing
- No build provenance
- No dependency advisory monitoring
- Outdated: credo
- Outdated: dialyxir
- Outdated: ex_doc
- Outdated: excoveralls
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
otobus/event_bus was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.
About this page
- The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
- Measured at commit af047b7549029afd8174cb3b98872ae74c440ea6 — the exact code this score is about.
- Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
- Measured by watchdog.canine.dev using codehealth-analyzer preprod-b84573e22831.