liberusoftware/activity-comments-filament
Filament plugin that brings activity comments into Laravel admin panels. Provides UI components and resources to display and manage comment threads on activity records, making it easy to add comment timelines to Filament apps with minimal configuration.
Treat this as the presentation layer only: liberusoftware/activity-comments-filament is an adapter that renders activity feeds and comment threads inside Filament panels. The domain logic (models, migrations, contracts) lives in the sibling core module (liberusoftware/module-activity-comments), so you will almost always be installing two packages, not one. Confirm that assumption before anything else — it determines where your bugs will actually come from.
Step 1 — Verify compatibility before requiring. With 0 stars and no dependents there is no community safety net, so read the manifest first:
composer show liberusoftware/activity-comments-filament --all
Check three things in composer.json: the required Filament major (filament/filament: ^3.0 vs ^4.0), the PHP constraint, and whether liberusoftware/module-activity-comments appears in require or only suggest. If the core module is only suggested, you must install and configure it yourself or the adapter will boot into missing-class errors.
Step 2 — Install and publish.
composer require liberusoftware/activity-comments-filament
php artisan vendor:publish --provider="LiberuSoftware\\ActivityCommentsFilament\\ActivityCommentsFilamentServiceProvider"
php artisan migrate
If the publish tag list is empty, run php artisan vendor:publish interactively and read the numbered menu — module packages frequently register tags like activity-comments-filament-config and activity-comments-filament-views rather than a provider-keyed publish.
Step 3 — Register the plugin with your panel. This is the single most common "nothing appears" cause. In your PanelProvider:
public function panel(Panel $panel): Panel
{
return $panel
// ...
->plugin(ActivityCommentsPlugin::make());
}
The exact class name is the first thing to grep for: grep -rn "implements Plugin" vendor/liberusoftware/activity-comments-filament/src. Filament v3/v4 plugins implement Filament\Contracts\Plugin; anything else is a plain service provider and only registers views/assets.
Step 4 — Wire the host models. The core module typically exposes traits (commentable/records-activity). Add them to the models you want covered, then confirm the morph map is registered so polymorphic subject/commentable columns store aliases rather than FQCNs.
First use case: put a comments thread on the ViewRecord page of your busiest resource. Add the package's relation manager (or comments widget) to getHeaderWidgets() / getRelationManagers(), open a record, post a comment. That single flow exercises migrations, morph mapping, authorization, and Livewire wiring at once — if it works, the rest of the package will too.
Relation-manager pattern (recommended default). Attach comments as a relation manager on the resource rather than a page widget. You get pagination, per-record scoping, and Filament's built-in action modals for free, and the thread follows the record's authorization automatically. This is the least surprising integration for reviewers and future maintainers.
Timeline widget on the view page. Activity feeds are read-only and belong in a header/footer widget. Keep the feed widget and the comments relation manager on the same page but in different slots — comments below the form, activity in the sidebar — so the two data sources never fight over Livewire's update cycle.
Log through model events, render through Filament. Don't call the adapter from your domain code. Fire activity from observers/listeners in the core module (created, updated, statusChanged), and let the Filament layer stay a pure consumer. This keeps the feed correct when records change via console commands, jobs, or imports — not just via the UI.
Authorization belongs in policies. Filament asks canViewAny/canCreate on the relation manager and canView on the record. If your Comment policy isn't registered, Filament defaults permissively in some versions — verify by logging in as a low-privilege user before shipping. For soft-deletable comments, decide explicitly whether deleted comments render struck-through or vanish; the adapter's default is usually to exclude them.
Multi-panel and tenancy. If you run multiple panels (admin + customer), register the plugin per panel and gate visibility with ->visible(fn () => ...). Under Filament tenancy, verify the activity query is scoped to tenant_id or tenant() — a globally-scoped feed leaking cross-tenant activity is the worst failure mode this package can produce, and it is not something 0 dependents will have caught for you.
Reuse across many resources. Rather than copy-pasting the relation manager into fifteen resources, define it once and reference it:
public static function getRelations(): array
{
return [CommentsRelationManager::class, ActivitiesRelationManager::class];
}
If the adapter ships concrete managers bound to specific models, subclass them and override getRelationship()/getPluralModelLabel() — cheaper than reimplementing the table.
Testing. Drive it as a Livewire component: Livewire::test(CommentsRelationManager::class, ['ownerRecord' => $post, 'pageClass' => PostResource::class])->callTableAction(...). Assert DB state, not rendered HTML, so a Filament minor bump doesn't break your suite.
Zero stars and zero dependents means you are the QA team. There is no issue history to search and no Stack Overflow corpus. Pin the version exactly ("liberusoftware/activity-comments-filament": "1.0.0"), commit composer.lock, and read the whole src/ directory before deploying — it is likely small enough to audit in an hour.
License is NOASSERTION. This is a legal blocker, not a nitpick: Composer could not detect a recognised license. Open the LICENSE file in the package root before commercial use. If it's absent entirely, default copyright applies and you have no grant to redistribute. Escalate rather than assume MIT.
A release dated 2026-10-27 is a red flag. Either Packagist metadata is wrong, the tag was created with a system clock skew, or versioning is hand-managed. Check git tag and the actual commit dates on the repo; if the tag doesn't correspond to real code history, install from a vcs repository pinned to a commit SHA instead of the tagged release.
Filament major mismatch is the #1 install failure. Filament v4 moved/renamed several APIs (schema/infolist, action namespaces). An adapter written for v3 will install cleanly under v4 and then throw Class not found the moment the panel boots. Match adapter → core → Filament major, in that order, and check composer why-not filament/filament.
Morph map drift. If you register a morph map after activity rows exist, subject_type values written as FQCNs stop resolving and the feed silently renders empty. Enforce Relation::enforceMorphMap() from day one and backfill existing rows before enabling.
N+1 on the feed. Activity tables hold subject, causer, and often properties JSON. The adapter will lazy-load causers per row by default. Eager load in a custom query — ->with(['causer', 'subject']) — or the timeline will issue one query per entry on a 50-row page.
Asset and cache staleness. After publishing views or upgrading, php artisan filament:assets && php artisan view:clear && php artisan optimize:clear. A published view overriding a package view is the usual culprit when "my template change did nothing."
Extension points to prefer. Published Blade views under resources/views/vendor/... and subclassed relation managers survive upgrades; editing files in vendor/ does not. If the package exposes config for polling intervals or page sizes, set it in config/activity-comments-filament.php rather than in the component.
Debugging checklist, in order: plugin registered in PanelProvider? → panel cache cleared? → morph map registered before the feed query? → policy exists for the comment model? → subject_type rows still resolve? That sequence resolves roughly everything this class of package fails on.
Have an exit plan. With no dependents and no release cadence you can rely on, wrap the integration behind one relation manager and one widget. If the package is abandoned, replacing two class references with your own Filament table is a half-day job — replacing it after it has been sprinkled through twenty resources is not.
How can I help you explore Laravel packages today?