happenv-com/filament-presence
Filament plugin that brings real-time user presence to your admin panel—see who's online, away, or offline at a glance. Lightweight and easy to drop into any Filament resource, table, or page.
composer require happenv-com/filament-presence
php artisan vendor:publish --tag="filament-presence-config"
php artisan migrate
Check the package README for the exact publish tags; not every Filament plugin needs both.app/Providers/Filament/AdminPanelProvider.php:
use Happenv\FilamentPresence\FilamentPresencePlugin;
public function panel(Panel $panel): Panel
{
return $panel
->plugin(FilamentPresencePlugin::make());
}
App\Models\User as documented. Then clear caches:
php artisan optimize:clear
hideWhen() to suppress the indicator for sessions where presence should not be shown, such as impersonated sessions or demo accounts.Where to look first:
config/filament-presence.php if published.src/ directory for the plugin class and Livewire/table components.User model for integration points.hideWhen() for session-level suppression in v1.2.0:
->hideWhen(fn ($session) => $session->isImpersonated())
Good candidates are impersonation sessions, shared demo accounts, service accounts, and sessions belonging to a different tenant or guard.hideWhen() closures cheap. Prefer already-loaded model attributes or simple auth/tenant checks over per-row database queries.hideWhen() with policy/visibility checks. Hiding an indicator is a UI concern; it is not an authorization boundary.livewire(ListUsers::class)
->assertSee('Online');
For hidden cases, assert that the indicator text/component is absent when hideWhen() returns true.hideWhen() and only bumps a CI dependency, so the main risk is integration behavior, not a known breaking change.hideWhen() hides the indicator, but it does not necessarily stop the underlying session from being tracked. Do not rely on it for privacy or access control.web may show different sessions than a panel using an admin guard.hideWhen(). If the callback runs for every session row, eager-load relationships and avoid repeated queries.hideWhen() behavior for impersonation, tenant scoping, and any custom session filters you rely on.How can I help you explore Laravel packages today?