baskin/history-bundle
baskin/history-bundle adds revision tracking to your PHP models, recording each change so you can audit edits, review prior versions, and see how data evolved over time. Lightweight and straightforward to integrate into existing projects.
Category mismatch — flag first: baskin/history-bundle is a Symfony bundle, not a Laravel package. It wraps the Gedmo/DoctrineExtensions Loggable listener with a Twig extension that renders entity change history in templates. The real auditing engine is Gedmo Loggable (a Doctrine event subscriber writing to ext_log_entries); this bundle is a thin presentation layer over it. Treat it as a UX reference implementation, not an installable dependency.
Architecture fit: Poor for a Laravel codebase. Symfony DI container + Twig vs. Laravel service providers + Blade + Eloquent. Nothing transfers except the query/render pattern. For a Symfony app already on Doctrine + Gedmo, it is a natural drop-in.
Integration feasibility:
laravel-doctrine/orm solely to obtain Gedmo — an architecture-level change unjustified by a history widget; (b) port the concept — an audit repository plus a Blade component/directive — roughly 3–5 engineer-days.owen-it/laravel-auditing or spatie/laravel-activitylog cover ~90% of the requirement with active maintenance.Technical risk: High / presumptive abandonware. 0 stars, 0 dependents, single maintainer, no visible CI or release cadence. Compatibility with Twig 3, Symfony 6/7, Gedmo 3.x, and PHP 8.2+ is unverified. No security disclosure path. Any defect becomes ours to own.
Key questions:
data column into readable field diffs, or render raw serialized payloads?Stack fit: Not a dependency for Laravel. Use only as a design reference unless the target platform is Symfony.
Migration path (Laravel):
ext_log_entries (action, entity type, entity id, changed-fields JSON, actor id, timestamp) or use laravel-auditing's audits table directly.Auditable trait instead of Doctrine event subscribers.history(entity) ergonomics — timeline, field-level diff, resolved actor name.Compatibility: If Doctrine already exists in the Laravel app (some teams run it for legacy bounded contexts), pin Gedmo explicitly and verify Doctrine ORM 3 / PHP 8.3 compatibility before anything else — the bundle almost certainly does not declare it.
Sequencing:
laravel-auditing; default to buying.Maintenance: Worst-case profile — unowned code. If used, fork and vendor it, assign a named owner, and expect to carry PHP major upgrades internally. Budget 2–4 days per quarter for a production Symfony deployment.
Support: None. No maintainer SLA, no dependents generating community fixes, no CVE pipeline. Must be paired with internal security review, particularly because audit logs concentrate confidential data.
Scaling: ext_log_entries is append-only and unbounded — the dominant lifetime cost. Plan retention (12–24 months), archival or partitioning, indexes on (object_id, object_class, logged_at), and read-replica routing for history views. Estimate 1–5 KB per change and model volume before launch; blob diffs inflate storage fast. History rendering must be paginated — an unpaginated extension against a high-churn entity will take down a page.
Failure modes:
Ramp-up: Low technical complexity (small Twig helper), but non-trivial domain ramp — this is a compliance feature. Allow an engineer one day to internalize Gedmo's log schema, plus a PM/legal conversation on retention, PII exposure, and viewer entitlements. Time to production-ready: ~1 week in Symfony; 2–4 weeks for a Laravel-native rebuild.
Recommendation: Do not adopt as a Laravel dependency. Use laravel-auditing or a small in-house port modeled on this bundle's presentation layer; its only durable value is as a UX reference for rendering change history.
How can I help you explore Laravel packages today?