Weave Code
Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Timestampable Bundle Laravel Package

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.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Headline: this is not a Laravel package. incompass/timestampable-bundle is a Symfony bundle built on Doctrine ORM. It ships a Symfony Bundle class for kernel registration plus Doctrine event listeners/subscribers — neither is a Laravel concept. Composer will install it (it is PHP), but "leveraging it in a Laravel stack" is only coherent if we already run Doctrine under Laravel via laravel-doctrine/orm, which is a minority architecture for us. For an Eloquent-based service, the problem it solves does not exist: Eloquent provides $timestamps, created_at/updated_at, and Model::withoutTimestamps() natively.

  • Architecture fit: Near-zero for Eloquent. Conditional-fit only where Doctrine is already the production persistence layer — a Symfony service, or a Laravel service genuinely running the Doctrine bridge. In that world it is a small, plausible utility: a listener that populates configured fields on prePersist/preUpdate.
  • Integration feasibility: Two paths, both with the cost in the wrong place. (a) Doctrine-in-Laravel: feasible, but the dominant work is the ORM bridge, not this bundle — the bundle itself is a listener registration plus an attribute/annotation config. (b) Eloquent: not feasible without reimplementation; the actual logic is roughly 30–80 lines we would rewrite anyway.
  • Technical risk — high, driven by weak signal: 0 stars, 0 dependents, score 0. No downstream consumers means no field validation, no bug reports, no compatibility pressure. The namespace/repo mismatch (incompass/timestampable-bundle published from casechek/TimestampableBundle) reads as an internal extraction or vendor fork rather than a maintained OSS product. License, CI, coverage, and release cadence are not evidenced. With no community, there is no realistic expectation of upstream fixes; we must assume we own the code the day we adopt it.
  • Key questions for engineering:
    • What license, and does it permit vendoring/forking? This is a gate, not a detail.
    • Which Symfony, Doctrine ORM, and PHP versions are constrained? Doctrine ORM 3 changed listener signatures — confirm which we get.
    • Attributes or annotations? Does it autoconfigure, or must each entity opt in explicitly?
    • Does the trait declare the properties or expect us to? (Getting this wrong yields "property already defined" or "no mapped field" errors.)
    • \DateTime or \DateTimeImmutable? UTC-only or timezone-aware? Does it support immutable_datetime?
    • Which lifecycle events are covered — prePersist/preUpdate only, or also soft-delete/restore?
    • Does it handle bulk DQL/UPDATE paths? (It will not — Doctrine listeners do not fire on bulk operations. This is a known, silent-staleness failure mode we must design around.)

Integration Approach

  • Stack fit: Classify as no-fit for a standard Laravel/Eloquent service, conditional-fit only where Doctrine is already running in production. Make this classification the first decision, because if we are Eloquent-only, everything below is moot.
  • Migration path: If Eloquent, do not migrate to this. Reproduce the semantics with a trait plus booted() model hooks or an observer, or simply rely on native $timestamps. Effort is under a day, fully owned, zero external dependency — and we can extend it to blameable later without churning our dependency choices.
  • Compatibility gates: Confirm composer require resolves against our PHP constraint; check bundle registration against our Symfony major (5 vs. 6/7 differ on config and attribute autoconfiguration); check Doctrine ORM 2 vs. 3 listener signatures. Any failure here is a stop sign for this package, not a patch exercise — we should not spend engineering time patching an unmaintained dependency to fit.
  • Sequencing if we proceed anyway:
    1. Spike branch with the Doctrine bridge, confirming the listener actually fires on the entity operations that matter.
    2. Verify schema: timestamp columns exist, are nullable or defaulted, and the migration is online-safe on large tables.
    3. Vendor/fork into our repo within license terms, so we are insulated from upstream abandonment before the first deploy.
    4. Feature-flag on one low-risk entity (e.g. an AuditLog or a CRM last_contacted_at) — anywhere a missed update is a real bug and manual assignment is noise.
    5. Measure, then expand.
  • Portfolio priority: This should not preempt more material platform work. The payoff is small and the capability is cheap to build; sequencing it ahead of revenue-adjacent work would be a misallocation.

Operational Impact

  • Maintenance: The surface area is tiny (a listener plus config), so maintenance is cheap if vendored and risky if consumed live from an unmaintained upstream. Budget for a fork within the first quarter regardless of how smooth the initial install goes.
  • Support: Effectively single-maintainer with no community. The escalation path is "read the source." That is acceptable for infrastructure we can own outright; it is unacceptable for infrastructure we cannot — which is the deciding factor here given no adoption signal, no security-response expectation, and no release cadence.
  • Scaling: Runtime overhead is negligible — one listener per persist/update, no query amplification. The scaling concern is schema-level: adding updated_at columns to large tables requires online-safe migrations, and indexed timestamp columns on high-write tables add write amplification. Neither is a reason to reject the capability; both are reasons to plan the rollout rather than blanket-apply it.
  • Failure modes to design against:
    • Bulk DQL/UPDATE statements bypass listeners and silently leave timestamps stale — this is the single biggest threat to incremental sync and reporting watermarks keyed on updated_at.
    • Timezone drift when app and database disagree on UTC.
    • Null timestamps on pre-migration rows, which quietly poison "records untouched in 90 days" and SLA-clock queries.
    • Concurrent-write races where updated_at reflects commit order rather than logical order.
    • Silent no-op when the bundle is registered but autoconfiguration is disabled — the worst kind of failure, because everything looks wired.
  • Ramp-up: Low for an engineer fluent in Doctrine events. Moderate for an Eloquent-only team, because the real cost is learning the Doctrine event model, not this bundle — and that cost is not repaid by adopting a zero-star dependency.
  • Product-level framing for stakeholders: The underlying need is real and worth funding — trustworthy created_at/updated_at values are the substrate for audit evidence, dispute resolution, support triage, incident forensics, cohort/staleness reporting, retention enforcement, and cache-invalidation watermarks. But this specific package is not the right vehicle. It converts a small, well-understood problem into a supply-chain and bus-factor problem.

TPM recommendation: do not adopt as a dependency. Native Eloquent timestamps, the ecosystem standard (Gedmo Timestampable/Blameable for Doctrine shops), or a ~50-line in-house trait deliver the same outcome with zero third-party risk and full ownership. Treat this repo as a reference implementation worth reading, not a dependency worth adding. Re-evaluate only if we already run Doctrine, the license permits a fork, and we have confirmed blameable (created_by/updated_by) is out of scope for this quarter — because if blameable is in scope, it changes the build estimate and argues for Gedmo or in-house either way.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
coleus/frame
thtg88/journalism
filagora/filagora-ai-forums
rlacerda83/query-parser
socialdept/atp-orm
cboxdk/laravel-assistant-client
socialdept/atp-resolver
socialdept/tenant-domains
tautvydasr/blade-class-names
socialdept/color-scales
maherelgamil/controller
coleus/widgets
coleus/table
coleus/users
coleus/music
coleus/health
coleus/calendar
coleus/notes
coleus/support
coleus/settings