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

Filament Activity Timeline Laravel Package

bokshorn-it/filament-activity-timeline

A Filament plugin that turns spatie/laravel-activitylog into readable timelines: enum, date, boolean, and relationship diffs rendered through the subject model's own casts, plus a filterable activity resource, custom events, and German translations.

View on GitHub
Deep Wiki
Context7

Technical Evaluation

Architecture fit. The package is a presentation layer, not a data layer. It registers a Filament relation manager/timeline widget and a filterable Activity resource on top of spatie/laravel-activitylog, and its differentiator is a diff resolver that replays stored raw values through the subject model's own casts and relationships. That is the right shape: the activity log table remains the single source of truth, the package owns no schema of its own (beyond whatever it reads), and adoption is reversible by removing a panel plugin registration. Lock-in is genuinely low, which is the strongest thing about it from a portfolio-risk standpoint.

Integration feasibility. Mechanically simple for anyone already on Filament + activitylog: composer require, register the plugin in a panel provider, attach the timeline to a resource, and the resource appears in navigation. Prerequisites are the real gate — LogsActivity must already be wired on the subject models and logging the events you care about, because the package is read-only and cannot backfill history that was never captured. Teams that adopted activitylog "just in case" but never tuned logOnly/logExcept will find the output noisy rather than insightful.

Technical risk. Concentrated in three places:

  • Version coupling. This sits at the intersection of three independently-major-versioned ecosystems (Filament, Laravel, spatie/laravel-activitylog). Filament's v3→v4 transition broke plugins broadly; activitylog's v4→v5 schema changes (notably attribute_changes vs properties) alter what the resolver reads. With 7 stars and 0 dependents, there is no crowd to surface a compatibility break before you hit it. Pin constraints and verify against your exact matrix before committing.
  • The resolver is the risk surface. Reconstructing display values from casts and relationships means the package inherits every edge case your models have: attributes renamed or removed since the log entry was written, enum cases deleted, custom or encrypted casts, morph maps, soft-deleted subjects (labels resolve to null), and JSON/money columns. Expect to test against a real corpus of historical entries, not a fresh fixture set — old rows are exactly where raw values no longer match current model shape.
  • Rendering cost. Each timeline entry can entail resolving the causer, the subject, and N foreign-key labels. At realistic volumes this is an N+1 generator unless the package eager-loads; that is the first thing to profile.

Key questions for the vendor/author (or to answer yourself in a spike).

  1. Which Filament major versions and which activitylog major versions are declared, and is there a CI matrix covering the combinations we run?
  2. Are diffs resolved at render time or memoized, and is there any eager-loading of causer/subject relations?
  3. How does it behave for entries whose subject was deleted, and for attributes that no longer exist on the model?
  4. Is there a policy/authorization hook, or does the Activity resource default to any panel user who can reach it? Activity logs are a surveillance surface — who changed what, and when — and often need gating.
  5. Multi-tenancy: does the filterable resource scope by tenant, or does it expose all subjects across the panel?
  6. Localization and date-format handling — does the "14.08.2026" formatting respect app locale/config?
  7. What is actually covered by that Tests badge — the resolver, or just the happy-path widget render?

Integration Approach

Stack fit. Laravel + Filament + spatie/laravel-activitylog is one of the most common admin-panel combinations in the PHP ecosystem. Whoever is running Filament for back-office CRUD almost certainly already has the other two dependencies installed, or will. This is a near-zero-friction additive dependency for that audience, and essentially useless outside it.

Migration path. No data migration is required — it reads the existing activity_log table. The migration that is required is behavioural: if the team has not been logging, there is no history to show, and no amount of plugin installation creates it. Sequence the decision accordingly. If the team already has a bespoke activity screen, this is a replacement, so plan a parallel period rather than a cutover.

Compatibility. Treat the composer constraint as a hard gate in the PR. Confirm the resolved versions of Filament, Laravel, PHP, and activitylog against the package's composer.json, and re-check on every Filament minor bump. Because there are no dependents, you are the de facto compatibility test.

