incompass/timestampable-bundle
Symfony bundle that adds automatic timestamping to Doctrine entities, managing createdAt and updatedAt fields via listeners so you can track creation and modification times without boilerplate.
created_at/updated_at are populated consistently across every entity — not just the ones a careful developer touched — is a product-integrity decision, not just an engineering one.updated_at only work if every write path — bulk operations, queued jobs, admin tools — updates the field. This is the strongest argument for a framework-level behavior over per-developer discipline.$table->timestamps() and automatic created_at/updated_at natively, so the problem this package solves largely does not exist on that stack. A PM should treat adoption of this package in a Laravel codebase as a non-decision.created_by/updated_by). If per-user change attribution is on the roadmap, this decision should be made once with that in mind, not twice.Adopt only if all of the following hold:
$timestamps() and $table->timestamps() and stop.Look elsewhere — or build — when any of the following is true:
created_by/updated_by, soft-delete timestamps, timezone-aware or immutable-only variants. Use Gedmo Timestampable/Blameable (via stof/doctrine-extensions-bundle), which carries a decade of edge cases and a real maintainer base.prePersist/preUpdate listener is a few hours of work, fully testable and extensible to blameable later.Recommendation: do not adopt. Build in-house or use the ecosystem standard.
The underlying need is real and worth funding — every product team needs trustworthy created_at/updated_at to support audit, reporting, retention, and sync. But this specific package is not the right vehicle. It is a Symfony/Doctrine bundle (not Laravel), with zero stars, zero dependents, and no observable maintenance. Adopting it converts a small, well-understood problem into a supply-chain and bus-factor problem.
For executives: the capability is cheap; the dependency is expensive. We satisfy the requirement either with the mature Symfony standard (Gedmo, already broadly used) or with roughly a day of internal engineering. Either path carries less long-term risk than a single-maintainer package with no users. On a Laravel stack, the requirement is already met by the framework.
For engineering: treat incompass/timestampable-bundle as a reference implementation worth reading, not a dependency worth adding. If we go in-house, we own a ~40-line trait plus a Doctrine (or Eloquent observer) listener, with tests covering bulk updates and inheritance — and we can extend it to blameable later without churning our dependency choices.
Decisions to make now: (1) confirm the stack — if Laravel/Eloquent, this is a non-decision and we move on; (2) if Symfony/Doctrine, choose Gedmo vs. in-house; (3) decide whether blameable (created_by/updated_by) is in scope this quarter, since it changes the build estimate and may justify choosing Gedmo outright.
How can I help you explore Laravel packages today?