bnzo / livewire-tmp-cleanup
Schedule-driven cleanup of Livewire temporary uploads on S3-compatible storage (Cloudflare R2, AWS S3, MinIO). Built for Laravel Cloud users who can't use S3 lifecycle rules.
Requires
- php: ^8.2
- illuminate/console: ^11.0 || ^12.0 || ^13.0
- illuminate/contracts: ^11.0 || ^12.0 || ^13.0
- illuminate/filesystem: ^11.0 || ^12.0 || ^13.0
- illuminate/support: ^11.0 || ^12.0 || ^13.0
- league/flysystem-aws-s3-v3: ^3.0
Requires (Dev)
- driftingly/rector-laravel: ^2.3
- larastan/larastan: ^2.9 || ^3.0
- laravel/pint: ^1.13
- orchestra/testbench: ^9.0 || ^10.0 || ^11.0
- pestphp/pest: ^3.0 || ^4.0
- pestphp/pest-plugin-laravel: ^3.0 || ^4.0
- phpstan/phpstan: ^1.10 || ^2.0
Suggests
- livewire/livewire: Required if you actually want to clean up Livewire's temp uploads (^3.0 || ^4.0).
README
Schedule-driven cleanup of Livewire temporary uploads on any S3-compatible disk.
About
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.
- Deletes files older than N hours from a configured Laravel disk + directory.
- Auto-schedules a daily cleanup task — no boilerplate.
- Reads Livewire's
temporary_file_uploaddisk and directory by default. - Works with AWS S3, Cloudflare R2, MinIO, or any Flysystem S3 disk.
- Dry-run mode for safe inspection.
onOneServer()+withoutOverlapping()safe for multi-replica deploys.
Installation
composer require bnzo/livewire-tmp-cleanup
Auto-discovery wires the service provider, registers the Artisan command, and schedules the cleanup daily.
Usage
Zero config
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.
Manual scheduling
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.
Manual run
# 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.
Configuration
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. |
Compatibility
| 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.
Testing
composer test
composer analyse
composer format
Security
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.
Credits
License
The MIT License (MIT). See LICENSE.md.