Sequencing.

  1. Confirm activitylog is installed, that the target models use LogsActivity, and that logOnly/logExcept produce signal rather than noise.
  2. Install into a staging or non-critical panel first; register the plugin and render the timeline on one resource.
  3. Build a review corpus of real historical log entries and verify diffs for every attribute type in production use — enums, dates, FKs, JSON, money, nullable fields.
  4. Add the authorization layer before anything ships to end users; decide explicitly who may read the Activity resource.
  5. Profile against a realistic log volume with the query log open; add indexes on subject_type/subject_id/created_at and confirm eager-loading before enabling the filterable resource broadly.
  6. Roll out to one resource, gather feedback, then widen. Keep the plugin registration isolated so it can be disabled per-panel.

Operational Impact

Maintenance. This is the dominant consideration. Seven stars, zero dependents, one apparent maintainer, and a maturity signal that reads "readme, changelog" — meaning the project is credible enough to have packaging and release hygiene, but has no adoption base behind it. Plan on being the primary QA for your version combination, and on filing or fixing your own issues. MIT licensing makes a fork legitimate and cheap if the upstream stalls; budget a small contingency rather than assuming upstream responsiveness. That contingency is realistically a few days, not a few weeks, because the surface area is one resolver plus two UI components.

Support. Community-only, no SLA, no commercial backing. Weigh that against the alternative: rebuilding the diff resolver in-house is roughly one to two weeks of engineering plus ongoing maintenance of your own cast-introspection edge cases — which is not obviously cheaper, and is certainly less well-specified than a package that has already thought about enums and foreign keys. For a non-critical, read-only audit surface, the tradeoff is acceptable.

Scaling. The bottleneck is the activity_log table, not the plugin. That table grows monotonically and is usually the largest in a mature Laravel app. Adopt spatie's activitylog:clean or your own archival policy at the same time you enable the UI, or you will be paginating through millions of rows within a year. Index subject_type/subject_id, causer_id, and created_at; verify the filterable resource uses them. The timeline on a single record is naturally bounded and cheap; the cross-cutting resource is where cost appears.

Failure modes to instrument for.

  • Attribute renamed or dropped → diff silently falls back to raw values, or throws.
  • Enum case removed → render exception on historical entries.
  • Subject soft-deleted → labels resolve to null; timeline looks broken rather than archival.
  • Custom/encrypted cast throwing during resolution → one bad row breaks a timeline page.
  • Deleted causer user → "System" vs. blank attribution, an audit-correctness issue.
  • Missing authorization → activity history, including causer identity, exposed to any panel user.
  • Locale/timezone drift → dates rendered in a format that contradicts the rest of the admin UI.

Ramp-up. Low. Any developer comfortable with Filament needs perhaps half a day to install, wire, and read the source; the underlying concepts — activitylog properties, Eloquent casts, relation managers — are already familiar to the team. The real ramp-up cost is not learning the package but building the historical-corpus test pass and the authorization policy around it. That work is unavoidable regardless of which package you choose, and is where the estimate should sit.

Recommendation. Trial it on one non-critical resource. It addresses a real, narrow, high-friction problem (raw activity log values are unreadable and therefore unused) with low lock-in and a plausible in-house fallback. Do not make it load-bearing for compliance-grade audit logging without first pinning versions, gating access, verifying historical-entry rendering, and accepting that you are the maintenance backstop.

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.
se7enxweb/flysystem
lampwick/laravel
jeslage/statamic-emojis
micahdshackelford/rmap-laravel
draftsmaninc/draftsman
square-bit/laravel-volition
himito/laravel-mailman
htinlynn/genius-helper
maco-studios/hephaestus
elmogy/larafast
xeviant/laravel-paystack
gorilladash/laravel-website-sdk
martialbe/flysystem-oss
chondal/3312client
jeroen-g/flickr
opscale-co/nova-genbi
itsjustvita/laravel-retention
tequilarapido/trackit
gregsphotography/site-builder-filament
cabaoctavio/laravel-query-log