promethys/revive
Revive adds a central Recycle Bin to FilamentPHP apps, letting you view, restore, or permanently delete soft-deleted Eloquent models in a few clicks. Register models with a trait, filter by type, and recover deleted data fast.
revive:discover-soft-deleted (with --dry-run and --with-scope) is the specific piece that de-risks retrofitting an existing production database.enableUserScoping() / enableTenantScoping() / showAllRecords() are not just config — they are product policy. This is the decision point for whether a tenant admin can see a departed colleague's deletions, whether cross-tenant deletion data is visible to platform staff, and how that maps to your data-processing agreements.user, admin, and tenant panel from one codebase. The embeddable @livewire(\Promethys\Revive\Tables\RecycleBin::class) component supports a narrower rollout — e.g. only inside a Settings page — before committing to a nav item.Adopt when:
SoftDeletes on more than a handful of models. Below that threshold, a single custom Resource is cheaper than a dependency.revive:discover-soft-deleted).Recyclable trait, so risk exposure is explicit rather than automatic across the app.Look elsewhere / build in-house when:
authorize() is panel- or closure-level).forceDelete here is unrecoverable.Mitigations if you adopt anyway: MIT license means you can fork and vendor it; the surface area is small and self-contained; pin the major version; write your own integration tests around restore/force-delete/scoping before relying on it in a customer-facing panel.
To executives: We already store deleted records but give users no way to get them back, so every accidental deletion becomes a support ticket or an engineer with database credentials. This package turns that hidden data into a self-serve "Recycle Bin" page in our admin panel in days rather than weeks, and it gives us a compliant permanent-deletion path for erasure requests. The cost is a small open-source dependency (MIT, forkable) that we version-pin; the risk is maintainer depth and a forced upgrade each time we move Filament majors. Recommendation: adopt for internal/admin panels first, measure ticket reduction, then expose to end users.
To engineering: It is a Filament plugin plus a Recyclable trait. You register it per panel, tag models with the trait (requires SoftDeletes — it throws otherwise), and configure scoping with enableUserScoping() / enableTenantScoping() / showAllRecords(). It ships migrations, a discovery command with --dry-run and --with-scope to backfill pre-existing records, and an embeddable Livewire table if we don't want a nav entry. Requirements for the current line are PHP 8.2+, Laravel 11+, Filament v5. Two things to own deliberately: (1) pin the major version and treat Filament upgrades as a coupled change, (2) decide explicitly whether forceDelete is available to non-admins — that is a product policy question, not a config default.
How can I help you explore Laravel packages today?