liberusoftware/sessions-devices-livewire
Livewire components for managing user sessions and devices in Laravel apps. Show active browser sessions with device, platform, and last-activity details, and let users revoke individual sessions or log out everywhere—a drop-in UI for account security pages built on Laravel's session and auth APIs.
Architecture fit
This package is a presentation adapter — the Livewire/Blade UI layer for a sessions-and-devices domain module (liberusoftware/module-sessions-devices, by inference). That places it at the edge of a hexagonal/ports-and-adapters design: it should contain almost no business logic, only components, views, and route wiring that call into the underlying domain services. For a TPM this is the best possible shape for a low-risk adoption: the surface area is thin, the coupling is directional (UI → domain), and replacing it later means rewriting views, not data models.
It is a good fit only if the host application is a server-driven Laravel monolith using Livewire as its primary interaction model. It is a poor fit for API-first, Inertia/Vue/React, or headless architectures, where the adapter contributes nothing and you would consume the domain module directly. There is also overlap risk with Filament or Jetstream, both of which ship their own session/profile-device surfaces; adopting this alongside them creates two competing UIs for the same concept.
The real architectural decision is not "should we use this adapter" but "should we adopt the Liberu module ecosystem," because the adapter is not independently valuable — it is a skin over a domain package you must also take on.
Integration feasibility
Mechanically trivial: Composer install, Laravel package auto-discovery, likely publishable views/config and a small set of registered routes. A competent Laravel developer can have it rendering in a scratch app in under an hour. The feasibility questions are all about compatibility and governance, not effort:
wire: directives, #[Locked]/#[Validate] attributes, layout conventions). An unstarred package with an ambiguous release history may target either. This is the single largest binary integration blocker.Technical risk
Key questions for the maintainer
composer.json?Stack fit
Target profile: Laravel 11/12, PHP 8.2+, Livewire 3, Blade + Tailwind. The package should slot in with no build-step changes. If the host app is on Livewire 2, budget for a fork-and-port rather than waiting on upstream. If the host app is Filament-based, do not integrate — instead evaluate whether the domain module's services can back a custom Filament page, which avoids running two UI stacks for one concern.
Migration path
Treat this as a greenfield additive feature, not a migration. Do not attempt to retrofit it onto an existing custom device-management implementation in the first pass. The clean sequence:
composer require ...:x.y.z, not ^).Compatibility and data
The host app must own the sessions/devices schema. Confirm whether migrations ship with the domain package or must be published and adapted; if the latter, reconcile column types and indexes with your existing sessions table before writing data. For existing users, device records are almost certainly absent — plan for a cold-start where the device list is empty until users re-authenticate, and set expectations with stakeholders that this is expected behavior, not a bug.
Sequencing and gates
Because the adapter is thin, maintain an exit ramp from day one: wrap component invocation behind your own route/controller boundary so that replacing the UI later is a view rewrite, not an application refactor. The switching cost is low — which cuts both ways, and argues for building in-house if the spike reveals friction.
Maintenance
This is the dominant ongoing cost. With one maintainer, zero dependents, and no visible issue traffic, you should assume you will own this code within twelve months. Budget for a fork: vendor the package into your repository or maintain a private mirror, and pin exact versions with a documented upgrade procedure. Do not use floating constraints anywhere in the dependency chain. Track upstream commits manually — there is no release cadence to rely on.
Support
There is no community support channel of meaningful size. Expect zero Stack Overflow coverage and slow or absent responses to issues. Internal documentation must be written by your team during the spike, not sourced from upstream. If the domain is business-critical, the honest answer is that the support model is "we support it."
Scaling
Two concerns. First, session listing reads from the sessions table, which grows with concurrency; without an index on user_id this becomes a table scan on every profile page load. Verify and add indexes yourself. Second, Livewire's server-driven model means each poll or action is a full round trip and a PHP request — if the device list auto-refreshes, it will be chatty under load. Prefer explicit user-triggered refresh over polling, and paginate if a user can accumulate many devices.
Cross-node correctness matters if you run multiple app servers: revocation only propagates reliably with a shared session store and Laravel's AuthenticateSession middleware active on the relevant guard. Without that, a revoked session can remain valid on another node — a security bug that looks like a UI bug.
Failure modes
Ramp-up
Low technical ramp-up, moderate organizational ramp-up. A developer fluent in Livewire needs roughly one to two days to become productive in the adapter and two to three more to understand the domain module's service contracts. The heavier lift is procedural: establishing the fork-and-pin discipline, the security review gate, and the upgrade watch. Overall, plan on a two-week elapsed evaluation from Gate 0 to Gate 3, with engineering effort concentrated in a two-day spike plus one security review.
Recommendation
Do not adopt on the current evidence. The license ambiguity is disqualifying until resolved, and the maturity signals (zero stars, zero dependents, single maintainer, anomalous release metadata) are uniformly negative. However, the underlying need is legitimate and Laravel's native tooling is thin. The pragmatic path: run Gate 0 and the two-day spike in parallel, and if the adapter clears both, adopt it behind your own abstraction with a vendored fork. If either gate fails, build the equivalent UI in-house against the same domain concepts — for a surface this small, in-house is likely a two-to-three-week effort and removes the license, bus-factor, and upgrade risk entirely.
How can I help you explore Laravel packages today?