rmsramos/activitylog
A Laravel package for logging user and model activity to the database. It provides traits and helpers to record who changed what and when, then query activities to build audit trails, dashboards, and activity feeds with customizable models and a clean API.
spatie/laravel-activitylog records into a navigable admin surface (list, diffs, restore actions). That converts a "we log everything" engineering checkbox into a support and compliance capability — support agents and account managers can answer "who changed this and when" without a ticket to engineering.spatie/laravel-activitylog v5 (the current major) could not use this UI without patching it. That dependency pin was a hard "no" for any greenfield admin panel. v4.1.0 clears it, so "audit log viewer" can move from blocked to schedulable on the roadmap.attribute_changes column added, batch_uuid dropped) and a config key rename (subject_returns_soft_deleted_models → include_soft_deleted_subjects). Product framing: the viewer is safe to upgrade now; the data-model migration is a planned, separately scheduled change.Adopt when:
spatie/laravel-activitylog as your logging layer. This package is a UI on top of both; it is not a replacement for either.attribute_changes and falls back to v4's properties.old / properties.attributes, so mixed-version environments still render during rollout.Look elsewhere (or extend it) when:
attribute_changes, drop batch_uuid, rename the config key) as a discrete deploy with a backfill and a rollback path; do not let it ride along inside a routine dependency bump.Adoption checklist: pin to ^4.1; verify the Spatie major in composer.lock matches your migration state; test the restore action against a soft-deleted model in staging and confirm whether restores should be logged (the new withoutLogging() behavior is a policy default, not a neutral one); add a smoke test asserting v4-era log rows still render after you migrate the schema.
For executives (one paragraph): We get an audit-history screen for our admin panel essentially for free. The underlying event logging is already a well-established open-source library we're standard on; this is the interface layer that makes it usable by support, ops, and account teams instead of only by engineers reading a database. The newest release (v4.1.0, a non-breaking patch) removes the dependency blocker that prevented us from adopting it on our current stack, so this is now a small, schedulable piece of work rather than a research project. It reduces support escalations on "who changed this record" questions and gives us a credible evidence trail for security reviews and customer audits. The cost is a composer dependency plus a one-time schema migration on the logging library; the payoff is a capability we would otherwise build and maintain ourselves. Main caveat, stated plainly: it is a viewer, not a tamper-proof audit system — if we ever face a formal regulatory retention requirement, we'll need an append-only store behind it.
For engineering (the practical summary): This is a Filament UI over spatie/laravel-activitylog. Upgrade to ^4.1 — it's a patch release with no breaking changes and no code changes required on our side. The headline is Spatie v5 support: diffs are read from attribute_changes with a fallback to v4's properties.old / properties.attributes, so old and new log rows render correctly side by side. Restore actions now call withoutLogging() and withChanges() behind method_exists guards, so they work on both Spatie majors. The Spatie v5 migration is not included — we own that: add the attribute_changes column, drop batch_uuid, rename subject_returns_soft_deleted_models to include_soft_deleted_subjects. Treat that as a separate PR with a backfill and a staging verification pass, not as part of the dependency bump. Also worth a deliberate decision rather than a default: restores performed from the audit screen no longer generate their own log entry — confirm that matches our audit expectations before enabling the action in production. Given the single-maintainer project, consider pinning exact minor versions and keeping a fork path in the back pocket.
How can I help you explore Laravel packages today?