coolms / core
Kernel contracts for the CoolMS platform: entity vocabulary, persistence-neutral mapping attributes, domain events, config loading, outbox/inbox and the seams modules implement
Requires
- php: ^8.5
- coolms/rql: ^1.0
- symfony/messenger: ^8.0
- symfony/serializer: ^8.0
- symfony/uid: ^8.0
- symfony/yaml: ^8.0
Requires (Dev)
- phpunit/phpunit: ^12.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
- dev-develop / 2.0.x-dev
- v2.0.0-alpha3
- v2.0.0-alpha2
- v2.0.0-alpha1
- v1.0.0
- dev-feat/relay-heartbeat
- dev-style/consent-category-order
- dev-feat/liveness-seam
- dev-feat/recognition-is-a-second-consent-rung
- dev-feat/outbox-backlog-port
- dev-feat/master-key-ring
- dev-tests/from-the-application
- dev-style/php-cs-fixer
- dev-feat/elevation-ports
- dev-feat/install-order-earlier-phase-provisions
- dev-release/2.0.0-alpha3
- dev-rename/module-to-app
- dev-feat/seed-guard-and-block-vocabulary
- dev-feat/module-settings-contract
- dev-main
This package is auto-updated.
Last update: 2026-09-21 09:02:17 UTC
README
The kernel contracts of the CoolMS platform. Entity vocabulary, persistence-neutral mapping attributes, domain events, and the seams every module implements.
Four dependencies, all Symfony components. No ORM, no framework, no bundle.
use CoolMS\Core\Identifier\IdentifierProviderTrait; use CoolMS\Core\Mapping\Column; use CoolMS\Core\Model\AggregateRootInterface; class OutboxRecord implements AggregateRootInterface { use IdentifierProviderTrait; public function __construct( #[Column(type: 'string')] public string $type, ) {} }
That entity is mapped by whichever persistence adapter is installed. It names none of them.
Installation
composer require coolms/core
On its own this package gives you contracts and value objects. To persist anything you also need an adapter — see Persistence.
What is in here
| Area | What it holds |
|---|---|
Mapping/ |
Column, Id, GeneratedValue — persistence-neutral attributes |
Identifier/, Timestampable/, Blameable/ |
the reusable entity traits and their contracts |
Attribute/ |
ClassMeta, FieldMeta — how a class describes itself to the platform |
Event/, Lifecycle/ |
domain events, recorded-event providers, entity lifecycle events |
Outbox/, Inbox/, ChangeFeed/ |
the transactional outbox, consumer idempotency, and sync change-feed rows plus their ports |
Config/, Secret/, Option/ |
configuration loading, the secret-store contract, option sources |
Backup/, Retention/ |
the backup contributor seam and the retention pruner port |
Persistence
The mapping attributes are declarations; something has to read them. A
persistence adapter package provides
coolms/core-persistence-implementation and does the reading:
composer require coolms/core-doctrine
The attribute vocabulary is deliberately small — the columns the traits actually use, and nothing else. It is a translation, not a second mapping layer: the moment it grows associations or inheritance, there are two schemas to keep in step instead of one.
Related packages
| Package | Role |
|---|---|
coolms/core-application |
application services composed over these contracts |
coolms/core-bundle |
Symfony integration |
coolms/core-doctrine |
Doctrine ORM/DBAL adapter |
License
MIT. See LICENSE.