bnzo/livewire-tmp-cleanup
Schedules automatic cleanup of Livewire temporary uploads on S3-compatible disks. Adds the livewire-tmp:clean Artisan command to delete files older than a configurable age, with optional dry-run. Auto-scheduled daily, safe for multi-server deployments.
Livewire's S3 temporary uploads accumulate forever unless something deletes them. This package adds a single Artisan command — livewire-tmp:clean — that removes files older than a configurable age from a configured disk and directory, and registers it on Laravel's scheduler for you.
temporary_file_upload disk and directory by default.onOneServer() + withoutOverlapping() safe for multi-replica deploys.composer require bnzo/livewire-tmp-cleanup
Auto-discovery wires the service provider, registers the Artisan command, and schedules the cleanup daily.
By default the package schedules livewire-tmp:clean to run daily at midnight via Laravel's scheduler with onOneServer() and withoutOverlapping(). As long as php artisan schedule:run is firing every minute, you're done.
To control the cadence yourself, opt out of the auto-schedule:
LIVEWIRE_TMP_CLEANUP_SCHEDULE=false
Then in routes/console.php:
use Bnzo\LivewireTmpCleanup\LivewireTmpCleanup;
LivewireTmpCleanup::register()->hourly();
register() returns a Schedule\Event already configured with onOneServer(), withoutOverlapping(60), and runInBackground(). Chain a frequency.
# Dry-run — list what would be deleted, don't actually delete.
php artisan livewire-tmp:clean --dry-run
# Aggressive cleanup with a 1-hour cutoff.
php artisan livewire-tmp:clean --hours=1
# One-off cleanup of a different disk / directory.
php artisan livewire-tmp:clean --disk=other-bucket --directory=uploads/tmp --hours=6
The command prints deleted=N skipped=N errors=N and exits non-zero if any individual delete failed. Per-file errors are logged via Log::warning.
Publish the config to commit values rather than using env vars:
php artisan vendor:publish --tag=livewire-tmp-cleanup-config
| Key | Env var | Default | Notes |
|---|---|---|---|
disk |
LIVEWIRE_TMP_CLEANUP_DISK |
null (auto) |
Resolves to livewire.temporary_file_upload.disk → filesystems.default → s3. |
directory |
LIVEWIRE_TMP_CLEANUP_DIRECTORY |
null (auto) |
Resolves to livewire.temporary_file_upload.directory → livewire-tmp. |
hours |
LIVEWIRE_TMP_CLEANUP_HOURS |
24 |
Files older than this are deleted. Refuses values < 1. |
schedule |
LIVEWIRE_TMP_CLEANUP_SCHEDULE |
'daily' |
Set to false to opt out and self-register. Whitelisted: everyMinute, everyTwoMinutes, everyFiveMinutes, everyTenMinutes, everyFifteenMinutes, everyThirtyMinutes, hourly, daily, weekly, monthly. Unknown values fall back to daily. |
| Package | PHP | Laravel | Livewire |
|---|---|---|---|
| 1.x | ^8.2 | 11.x · 12.x · 13.x | 3.x · 4.x |
Also requires league/flysystem-aws-s3-v3 (hard dep) and a non-file cache driver (database, redis, memcached) for withoutOverlapping() to work across replicas.
composer test
composer analyse
composer format
If you discover a security issue, please open a private security advisory at https://github.com/bnzo/livewire-tmp-cleanup/security/advisories/new rather than a public issue.
The MIT License (MIT). See LICENSE.md.
How can I help you explore Laravel packages today?