Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_017XYnWFt9pJEwvAmNFN38XD
5.3 KiB
5.3 KiB
Changelog
All notable changes to this project are documented in this file.
The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.
Unreleased
1.2.0 - 2026-09-10
Added
LIVEWIRE_MAX_UPLOAD_TIME(minutes, default 30) sets how long a single upload may take before its signed upload URL expires. Raise it when large files arrive over slow connections.- A "Large files" section in the README listing every limit that has to be raised together for big uploads: PHP, admin settings, upload time, execution time and the reverse proxy.
Changed
- Upgraded to Pest 5.1 (
pestphp/pest^5.1,pestphp/pest-plugin-laravel^5.0), which brings PHPUnit 13.3. The test suite needed no changes. - Updated PHP dependencies within their existing constraints: Laravel 13.31, Livewire 4.4.4, Octane 2.19.1, Fortify 1.39, Mary 2.9.10, Boost 2.8 and Pint 1.32. Guzzle moves to 8.2 as a transitive dependency of Laravel.
- Updated frontend dependencies: Alpine.js 3.17.2, DaisyUI 5.7.32, Vite 8.2.2 and
laravel-vite-plugin3.2.
Fixed
- Files larger than 4 GB were always rejected with "Upload failed: file exceeds the maximum size of N MB", even when the admin's maximum file size N was bigger than the file. Livewire's temporary upload rule had a hard-coded 4 GB cap; it is gone, so
PHP_UPLOAD_MAX_FILESIZEis the hard limit and the admin setting is the enforced one. - An upload the server rejects no longer blames the admin's maximum file size. The user is told the server could not accept the file, and the actual reason is logged as a warning.
1.1.0 - 2026-07-23
Changed
- Upgraded to Laravel 13 (
laravel/framework^13.0,laravel/tinker^3.0). PHP 8.5 is now the minimum. - Set
serializable_classestofalseinconfig/cache.php, so a leakedAPP_KEYcannot drive an object gadget chain through the cache. - Upgraded the frontend toolchain to match the Laravel 13 skeleton: Vite 8,
laravel-vite-plugin3, Tailwind CSS 4.3.3, DaisyUI 5.7, Alpine.js 3.15.12 and concurrently 10.
Fixed
- Adding a second batch of files to a share left the uploader stuck on "Processing files…" forever, with the drop zone and the "Create Share Link" button permanently disabled. The uploading state is now cleared by a
files-processedevent dispatched on every batch, instead of a one-offx-initthat only ran the first time the file list appeared. - Dropping files on the drop zone showed no upload progress at all, because
uploadMultiple()was called without progress callbacks. - Dropping a second folder onto an existing selection replaced the collected relative paths instead of appending them, which shifted every earlier file's path onto the wrong file.
Removed
- Dropped the unused
axiosdependency and the stale@rollup/rollup-linux-x64-gnuoptional pin (Vite 8 builds with rolldown).
Security
- Forced
shell-quoteto a patched release via an npm override, clearing GHSA-395f-4hp3-45gv (quadratic complexity DoS).npm auditreports 0 vulnerabilities, down from 3.
1.0.1 - 2026-02-25
Fixed
- ZIP downloads returned 0-byte archives under FrankenPHP. ZipStream writes through
fwrite(php://output), which FrankenPHP silently drops; downloads are now built with nativeZipArchiveand served as a file response. - Docker image was missing the PHP
zipextension required byZipArchive. - Stale
bootstrap/cache/*.phpfrom the build context could load dev-only service providers in the production image. DB_DATABASEnow defaults to/app/database/database.sqliteindocker-compose.yml, so theenv()fallback resolves correctly.- The unlock button on the password-protected share page rendered outside the form and did nothing. Share page action buttons are now consistently full width.
Removed
maennchen/zipstream-phpdependency.
1.0.0 - 2026-02-13
Added
- Initial release.
- File uploading via drag & drop or browse, supporting multiple files and folders with real-time progress.
- Shareable links, one unique link per upload.
- AES-256-GCM encryption at rest, chunked and streaming, with PBKDF2-SHA256 key derivation.
- Optional password protection per share.
- Configurable expiration from 1 hour to 30 days, and per-share download limits.
- ZIP download of all files in a share.
- Hourly auto-cleanup of expired shares and their files.
- Admin dashboard and settings for upload limits, storage quotas and branding.
- Site branding: custom logo, title and description.
- Optional system password gate restricting upload access.
- User authentication (login, registration, password reset, email verification) and TOTP two-factor authentication via Laravel Fortify.
- First-run setup wizard for creating the initial admin account.
- Dark themed UI built with Livewire, Alpine.js, Tailwind CSS and DaisyUI.
- Docker images published to
ghcr.io/surtic86/sealshare, served by FrankenPHP via Laravel Octane.