johnrivera7 / filament-antivirus
Filament Antivirus — ClamAV upload scanning, quarantine and file security dashboard for Laravel.
v1.0.0
2026-08-28 18:40 UTC
Requires
- php: ^8.2
- filament/filament: ^5.0
- illuminate/contracts: ^11.28|^12.0|^13.0
- illuminate/support: ^11.28|^12.0|^13.0
- spatie/laravel-package-tools: ^1.16
- symfony/process: ^6.4|^7.0|^8.0
Requires (Dev)
- laravel/pint: ^1.18
- orchestra/testbench: ^10.0
- phpunit/phpunit: ^11.0
README
Filament Antivirus — ClamAV upload scanning, quarantine and file security dashboard for Laravel.
Stable
^1.0(MIT). Sibling of filament-cybersecurity (read-only posture). This plugin acts on files: scan, block uploads, quarantine.
Features
- Antivirus Dashboard — engine status, incidents, quarantine stats
- ClamAV via
clamdscan/clamscan(configurable) - Null driver for local dev without ClamAV
- Upload validation —
AntivirusFileRulefor Filament / Laravel forms - Quarantine — move infected files to
storage/app/quarantine/ - Incident log —
antivirus_incidentstable - Artisan:
antivirus:scan,antivirus:status - Facade:
Antivirus::scanPath(),Antivirus::scanUpload() - ES / EN translations
Requirements
| Stack | Versions |
|---|---|
| PHP | 8.2+ |
| Laravel | 11.28+ / 12+ / 13+ |
| Filament | 5.x |
| ClamAV | optional (recommended in production) |
Installation
composer require johnrivera7/filament-antivirus:^1.0 php artisan vendor:publish --tag="filament-antivirus-migrations" php artisan migrate php artisan vendor:publish --tag="filament-antivirus-config"
Register on your Filament panel:
use JohnRivera7\FilamentAntivirus\FilamentAntivirusPlugin; public function panel(Panel $panel): Panel { return $panel ->plugins([ FilamentAntivirusPlugin::make() ->navigationGroup('Configuraciones') ->navigationLabel('Antivirus') ->navigationSort(7) ->permission(fn (): bool => auth()->user()?->hasAnyRole(['super_admin', 'admin']) ?? false), ]); }
Configuration
ANTIVIRUS_DRIVER=clamav # clamav | null ANTIVIRUS_QUARANTINE=true CLAMAV_BINARY=clamscan CLAMAV_CLAMDSCAN_BINARY=clamdscan ANTIVIRUS_PREFER_CLAMDSCAN=true
Upload validation
use JohnRivera7\FilamentAntivirus\Rules\AntivirusFileRule; FileUpload::make('document') ->rules([new AntivirusFileRule()]);
CLI
php artisan antivirus:status php artisan antivirus:scan php artisan antivirus:scan /path/to/dir --purge
License
MIT © John Rivera