Skip to content

Commit e66418d

Browse files
committed
update
1 parent b816319 commit e66418d

3 files changed

Lines changed: 67 additions & 21 deletions

File tree

docs/releases.md

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -34,9 +34,48 @@
3434

3535
Released on Dec 31st, 2025
3636

37+
#### IMPORTANT NOTICE: BREAKING CHANGES AHEAD
38+
39+
First and foremost, Version 7 is NOT compatible with php 8.3. The minimum required version is now php 8.4.
40+
If you are using the release build (with nginx/apache + PHP), please make sure to update your environment accordingly.
41+
42+
Version 7 docker image is now powered by FrankenPHP with Laravel Octane instead of the traditional nginx + PHP-FPM stack. **Upgrading will require you to update your docker-compose setup.**
43+
44+
Check the upgrade documentation for more information: [https://lycheeorg.dev/docs/upgrade.html](https://lycheeorg.dev/docs/upgrade.html)
45+
3746
#### Major release: Webshop, star ratings, and more!
3847

48+
Read more on our [blog post](https://lycheeorg.dev/2025-12-31-version-7/) about Version 7.
49+
50+
#### Most notable changes
51+
52+
`SE` refers to functionalities that are aimed at the Supporter/Pro Edition.
53+
`klo` refers to *Keep the Light On*. In other words, basic software updates.
54+
3955

56+
* `klo` #3880 : Spec driven development support by @ildyria.
57+
* `new` #3881 : Add support for hprof in order to have profiling by @ildyria.
58+
> This will help us to profile and optimize Lychee for speed and memory useage..
59+
* `new` #3879 : Add option to make the smart albums only consider photos of the user by @ildyria.
60+
* `SE` #3868 : Webshop by @ildyria.
61+
> The biggest feature addition of 2025! After 6 months of intensive development, we're proud to introduce our fully-integrated webshop solution.
62+
* `new` #3889 : Switching to Octane with Frankenphp by @ildyria.
63+
> Major architectural change: Our Docker release is now powered by FrankenPHP with Laravel Octane instead of the traditional nginx + PHP-FPM stack.
64+
* `fix` #3892 : Fix tag-pinned-shared albums not being reset by @ildyria.
65+
* `new` #3893 : Add avif support by @ildyria.
66+
> Add native avif support using the imagick extension.
67+
* `new` #3896 : Support titles as dates for albums by @ildyria.
68+
> If your album is titled with a date format, we will now integrate it in the timeline display.
69+
* `new` #3898 : PHP 8.3 is dead by @ildyria.
70+
> As each year, we drop support for the oldest php version. This year, php8.3 is no longer supported.
71+
* `SE` #3899 : Add rating per user by @ildyria.
72+
> We add ratings per user. Each user can now rate photos from 1 to 5 stars.
73+
> Supporters have access to slightly more configurations options.
74+
* `new` #3903 : feat: add worker mode support for horizontal scaling by @ildyria.
75+
> This allows to run Lychee in a horizontally scaled environment with multiple workers.
76+
> In other words you can now process images in the background with multiple workers.
77+
* `new` #3905 : Add pre-computation of thumb images for improved speed by @ildyria.
78+
> We now pre-compute the thumb album cover and min-max dates for albums to improve speed when loading albums.
4079
4180

4281
## Version 6
@@ -154,10 +193,6 @@ This means that you will need to update your verification process accordingly. P
154193

155194
#### Most notable changes
156195

157-
`SE` refers to functionalities that are aimed at the Supporter Edition.
158-
`klo` refers to *Keep the Light On*. In other words, basic software updates.
159-
160-
161196
* `fix` #3700 : Fix user group issues by @ildyria.
162197
* `klo` #3701 : Split test suite in hopes to speed things up. by @ildyria.
163198
> We split the test suite in multiple jobs to speed up the overall test execution time.

src/content/post/2025-12-31-version-7.mdx

Lines changed: 16 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,19 +25,22 @@ Security remained a priority with multiple SSRF vulnerability fixes, ensuring yo
2525

2626
Version 7 marks a major architectural shift for Lychee. Our Docker release is now powered by FrankenPHP with Laravel Octane instead of the traditional nginx + PHP-FPM stack. This infrastructure keeps the framework in memory and reuses components across requests, eliminating the overhead of rebuilding the entire application on every page load. As a result, boot time drops from 40-60ms to just 4-6ms per request, with 3-4x better throughput and significantly reduced latency. In May 2025, FrankenPHP gained official support from the PHP Foundation, cementing its position as the future of high-performance PHP applications.
2727

28-
The new FrankenPHP-powered Docker image is available at `ghcr.io/lycheeorg/lychee` and will become the default once version 7 is fully stable.
28+
The new FrankenPHP-powered Docker image is available at `ghcr.io/lycheeorg/lychee` and has become the default now that Version 7 is fully stable.
2929

30-
This architectural change means you will need to update your Docker setup when upgrading from version 6 to version 7 with FrankenPHP. Please refer to our [upgrade documentation](https://lycheeorg.github.io/docs/upgrade.html) for detailed instructions.
30+
This architectural change means you will need to update your Docker setup when upgrading from Version 6 to Version 7 with FrankenPHP. Please refer to our [upgrade documentation](https://lycheeorg.github.io/docs/upgrade.html) for detailed instructions.
3131

32-
Do note that this change also has consequences in the way Lychee reads your `.env`
32+
**IMPORTANT: PHP 8.4 Required** - Version 7 requires PHP 8.4 or higher. If you are using the release build with nginx/apache + PHP (not Docker), ensure your environment is updated accordingly before upgrading.
33+
34+
Do note that the FrankenPHP change also has consequences in the way Lychee reads your `.env`
3335
file. Updating values in the `.env` file will now require a container restart to take effect.
3436

3537
#### Performance Revolution
3638

3739
In addition to changing the PHP engine, we've implemented several key performance optimizations:
3840

3941
- **Asymmetric Processing**: Intelligent parallel processing for photo imports, slashing the time needed to upload and process large photo collections
40-
- **Album Loading Optimization**: Deep refactoring of our codebase to handle large albums with grace, ensuring smooth browsing even with thousands of photos
42+
- **Worker Mode for Horizontal Scaling**: Ability to run Lychee with multiple workers for background image processing, enabling truly scalable deployments
43+
- **Album Pre-computation**: Smart caching of album covers and date ranges, dramatically improving album loading times
4144

4245
#### New Features That Matter
4346

@@ -51,7 +54,15 @@ In addition to changing the PHP engine, we've implemented several key performanc
5154

5255
The Webshop empowers photographers to monetize their work without leaving their Lychee galleries, opening new revenue streams and simplifying the sales process. This feature is exclusive to Lychee Pro users.
5356

54-
As a thank you to our loyal supporters, we've granted Lychee Pro access to all existing supporters at the $10/month tier or higher. This is our way of recognizing the community that makes Lychee possible.
57+
As a thank you to our loyal supporters, we've granted Lychee Pro access to all our existing supporters. It is now available at the $10/month tier or with any one-time support contribution. This is our way of recognizing the community that makes Lychee possible.
58+
59+
**New License Key Delivery System**: We've streamlined the license activation process with a self-service solution! Instead of receiving keys by email, our new automated system at [keygen.lycheeorg.dev](https://keygen.lycheeorg.dev) automatically checks your supporter tier and instantly provides you with the appropriate license key for your level. Get your Lychee Pro key on-demand, whenever you need it.
60+
61+
**Additional Features**:
62+
- **AVIF Support**: Native support for the AVIF image format using the imagick extension, bringing next-generation image compression to your galleries
63+
- **Timeline Enhancements**: Album titles formatted as dates now automatically integrate into the timeline display for better organization
64+
- **Smart Album Improvements**: New option to make smart albums only consider photos belonging to the specific user
65+
- **Profiling Support**: Added hprof support to enable detailed performance profiling and optimization
5566

5667
### Looking Ahead
5768

src/pages/roadmap.astro

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ const metadata = {
88
99
// Release data extracted from releases.md
1010
const releases = [
11-
{ version: 'v7.0.0', date: 'Soon...', title: 'Upcoming Major Release', type: 'major', highlights: ['Stay tuned for exciting new features and improvements!'] },
11+
{ version: 'v7.0.0', date: 'Dec 31, 2025', title: 'FrankenPHP, Webshop & Ratings', type: 'major', highlights: ['🌟 Webshop (Pro Edition)', 'Star rating system', 'FrankenPHP with Laravel Octane', 'Worker mode for horizontal scaling', 'AVIF support', 'PHP 8.4 required'] },
1212
{ version: 'v6.10.4', date: 'Dec 11, 2025', title: 'Minor Reflected SSRF fix', type: 'security', highlights: ['Fixed SSRF vulnerability with redirect validation', 'Added expert configuration to disable URL redirects'] },
1313
{ version: 'v6.10.3', date: 'Dec 4, 2025', title: 'Video support in embedded galleries', type: 'feature', highlights: ['Added video support to embedded galleries', 'Translations in EmbedCodeDialog', 'Fixed base URL for embedded galleries'] },
1414
{ version: 'v6.10.2', date: 'Nov 18, 2025', title: 'Translation updates and fixes', type: 'enhancement', highlights: ['Translation of all settings in admin panel', 'Fixed groups not loading in share dialog', 'Fixed SmartAlbum portrait errors'] },
@@ -153,11 +153,11 @@ const getReleaseTypeBadge = (type: string) => {
153153
<div class="mx-auto max-w-3xl pt-12 px-4 sm:px-6">
154154
<div class="grid grid-cols-2 md:grid-cols-4 gap-8 text-center">
155155
<div class="space-y-2">
156-
<div class="text-4xl font-bold text-primary">6.10+</div>
156+
<div class="text-4xl font-bold text-primary">7.0.0</div>
157157
<div class="text-sm text-gray-600 dark:text-gray-400 uppercase tracking-wide">Latest Version</div>
158158
</div>
159159
<div class="space-y-2">
160-
<div class="text-4xl font-bold text-primary">103</div>
160+
<div class="text-4xl font-bold text-primary">104</div>
161161
<div class="text-sm text-gray-600 dark:text-gray-400 uppercase tracking-wide">Total Releases</div>
162162
</div>
163163
<div class="space-y-2">
@@ -253,7 +253,7 @@ const getReleaseTypeBadge = (type: string) => {
253253
</ul>
254254
</div>
255255

256-
<!-- v6.10.4 -->
256+
<!-- v7.0.0 -->
257257
<div class="bg-white dark:bg-gray-800 rounded-xl p-6 shadow-lg border-l-4 border-amber-500">
258258
<div class="flex items-center gap-3 mb-3">
259259
<div class="w-12 h-12 bg-amber-100 dark:bg-amber-900 rounded-lg flex items-center justify-center">
@@ -262,16 +262,16 @@ const getReleaseTypeBadge = (type: string) => {
262262
</svg>
263263
</div>
264264
<div>
265-
<div class="text-2xl font-bold text-gray-900 dark:text-white">v6.10.4</div>
266-
<div class="text-sm text-gray-500 dark:text-gray-400">Dec 2025</div>
265+
<div class="text-2xl font-bold text-gray-900 dark:text-white">v7.0.0</div>
266+
<div class="text-sm text-gray-500 dark:text-gray-400">Dec 31, 2025</div>
267267
</div>
268268
</div>
269-
<h3 class="text-lg font-bold text-gray-900 dark:text-white mb-2">Latest</h3>
269+
<h3 class="text-lg font-bold text-gray-900 dark:text-white mb-2">FrankenPHP</h3>
270270
<ul class="space-y-1 text-sm text-gray-600 dark:text-gray-400">
271-
<li>• Embed galleries</li>
272-
<li>• Watermarking (SE)</li>
273-
<li>• Timeline view</li>
274-
<li>• Security hardened</li>
271+
<li>• FrankenPHP & Octane</li>
272+
<li>• Webshop (Pro)</li>
273+
<li>• Star ratings</li>
274+
<li>• Worker mode scaling</li>
275275
</ul>
276276
</div>
277277
</div>
@@ -310,7 +310,7 @@ const getReleaseTypeBadge = (type: string) => {
310310

311311
<!-- Timeline Items -->
312312
<div class="space-y-4 md:space-y-6">
313-
{releases.map((release, index) => (
313+
{releases.map((release) => (
314314
<div class="relative flex items-start gap-6">
315315
<!-- Date (Left Side) -->
316316
<div class="w-32 text-right flex-shrink-0">

0 commit comments

Comments
 (0)