-
v2.2.0
Stablereleased this
2026-09-19 04:13:04 +00:00 | 2 commits to main since this releaseAdded
- The admin dashboard shows the installed SealShare version, with links to its release notes, the SealShare website and noNameWEB.
Changed
docker-compose.example.ymlmountssealshare_databaseat/app/database/sqliteinstead of/app/database, and setsDB_DATABASE: /app/database/sqlite/database.sqlite. Existing compose files keep working. To switch, mount the same volume at the new path and setDB_DATABASEin both services; the database is kept.- A share that reaches its download limit is closed at once, but deleted by the hourly cleanup 24 hours after its last download instead of immediately, so downloads still running can finish. Until then its files count towards the storage quota.
- The download page of a share with a download limit says how many downloads are left, or how long the recipient can still download.
- The admin dashboard shows downloads as "2 of 3 downloads" and marks shares at their limit as "Download limit reached". These no longer count as active shares.
- The sort dropdown on the admin dashboard spans the full width of the shares card.
- PHP reads the Docker image's limits (
PHP_UPLOAD_MAX_FILESIZE,PHP_POST_MAX_SIZE,PHP_MAX_EXECUTION_TIME,PHP_MAX_INPUT_TIME,PHP_MEMORY_LIMIT) from the environment itself; the entrypoint no longer writes an ini file on start. The variables and their defaults are unchanged. - Updated to Livewire Material 2.2.0.
- Development:
docker-compose.dev.ymlextendsdocker-compose.yml, so the dev stack runs the scheduler and the production image's PHP extensions, plus a Vite dev server with hot reload. It takes its settings from.env, and publishes ports only withdocker-compose.ports.yml.docker/dev.Dockerfilebecame thedevstage of theDockerfile.
Fixed
- Docker installs set up before 2.1.0 answered every upload with "409 Conflict" after the update. The example
docker-compose.ymlmounted the SQLite volume over all of/app/database, which hid the image's new migrations, so they never ran. The container now adds the migrations the volume is missing before migrating. - A share with several files and a download limit was deleted as soon as one file was downloaded, because every file counted as a whole download. Now one recipient's visit counts once, and they have 1 hour to download all the files and the ZIP. Two recipients who start at the same moment can no longer both get the last download.
- The scheduler container no longer shows as "unhealthy". It inherited the image's healthcheck, which asks the web server that only the app container runs. For an existing install, add
healthcheck: { disable: true }to the scheduler service in yourdocker-compose.yml. - The "30 Days" expiration lasted a calendar month; it now lasts 30 days.
- Admin settings only save a default expiration that is one of the offered options.
Removed
- Email verification (
/email/verify), which was never enforced: SealShare has a single admin account and no registration. - The
composer devscript and the packages only it used (concurrently,laravel/pail,laravel/sail,autoprefixer), with theshell-quoteoverride thatconcurrentlyneeded. Development runs in Docker (docker-compose.dev.yml).
Downloads