ustal / stream-hub-core
StreamHub core: event-driven interaction engine with plugin system
v1.0.0
2026-04-08 22:08 UTC
Requires
- php: ^8.2
Requires (Dev)
- deptrac/deptrac: ^3.0
- phpstan/phpstan: ^1.10
- phpunit/phpunit: ^10.0
README
Framework-agnostic headless core for Stream Hub.
stream-hub-core is no longer positioned as a pluggable UI engine. In the v1 direction it focuses on stream models, low-level write commands, command buses, backend contracts, and reusable framework-agnostic building blocks.
Current Scope
The package currently provides:
- core models:
StreamStreamEventStreamParticipant
- backend contract:
StreamBackendInterface
- application context contract:
StreamContextInterface
- command contracts:
StreamCommandInterfaceStreamCommandHandlerInterface
- buses:
CommandBusInterfaceModelCommandBusInterfaceCommandBusGuardedCommandBus
- thin application facade:
StreamHubInterfaceStreamHub
- guard contracts for high-level commands:
StreamCommandGuardInterfaceGuardDecision
- low-level core commands and handlers:
- create stream
- join stream
- append stream event
- mark stream read
- identifier generation:
IdentifierGeneratorInterfaceRandomHexIdentifierGeneratorUuidV4IdentifierGeneratorUuidV7IdentifierGenerator
Design Notes
- Core models are not persistence entities.
- Project-specific enrichment belongs in backend adapters and mappers.
- High-level feature commands may be guarded before handler execution.
- Low-level model commands should stay internal and should not be guarded.
- High-level feature workflows should orchestrate low-level core commands instead of writing directly to storage when a generic low-level command already exists.
- Business authorization rules should live in the application or policy layer, not in the backend contract.
Development
Run tests:
make test
Run deptrac:
vendor/bin/deptrac analyse