koassi/filament-file-explorer
A Finder-style file explorer for Filament v4/v5, backed by Spatie Media Library over a folder tree. Includes icons, columns and detail views, keyboard navigation, drag and drop, trash, quotas, tags, versions and share links. Ships as a standalone panel page or form component, with a demo seeder to t...

A Finder-style file explorer for Filament v4/v5, backed by Spatie Media Library over a folder tree. Icons, columns and details views; keyboard operation; drag and drop; trash, quotas, tags, versions and share links.
๐ Documentation
composer require koassi/filament-file-explorer
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="medialibrary-migrations"
php artisan migrate
php artisan filament-file-explorer:install
Register the plugin in your panel provider:
use Koassi\FilamentFileExplorer\FilamentFileExplorerPlugin;
public function panel(Panel $panel): Panel
{
return $panel->plugin(FilamentFileExplorerPlugin::make());
}
Add the package views to your Filament theme so Tailwind picks up their classes, then publish the assets:
@source '../../../../vendor/koassi/filament-file-explorer/resources/views/**/*.blade.php';
npm run build
php artisan filament:assets
An Explorer entry appears in the navigation at /{panel}/file-explorer, and the root folder is created on first visit. Full steps: Installation.
php artisan file-explorer:demo # fill it with something to look at
A standalone page (default) โ a panel-level page in the navigation menu, backed by a single root folder. No model, no record. Where the root comes from is a resolver's decision: one shared library, one per user, one per tenant, or your own.
Record-scoped pages โ an explorer attached to an Eloquent record and reachable from its resource, so a project or a client has files of its own.
Both reduce to the same Livewire component driven by two values: a scope key and a root folder id.
| Views | Icons, the Finder's cascading columns, details rows โ remembered per scope |
| Large libraries | Sorting, filtering and windowing in SQL; thousands of files stay responsive |
| Keyboard and touch | The listing is a listbox; a finger gets its own gestures |
| Large uploads | Sliced past post_max_size, or straight to S3 |
| Trash | Deleting moves aside, with restore and purge |
| File versions | Replacing a file keeps the last N |
| Tags and descriptions | A per-scope vocabulary, searchable, filterable through the subtree |
| Share links | A public link to one file โ expiring, revocable |
| Quotas | A cap per scope, in the sidebar and on the dashboard |
| Thumbnails | Images by default; PDF and video opt-in |
| The form field | The explorer in a modal, writing media ids into your form state |
| Events | Twenty of them, so audit, scan and index need no fork |
FileExplorerAuthorizer answers what a scope may do. Nothing ever defaults to allowed.Both are required, on every action and every route. See Authorization.
PHP 8.2+ ยท Laravel 11 or 12 ยท Filament v4 or v5 ยท Media Library v11
composer install
./vendor/bin/pest # PHP suite
node --test "tests/Js/*.test.mjs" # selection and keyboard logic
The JavaScript tests need nothing installed: they run the shipped script in a node:vm context with a stubbed Alpine and DOM. See Contributing.
MIT โ see LICENSE.
How can I help you explore Laravel packages today?