- How do I install the Filament activity timeline package?
- Install it with Composer using composer require laboiteacode/filament-activity-timeline, then publish the config and translation files with the vendor:publish command documented in the README. Register the plugin on your Filament panel with ->plugin(ActivityTimelinePlugin::make()). The package assumes your application already writes structured activity rows; it renders them rather than creating them.
- Does this package require spatie/laravel-activitylog?
- The package is a presentation layer over an existing activity log, typically spatie/laravel-activitylog or a compatible schema, and it does not own persistence. Check the composer.json of the version you install to confirm whether the activitylog package is a hard requirement or optional for your setup. If your app has no structured activity logging yet, introduce that first, because this package only handles the display layer.
- Which Laravel, PHP, and Filament versions are supported?
- It is built as a Filament panel plugin, so it follows the Filament, Laravel, and PHP constraints declared in its composer.json. Verify those constraints against your panel before committing, especially the Filament major version, since plugin APIs differ between majors. Also enforce a minimum of v1.0.2, which is the security release.
- How do I turn raw attribute diffs into readable business sentences?
- Use the semantic registry to map attributes to human labels, value formatters, and translatable sentences so a diff like customer_id: 14 -> 27 renders as Client: ACME France -> Dupont Conseil. You can customize events and the causer display without scattering callbacks across every Filament resource. Keep the mappings in configuration or a dedicated registry class so they stay reusable across widgets, pages, and infolists.
- Can I use the timeline as a widget, a page, or inside an infolist?
- Yes. The timeline can be dropped in as a Filament widget, embedded in a page, or rendered inside an infolist, all using the same semantic presentation layer. The drop-in widget exposes properties for scoping the record and tuning the display. Start with the widget for a resource view and move to a page when you need a standalone audit screen.
- How do filters and pagination work on the activity timeline widget?
- Filters are exposed as event tabs, and filterByEvent only accepts an event that is actually exposed as a tab, so unknown values are rejected rather than injected into the query. Pagination is bounded by pagination.max_per_page, which defaults to 500, limiting how much of the log a single Livewire request can render. Raise or lower that value deliberately based on your log volume and page performance.
- Is the timeline widget safe against tampered Livewire requests?
- From v1.0.2 onward every public Livewire property on the widget is marked #[Locked], the visible window is bounded by pagination.max_per_page, and filterByEvent only accepts exposed event tabs. These changes close the pre-1.0.2 issue where a crafted request could replace presentationOverrides and expose attributes outside the mounted hidden set. Attributes listed in the hidden_attributes config were never affected, and the record scope was never swappable. Enforce version >=1.0.2 with no exceptions.
- How do I translate or theme the activity timeline?
- Publish the package translations and override the language files to change event sentences, labels, and causer wording per locale. Theming is handled through the published views and config, so you can match your panel's design without forking the package. Because the output is localized through Laravel's translator, per-panel locales work as expected.
- How do I test the activity timeline in my application?
- The package ships a test suite and static analysis workflows, so you can rely on its rendering behavior, but your own label maps and humanizers still need coverage. Test the timeline through Livewire widget tests in your application and assert that key events render the expected sentences. Also test the hidden_attributes and pagination limits if you customize them, since those are security-relevant config surfaces.
- Is this package production-ready and well maintained?
- Treat it as a presentation layer over data you already own, which keeps adoption reversible, but note that it is a single-maintainer, pre-community package without a long third-party production track record. v1.0.2 is a self-initiated, well-scoped security release with upgrade notes, which is a positive signal but not yet a track record. Pin the version floor, review the code path for your hidden attributes, and have a fallback plan if maintenance stalls.