A look back on Server-Side rendering performance with Livewire in Lychee v5.
On December 25th, we released Lychee version 5. This was the first major version bump since April 2020. This new version brings the latest and shiniest part of the laravel ecosystem: Livewire.
What is Livewire?
Livewire aims to bridge the gap between the front-end and the backend, with an ambitious message: “you no longer need to know JS to do front-end reactivity”. The premise is appealing:
no more AJAX requests,
no more JS needed to build the DOM (like in Lychee v3 and v4),
no more DOM manipulation,
no more events to track,
only PHP (stronger type garantees),
re-using blade templates & Laravel components,
in place replacement with dom-diffing…
Single Page Application behaviour with url updates.
All this is done with this single library which takes care of keeping a cryptographically authenticated state, provide events annotation hooks on html elements and forward those calls to the Server, executing direclty php methods on the components.
So far soo good. It took me about 1.5 years to re-implement the front-end, added tests. We are ready to ship.
A sad reality: local development vs real life server performance.
When doing local development with Livewire, everything seems fast. The request are instantanuous, the reactivity is palpable. However, as soon as you are deploying on an external server, you are immediately faced with a harsh reality: Latency is a B**tch.
What is happening? Any action with behaviour is trigerring a call to the server. This round-trip instantly kills the fluidness previously seen. Everything is slow, opening menus are taking ages… Switching from one picture to another is terrible.
There is however a solution: AlpineJS. A small library to leaverage local interaction such as hover, opening menus etc to JavaScript and keep the rest with Server Round trip. One could say that Alpine is very close to VueJS in its design, to the point where the naming convension are similar: x-on instead of v-on, x-html instead of v-html, etc…
Using AlpineJS, I rewrote the photo navigation and editing part, I rewrote the layout (justified, masonry etc.) of the pictures in albums. Finally Lychee v5 was getting usable.
A N + 1 query blade for-loop.
We got report from our users that when using a large number of albums and sub-albums, Lychee was getting slower beyond what would be acceptable. We pop back debug mod with the trusted debug bar and have a look at what is going on.
What do we see? Server takes 2,43 seconds to respond and for 45 sub-albums we have 354 SQL statement executed with 348 of them being duplicates. There is no doubt, we have a N+1 problem.
After a few hours of debugging the culprit was found: the id of the thumb of the parent album [Parent] was being queried for every sub-album [child] in order to check whether the current sub album [child] was used to specify the facade of the album [Parent]. With a bit of caching, this went away quickly.
Similarly, the computation of the parent album [parent] access rights were done for every single [child] instance. This lead to another set of duplicated queries.
After a few updates and iterations, we got the following results.
33 Queries, with 17 duplicates. Good enough. At least that number is no longer related to the number of Sub-Albums, it is therefore a flat cost. We will bit the bullet for now…
Still slow: Serialization
Still after this being solved, reports kept coming that Lychee was still slow when opening albums with large number of pictures. In order to track down this issue, we can no longer use DebugBar, it is not precise enough. So we turn ourselves to ClockWork, a powerful request analyzer.
This is a request opening an album with 700 pictures. No sub-albums, just a collection of photos. Without XDebug enabled (it usually produces a 20x slowdown), it takes 3 seconds for the server to produce the data, and render the page. What is going on?
Scrolling down we see the following waterfal. In Red are the SQL queries, in pruple the rendering of the components.
It is obvious that the roadblock is not dues to SQL queries: 2876ms are spent in the app, while 162m are spent waiting for the database. What is happening in that purple part? Simple, data are being serialzied to be sent to the front-end. Do note that we already did optimize our communcation between the server and the front-end:
we only send the minimum amount of data to needed to be displayed.
we only use the id of the models, all the other information are kept serverside. This has two benefits, it prevents exposing uncontrolled data (e.g. password field not in the $hidden attribute of a model will be displayed by the toArray() which is used by default by Laravel to serialize models. ).
Serialization with toArray() breaks in our case due to the recursive nature of the Parent-Child relationship in albums.
As a result, it is pretty clear that at least 75% of those 2876 ms are mostly spent on serialization of data. This is assumption is also quickly verified: by setting LIVEWIRE_ENABLED=false in your .env, you are reverting back to the front-end of Version 4. The results are immediate. The speed kicks in and Lychee feels snappier.
We dig a little more in the serialization problem with Laravel xprof profiler, because maybe there are some quick gains.
The most expensive function calls are the transformation of Models from the SQL query row into their respective object. This is not specially surprising. However when looking at the following parts, we notice something suprising.
The Carbon object is initialized every time, and a lot of time is spent in finding on which timezone the server is running…
Conclusion
On this note, it becomes pretty obvious that for Lychee, Livewire and Server Side Rendering are not a good option. We tried to follow the hype and be at the bleeding edge of technology. While those ideas are appealing at first, they became quickly a nightmare to optimize and diagnose.
To know what is coming next, read the our next post here.
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
\ No newline at end of file
+Lychee - Livewire performances problems 📉
A look back on Server-Side rendering performance with Livewire in Lychee v5.
On December 25th, we released Lychee version 5. This was the first major version bump since April 2020. This new version brings the latest and shiniest part of the laravel ecosystem: Livewire.
What is Livewire?
Livewire aims to bridge the gap between the front-end and the backend, with an ambitious message: “you no longer need to know JS to do front-end reactivity”. The premise is appealing:
no more AJAX requests,
no more JS needed to build the DOM (like in Lychee v3 and v4),
no more DOM manipulation,
no more events to track,
only PHP (stronger type garantees),
re-using blade templates & Laravel components,
in place replacement with dom-diffing…
Single Page Application behaviour with url updates.
All this is done with this single library which takes care of keeping a cryptographically authenticated state, provide events annotation hooks on html elements and forward those calls to the Server, executing direclty php methods on the components.
So far soo good. It took me about 1.5 years to re-implement the front-end, added tests. We are ready to ship.
A sad reality: local development vs real life server performance.
When doing local development with Livewire, everything seems fast. The request are instantanuous, the reactivity is palpable. However, as soon as you are deploying on an external server, you are immediately faced with a harsh reality: Latency is a B**tch.
What is happening? Any action with behaviour is trigerring a call to the server. This round-trip instantly kills the fluidness previously seen. Everything is slow, opening menus are taking ages… Switching from one picture to another is terrible.
There is however a solution: AlpineJS. A small library to leaverage local interaction such as hover, opening menus etc to JavaScript and keep the rest with Server Round trip. One could say that Alpine is very close to VueJS in its design, to the point where the naming convension are similar: x-on instead of v-on, x-html instead of v-html, etc…
Using AlpineJS, I rewrote the photo navigation and editing part, I rewrote the layout (justified, masonry etc.) of the pictures in albums. Finally Lychee v5 was getting usable.
A N + 1 query blade for-loop.
We got report from our users that when using a large number of albums and sub-albums, Lychee was getting slower beyond what would be acceptable. We pop back debug mod with the trusted debug bar and have a look at what is going on.
What do we see? Server takes 2,43 seconds to respond and for 45 sub-albums we have 354 SQL statement executed with 348 of them being duplicates. There is no doubt, we have a N+1 problem.
After a few hours of debugging the culprit was found: the id of the thumb of the parent album [Parent] was being queried for every sub-album [child] in order to check whether the current sub album [child] was used to specify the facade of the album [Parent]. With a bit of caching, this went away quickly.
Similarly, the computation of the parent album [parent] access rights were done for every single [child] instance. This lead to another set of duplicated queries.
After a few updates and iterations, we got the following results.
33 Queries, with 17 duplicates. Good enough. At least that number is no longer related to the number of Sub-Albums, it is therefore a flat cost. We will bit the bullet for now…
Still slow: Serialization
Still after this being solved, reports kept coming that Lychee was still slow when opening albums with large number of pictures. In order to track down this issue, we can no longer use DebugBar, it is not precise enough. So we turn ourselves to ClockWork, a powerful request analyzer.
This is a request opening an album with 700 pictures. No sub-albums, just a collection of photos. Without XDebug enabled (it usually produces a 20x slowdown), it takes 3 seconds for the server to produce the data, and render the page. What is going on?
Scrolling down we see the following waterfal. In Red are the SQL queries, in pruple the rendering of the components.
It is obvious that the roadblock is not dues to SQL queries: 2876ms are spent in the app, while 162m are spent waiting for the database. What is happening in that purple part? Simple, data are being serialzied to be sent to the front-end. Do note that we already did optimize our communcation between the server and the front-end:
we only send the minimum amount of data to needed to be displayed.
we only use the id of the models, all the other information are kept serverside. This has two benefits, it prevents exposing uncontrolled data (e.g. password field not in the $hidden attribute of a model will be displayed by the toArray() which is used by default by Laravel to serialize models. ).
Serialization with toArray() breaks in our case due to the recursive nature of the Parent-Child relationship in albums.
As a result, it is pretty clear that at least 75% of those 2876 ms are mostly spent on serialization of data. This is assumption is also quickly verified: by setting LIVEWIRE_ENABLED=false in your .env, you are reverting back to the front-end of Version 4. The results are immediate. The speed kicks in and Lychee feels snappier.
We dig a little more in the serialization problem with Laravel xprof profiler, because maybe there are some quick gains.
The most expensive function calls are the transformation of Models from the SQL query row into their respective object. This is not specially surprising. However when looking at the following parts, we notice something suprising.
The Carbon object is initialized every time, and a lot of time is spent in finding on which timezone the server is running…
Conclusion
On this note, it becomes pretty obvious that for Lychee, Livewire and Server Side Rendering are not a good option. We tried to follow the hype and be at the bleeding edge of technology. While those ideas are appealing at first, they became quickly a nightmare to optimize and diagnose.
To know what is coming next, read the our next post here.
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
\ No newline at end of file
diff --git a/2024-06-29-future-of-lychee/index.html b/2024-06-29-future-of-lychee/index.html
index d96578d3..c30ebf98 100644
--- a/2024-06-29-future-of-lychee/index.html
+++ b/2024-06-29-future-of-lychee/index.html
@@ -1 +1 @@
-Lychee - The future of Lychee: what is coming next. 🚀
After having worked on Lychee and the Livewire migration for the past 3 years, and having it battle tested over the last 6 months (version 5 till version 5.5). It is obvious that this was not a good decision. While Livewire is a nice concept by Caleb, it is not applicable in our case. The rendering times are just too long. Loading an album with 700+ pictures is just too heavy computationally wise.
What does this means for now? 🤔
I am starting to work on Lychee v6. Yes already… I made the decision to rewrite the front-end once again. This time I will be working with Vue3. It is one of the industry standard and should make the interaction with the server faster.
Have all those years spent on doing this “vanilla-JS-to-Livewire” conversion gone to waste? No. While I did this conversion I also migrated the front-end to tailwind css, all this will be reused in with Vue. I am also planning to make use of PrimeVue to simplify some of the logic (e.g. modals, menus). Part of the current front-end are also making use of AlpineJS, so more code that can be reused there.
The compilation step will stay the same: composer & npm with vite. Just the front-end will change.
About backward compatibility. 🚫
When I did the migration v4-v5, I made the Livewire front-end optional, giving the ability to users to disable this behavior. With v6, I do not plan to do the same, this involves too much complexity to keep v4 front-end (vanila), v5 front-end (livewire) and v6 (vue). As a consequence on v6, there will be only one front-end: Vue (and possibly legacy legacy vanilla, but unlikely).
As this is a major version bump, do not expect the API to stay the same. I will try to preserve some backward compatibility in most of the calls, but some other may change (e.g. uploading to support chunks).
That being said, the migration from v5 to v6 should be as easy if not simpler than the one from v4 to v5. Expect your familiar lychee look and feel, just a different javascript front-end.
When will the v6 be available ? ⏩
It is very difficult to say, as I am not really able to estimate the amount of work to be done. My free time is quite limited between work, all the sport practice, the lady and doing photography (the main reason why I maintain this project). So please be patient (sorry).
Support and the team. 🦸
At the moment, only @d7415 and I (@ildyria) are maintaining Lychee, @d7415 doing most of the review work while I am working on fixing the bugs & trying to provide improvements. We aim to maintain this free open-source photography library with high quality of code.
If you feel like helping us, don’t hesitate to join us on discord or gitter.
If you are using Lychee, a small token of gratitude will go a long way. You can support further development (and bug fixes!) of Lychee on opencollective or on GitHub.
After having worked on Lychee and the Livewire migration for the past 3 years, and having it battle tested over the last 6 months (version 5 till version 5.5). It is obvious that this was not a good decision. While Livewire is a nice concept by Caleb, it is not applicable in our case. The rendering times are just too long. Loading an album with 700+ pictures is just too heavy computationally wise.
What does this means for now? 🤔
I am starting to work on Lychee v6. Yes already… I made the decision to rewrite the front-end once again. This time I will be working with Vue3. It is one of the industry standard and should make the interaction with the server faster.
Have all those years spent on doing this “vanilla-JS-to-Livewire” conversion gone to waste? No. While I did this conversion I also migrated the front-end to tailwind css, all this will be reused in with Vue. I am also planning to make use of PrimeVue to simplify some of the logic (e.g. modals, menus). Part of the current front-end are also making use of AlpineJS, so more code that can be reused there.
The compilation step will stay the same: composer & npm with vite. Just the front-end will change.
About backward compatibility. 🚫
When I did the migration v4-v5, I made the Livewire front-end optional, giving the ability to users to disable this behavior. With v6, I do not plan to do the same, this involves too much complexity to keep v4 front-end (vanila), v5 front-end (livewire) and v6 (vue). As a consequence on v6, there will be only one front-end: Vue (and possibly legacy legacy vanilla, but unlikely).
As this is a major version bump, do not expect the API to stay the same. I will try to preserve some backward compatibility in most of the calls, but some other may change (e.g. uploading to support chunks).
That being said, the migration from v5 to v6 should be as easy if not simpler than the one from v4 to v5. Expect your familiar lychee look and feel, just a different javascript front-end.
When will the v6 be available ? ⏩
It is very difficult to say, as I am not really able to estimate the amount of work to be done. My free time is quite limited between work, all the sport practice, the lady and doing photography (the main reason why I maintain this project). So please be patient (sorry).
Support and the team. 🦸
At the moment, only @d7415 and I (@ildyria) are maintaining Lychee, @d7415 doing most of the review work while I am working on fixing the bugs & trying to provide improvements. We aim to maintain this free open-source photography library with high quality of code.
If you feel like helping us, don’t hesitate to join us on discord or gitter.
If you are using Lychee, a small token of gratitude will go a long way. You can support further development (and bug fixes!) of Lychee on opencollective or on GitHub.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-07-02-v6-landing-page/index.html b/2024-07-02-v6-landing-page/index.html
index ae1f56d1..ca72c30d 100644
--- a/2024-07-02-v6-landing-page/index.html
+++ b/2024-07-02-v6-landing-page/index.html
@@ -1 +1 @@
-Lychee - Bite-size v6: Landing page and left menu
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
This is the first post of our series. After setting up everything for VueJs, I finally have the landing page working again. That conversion was pretty straight forward, copy the livewire html into the Vue component and ship it.
We now turn attention to the gallery. Rather that translating the Livewire components and keeping the html and css, we choose a different approach, migrate to a battle tested suite of components: PrimeVue.
Why did we make that decision:
No implementation of the reactivity is needed.
Components templates already mostly set-up
Unified and consistent styling accross all elements, only need to customize little parts.
PrimeVue is compatible with tailwind, which means that some of the specific component styling done in Lychee v5 can be easilly transported to the version 6.
Login modal is done (but no server interaction is applied yet).
And similarly a quick draft of the left menu is executed.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
This is the first post of our series. After setting up everything for VueJs, I finally have the landing page working again. That conversion was pretty straight forward, copy the livewire html into the Vue component and ship it.
We now turn attention to the gallery. Rather that translating the Livewire components and keeping the html and css, we choose a different approach, migrate to a battle tested suite of components: PrimeVue.
Why did we make that decision:
No implementation of the reactivity is needed.
Components templates already mostly set-up
Unified and consistent styling accross all elements, only need to customize little parts.
PrimeVue is compatible with tailwind, which means that some of the specific component styling done in Lychee v5 can be easilly transported to the version 6.
Login modal is done (but no server interaction is applied yet).
And similarly a quick draft of the left menu is executed.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-07-06-v6-about/index.html b/2024-07-06-v6-about/index.html
index 2dd7ed8b..59a90667 100644
--- a/2024-07-06-v6-about/index.html
+++ b/2024-07-06-v6-about/index.html
@@ -1 +1 @@
-Lychee - Bite-size v6: About and gallery
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
After a bit of working, we get the About Lychee modal to work, and we shift our focus to displaying the albums in the gallery page (see below).
Using PrimeVue, we quickly draft header, navbar and panels. We do not pay attention to styling yet, so we are stuck with default white. At this point we are focusing on the squeleton to rather than the details.
Notice that all of them are stacked on top of each other? This is because tailwind css has not been applied yet. At least we can be sure that we are getting proper data from the backend.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
After a bit of working, we get the About Lychee modal to work, and we shift our focus to displaying the albums in the gallery page (see below).
Using PrimeVue, we quickly draft header, navbar and panels. We do not pay attention to styling yet, so we are stuck with default white. At this point we are focusing on the squeleton to rather than the details.
Notice that all of them are stacked on top of each other? This is because tailwind css has not been applied yet. At least we can be sure that we are getting proper data from the backend.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
The hero banner image is back again when available plus some styling of the layout buttons, panels etc. The description still needs to be fixed though…
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
The hero banner image is back again when available plus some styling of the layout buttons, panels etc. The description still needs to be fixed though…
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-07-16-v6-album-1/index.html b/2024-07-16-v6-album-1/index.html
index ac9b7173..4d8f26e2 100644
--- a/2024-07-16-v6-album-1/index.html
+++ b/2024-07-16-v6-album-1/index.html
@@ -1 +1 @@
-Lychee - Bite-size v6: album - 1
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-07-17-v6-album-2/index.html b/2024-07-17-v6-album-2/index.html
index 7c34dfd7..5f688f12 100644
--- a/2024-07-17-v6-album-2/index.html
+++ b/2024-07-17-v6-album-2/index.html
@@ -1 +1 @@
-Lychee - Bite-size v6: album - 2
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
Some progress on the settings page using the accordion from PrimeVue. We also are going to be using tabs on top instead of having to go completely at the bottom of the page to click on More.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
Some progress on the settings page using the accordion from PrimeVue. We also are going to be using tabs on top instead of having to go completely at the bottom of the page to click on More.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
Working on the More tabs. This time instead of having simple field text and the key names, we use directly the descriptions for the setting. Knowing the type of value expected, we also use toggles when boolean etc.
However, a some users prefers the old interface, it is available in a single toggle switch.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
Working on the More tabs. This time instead of having simple field text and the key names, we use directly the descriptions for the setting. Knowing the type of value expected, we also use toggles when boolean etc.
However, a some users prefers the old interface, it is available in a single toggle switch.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
More work on the More tabs. We now display a warning that some changes have not been saved. When clicked on Save, a toast notification confirms that the data has been properly persisted.
We also add a warning for the version field. This one should not be edited as it will mess up with the migrations of the database.
We also added a small indicator of which field have been modified. Clicking on that indicator reset the field to its previous value.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
More work on the More tabs. We now display a warning that some changes have not been saved. When clicked on Save, a toast notification confirms that the data has been properly persisted.
We also add a warning for the version field. This one should not be edited as it will mess up with the migrations of the database.
We also added a small indicator of which field have been modified. Clicking on that indicator reset the field to its previous value.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-08-03-v6-users/index.html b/2024-08-03-v6-users/index.html
index 00c05b8f..71730601 100644
--- a/2024-08-03-v6-users/index.html
+++ b/2024-08-03-v6-users/index.html
@@ -1 +1 @@
-Lychee - Bite-size v6: User management
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
A bit of refactoring on the Profile page. Note that there is a change in behaviour:
for any changes, the old password is required. This is to ensure that the email address or the username are not changed by mistake.
username and email are now pre-filled.
This is a single API call instead of two as in v4 and v5.
After that we focused on adding back a quite important page: the Diagnostics. All sections are there: Errors (also available when not logged in), Info, Space and Configuration. As usual, the button to request space usage, as this one tend to be pretty slow on some installations.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
A bit of refactoring on the Profile page. Note that there is a change in behaviour:
for any changes, the old password is required. This is to ensure that the email address or the username are not changed by mistake.
username and email are now pre-filled.
This is a single API call instead of two as in v4 and v5.
After that we focused on adding back a quite important page: the Diagnostics. All sections are there: Errors (also available when not logged in), Info, Space and Configuration. As usual, the button to request space usage, as this one tend to be pretty slow on some installations.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-08-05-v6-jobs/index.html b/2024-08-05-v6-jobs/index.html
index d189b0f2..8afb22e5 100644
--- a/2024-08-05-v6-jobs/index.html
+++ b/2024-08-05-v6-jobs/index.html
@@ -1 +1 @@
-Lychee - Bite-size v6: Jobs
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
After the diagnostics, we quickly fix the Job pages. We integrated pagination in the backend (but it is not exploited yet in the front-end. Maybe later, who knows.)
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
After the diagnostics, we quickly fix the Job pages. We integrated pagination in the backend (but it is not exploited yet in the front-end. Maybe later, who knows.)
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
Yes, it is here. There is now a toggle switch in the settings which will enable light mode (note that you will need to refresh for the changes to take effect.)
Aside from the the selection of language is also fixed (it was missing from the settings).
And as seen above, I also fixed the deletion via the panel in the Album view. More to come…
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
Yes, it is here. There is now a toggle switch in the settings which will enable light mode (note that you will need to refresh for the changes to take effect.)
Aside from the the selection of language is also fixed (it was missing from the settings).
And as seen above, I also fixed the deletion via the panel in the Album view. More to come…
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-08-10-v6-move-album-panel/index.html b/2024-08-10-v6-move-album-panel/index.html
index 29b15218..abfd4a90 100644
--- a/2024-08-10-v6-move-album-panel/index.html
+++ b/2024-08-10-v6-move-album-panel/index.html
@@ -1 +1 @@
-Lychee - Bite-size v6: Move Album panel
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
The panel to move albums has been implemented. Just like in version 5, drop-down with search to select the destination. Once selected a confirmation message appears.
And on completion of the action a small toast confirms the execution.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
The panel to move albums has been implemented. Just like in version 5, drop-down with search to select the destination. Once selected a confirmation message appears.
And on completion of the action a small toast confirms the execution.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-08-11-v6-transfer-album-panel/index.html b/2024-08-11-v6-transfer-album-panel/index.html
index 85734419..8b5d28da 100644
--- a/2024-08-11-v6-transfer-album-panel/index.html
+++ b/2024-08-11-v6-transfer-album-panel/index.html
@@ -1 +1 @@
-Lychee - Bite-size v6: Transfer Album panel
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-08-14-v6-share-album-panel/index.html b/2024-08-14-v6-share-album-panel/index.html
index 77935d0d..4cd29299 100644
--- a/2024-08-14-v6-share-album-panel/index.html
+++ b/2024-08-14-v6-share-album-panel/index.html
@@ -1 +1 @@
-Lychee - Bite-size v6: Share Album panel
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
Now that most of the ground work has been built, we focus on the smaller details. We add back what all gallery should have: the uploader. And just like in the version 5 it supports chunk upload and parallel processing.
Once completed the list stays open (for now).
A nice improvement that could be added later: cancelling an upload. But there are more pressing matters.
Also added the menu in the top right to access the usual creations options.
What is left to be done before we start having a viable prototype? Still quite a bit see the list below.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
Now that most of the ground work has been built, we focus on the smaller details. We add back what all gallery should have: the uploader. And just like in the version 5 it supports chunk upload and parallel processing.
Once completed the list stays open (for now).
A nice improvement that could be added later: cancelling an upload. But there are more pressing matters.
Also added the menu in the top right to access the usual creations options.
What is left to be done before we start having a viable prototype? Still quite a bit see the list below.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-08-18-v6-upload-dialog/index.html b/2024-08-18-v6-upload-dialog/index.html
index 38e7b4fe..c84a7302 100644
--- a/2024-08-18-v6-upload-dialog/index.html
+++ b/2024-08-18-v6-upload-dialog/index.html
@@ -1 +1 @@
-Lychee - Bite-size v6: Link in Landing and Server Import
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
One of the complaints we got a few times was that the Gallery link in top right was not so visible. We now also provide a big link in the middle of the page with a subtle tripple arrow annimation to catch the eye with movement. Hopefully this resolves some of the requests.
As it was disabled in version 5, import from server is not coming back in version 6. Sorry. Still in order to avoid questions “where did this go?” etc, we provide a kind reminder to the user that the functionality is no more.
I am currently working on the dialogs to create Albums.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
One of the complaints we got a few times was that the Gallery link in top right was not so visible. We now also provide a big link in the middle of the page with a subtle tripple arrow annimation to catch the eye with movement. Hopefully this resolves some of the requests.
As it was disabled in version 5, import from server is not coming back in version 6. Sorry. Still in order to avoid questions “where did this go?” etc, we provide a kind reminder to the user that the functionality is no more.
I am currently working on the dialogs to create Albums.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
After taking some time off for personal reasons and some fixing minor bugs, I finally added the endpoint to edit pictures. As opposed to the version 4, this one will have a single API endpoint to edit all parameters. I still need to add the ability to edit some of the exif data.
On the not-so-great news, I decided to drop the support of dedoc/scramble. It was used in the version 4 to provide easy API documentation. Unfortunately, scramble fails at the following:
proper software design respecting SOLID architecture (refusal to have proper design with interface and uses reflections instead to check if some methods are available).
lack of static analysis such as Phpstan.
Furthermore, with version 6 we are now using Spatie Data. This allows us to generate typescripts definitions from those objects, and thus ensuring stronger type compatibility between front-end and back-end. Unfortunately Spatie Data is only supported in the pro version of Scramble, we respect the decision of romalytvynenko and remove it as we are no longer able to use it anymore.
Thoughts on how to document the API in an automated way are welcome.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
After taking some time off for personal reasons and some fixing minor bugs, I finally added the endpoint to edit pictures. As opposed to the version 4, this one will have a single API endpoint to edit all parameters. I still need to add the ability to edit some of the exif data.
On the not-so-great news, I decided to drop the support of dedoc/scramble. It was used in the version 4 to provide easy API documentation. Unfortunately, scramble fails at the following:
proper software design respecting SOLID architecture (refusal to have proper design with interface and uses reflections instead to check if some methods are available).
lack of static analysis such as Phpstan.
Furthermore, with version 6 we are now using Spatie Data. This allows us to generate typescripts definitions from those objects, and thus ensuring stronger type compatibility between front-end and back-end. Unfortunately Spatie Data is only supported in the pro version of Scramble, we respect the decision of romalytvynenko and remove it as we are no longer able to use it anymore.
Thoughts on how to document the API in an automated way are welcome.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-08-31-v6-help/index.html b/2024-08-31-v6-help/index.html
index 95988202..f3a055cd 100644
--- a/2024-08-31-v6-help/index.html
+++ b/2024-08-31-v6-help/index.html
@@ -1 +1 @@
-Lychee - Bite-size v6: Keybindings help
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
When you login, you will now be presented with this pop up giving you the keybindings tips. We added a small checkbox at the bottom so this pop up can be made hidden forever easilly.
Additionally, we added a help button in the top right of the gallery page. Clicking on this will open the help keybind.
When not logged in, just like in version 5, it is now possible to have a customizable back to… button. This button will switch place with the login button if the setting of the position of login is set to the right instead of the default left.
The overlay on the picture is also back, rotating between none, description, date, and exif data. The setting is persisted accross the page.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
When you login, you will now be presented with this pop up giving you the keybindings tips. We added a small checkbox at the bottom so this pop up can be made hidden forever easilly.
Additionally, we added a help button in the top right of the gallery page. Clicking on this will open the help keybind.
When not logged in, just like in version 5, it is now possible to have a customizable back to… button. This button will switch place with the login button if the setting of the position of login is set to the right instead of the default left.
The overlay on the picture is also back, rotating between none, description, date, and exif data. The setting is persisted accross the page.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-09-14-v6-settings/index.html b/2024-09-14-v6-settings/index.html
index 8b53b27c..e4dccba5 100644
--- a/2024-09-14-v6-settings/index.html
+++ b/2024-09-14-v6-settings/index.html
@@ -1 +1 @@
-Lychee - Bite-size v6: Settings and coverage
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
After a week of vacation and seeing the family, I am back on Lychee. As we soft launched the alpha on docker, we are getting some feedback such as that the all settings tab is too complex and too heavy for normal user. The basic settings are here to stay, it is just that I haven’t had the time fix the panel. On the other hand, by switching the values to the right and label to the left, we declutered the interface significantly.
One of the value of LycheeOrg is High quality software see our team page. For this reason we are now able to release two versions of Lychee v6. One with the legacy fallback and one without, the conversion is easilly done with a simple bash script. Nonetheless, by removing those legacy hooks, we identified pain points for the future and fixed them.
Continuing on this track, I increased the code coverage to 80% by adding tests. The Codecov integration will now guarantee that no future pull requests fall under that threshold.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
After a week of vacation and seeing the family, I am back on Lychee. As we soft launched the alpha on docker, we are getting some feedback such as that the all settings tab is too complex and too heavy for normal user. The basic settings are here to stay, it is just that I haven’t had the time fix the panel. On the other hand, by switching the values to the right and label to the left, we declutered the interface significantly.
One of the value of LycheeOrg is High quality software see our team page. For this reason we are now able to release two versions of Lychee v6. One with the legacy fallback and one without, the conversion is easilly done with a simple bash script. Nonetheless, by removing those legacy hooks, we identified pain points for the future and fixed them.
Continuing on this track, I increased the code coverage to 80% by adding tests. The Codecov integration will now guarantee that no future pull requests fall under that threshold.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
More things start to take shape. The selection with Ctrl and Shift are now working. The Drag-and-select is not implemented yet, but that one will probably be for after the official release. So far the interface is still not mobile friendly for selection, some improvements need to be made here. I also need to check how the interaction with ctrl + click is working on Mac to see if that is still spawning a browser context menu.
That being said, the first few operations are now working. The photo listing is not updated yet, nor dropping the local cache of the current album. Ah, I forgot to mention that.
As opposed to version 4 and version 5, Lychee v6 will support local caching of the requests, which means that once an album has been open, it will not be queried again. This will significantly speed up the responses when going through multiple pages etc. On the less fun side for me, it also means that I will be fighting against the cache invalidation problem. Wish me luck. ;)
That being said, now that photo selection is working, we also have the context menus being displayed. At the moment most of the actions are empty placeholders, but actual execution code should be coming soon.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
More things start to take shape. The selection with Ctrl and Shift are now working. The Drag-and-select is not implemented yet, but that one will probably be for after the official release. So far the interface is still not mobile friendly for selection, some improvements need to be made here. I also need to check how the interaction with ctrl + click is working on Mac to see if that is still spawning a browser context menu.
That being said, the first few operations are now working. The photo listing is not updated yet, nor dropping the local cache of the current album. Ah, I forgot to mention that.
As opposed to version 4 and version 5, Lychee v6 will support local caching of the requests, which means that once an album has been open, it will not be queried again. This will significantly speed up the responses when going through multiple pages etc. On the less fun side for me, it also means that I will be fighting against the cache invalidation problem. Wish me luck. ;)
That being said, now that photo selection is working, we also have the context menus being displayed. At the moment most of the actions are empty placeholders, but actual execution code should be coming soon.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-09-23-v6-multiple/index.html b/2024-09-23-v6-multiple/index.html
index 821456ee..09f4380d 100644
--- a/2024-09-23-v6-multiple/index.html
+++ b/2024-09-23-v6-multiple/index.html
@@ -1 +1 @@
-Lychee - Bite-size v6: Context menus, WebAuthn and more
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
While I am quite busy, I still try to push the development and I hope to be able to release a beta of version 6 by the end of the week.
Thumb album decorations
As you can see on the screenshot above, the album decorations are making their come back from the version 4 (I hadn’t had time to implement them in v5). You now have the choice between:
layer (default),
photos (number of photos),
albums (number of sub albums),
all (number of photos and albums),
and none which hides the indicator.
When using all the direction and order of appearance are also configurable.
Context menu improvements
More work has been done on the context menu, currently the following are working as expected:
Right click actions on single and multiple pictures
(Un)Star photo(s)
Set as cover
Set as header
Rename photo
Move photo(s)
Tag photo(s)
Copy photo(s)
Delete photo(s)
Download
Right click actions on single and multiple album
Set as cover
Rename album
Move album(s)
Merge album(s) untested
Delete album(s)
Download
Keybindings and actions
In term of keybindings, also some progress here.
toggle full screen
edit photo / album
info panel toggle
photo overlay rotation
next/previous photo
star
delete
The buttons on single picture are also working as expected.
star
move
delete
WebAuthn support
Furthermore, this weekend I have been actively working on the WebAuthn authentication method. All behaviours are now functionals.
Listing is also available with the ability to edit the aliases. For less opacity, we also provide the registration datetime of key material.
And if you try to register a key that is already in the database, we also prevent this.
What is left?
On the todo list before we can go to a Beta release:
The unticked boxes above.
Map page.
Sharing page.
Frame page.
Search page.
Oauth support.
And maybe some exclusive functionalities of v6?
Can I test this already ?
Sure! There are multiple ways:
there is now an alpha prerelease archive but it is more of a snapshot of current development.
You can try to follow the alpha branch on Lychee (though once the v6 will be published, don’t forget to switch pack to master)
You can also use the alpha tag on docker releases. It is building the latest version of alpha branch every night.
Important: we do not support bug report yet as those are advanced development build and not production ready. To put it bluntly: If things break, you are on your own. Don’t come crying.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
While I am quite busy, I still try to push the development and I hope to be able to release a beta of version 6 by the end of the week.
Thumb album decorations
As you can see on the screenshot above, the album decorations are making their come back from the version 4 (I hadn’t had time to implement them in v5). You now have the choice between:
layer (default),
photos (number of photos),
albums (number of sub albums),
all (number of photos and albums),
and none which hides the indicator.
When using all the direction and order of appearance are also configurable.
Context menu improvements
More work has been done on the context menu, currently the following are working as expected:
Right click actions on single and multiple pictures
(Un)Star photo(s)
Set as cover
Set as header
Rename photo
Move photo(s)
Tag photo(s)
Copy photo(s)
Delete photo(s)
Download
Right click actions on single and multiple album
Set as cover
Rename album
Move album(s)
Merge album(s) untested
Delete album(s)
Download
Keybindings and actions
In term of keybindings, also some progress here.
toggle full screen
edit photo / album
info panel toggle
photo overlay rotation
next/previous photo
star
delete
The buttons on single picture are also working as expected.
star
move
delete
WebAuthn support
Furthermore, this weekend I have been actively working on the WebAuthn authentication method. All behaviours are now functionals.
Listing is also available with the ability to edit the aliases. For less opacity, we also provide the registration datetime of key material.
And if you try to register a key that is already in the database, we also prevent this.
What is left?
On the todo list before we can go to a Beta release:
The unticked boxes above.
Map page.
Sharing page.
Frame page.
Search page.
Oauth support.
And maybe some exclusive functionalities of v6?
Can I test this already ?
Sure! There are multiple ways:
there is now an alpha prerelease archive but it is more of a snapshot of current development.
You can try to follow the alpha branch on Lychee (though once the v6 will be published, don’t forget to switch pack to master)
You can also use the alpha tag on docker releases. It is building the latest version of alpha branch every night.
Important: we do not support bug report yet as those are advanced development build and not production ready. To put it bluntly: If things break, you are on your own. Don’t come crying.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-09-24-v6-frame/index.html b/2024-09-24-v6-frame/index.html
index 3b5b5248..cf894bf6 100644
--- a/2024-09-24-v6-frame/index.html
+++ b/2024-09-24-v6-frame/index.html
@@ -1 +1 @@
-Lychee - Bite-size v6: Frame Mode and Sharing
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
More progress today! The Frame mode is now available like on the version 5. However I still have the links in the header to add conditionally.
And as seen above the global sharing page available via the left menu is also completed. For now, we do not support mass sharing (like on the version 4), but this can easilly be added later.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
More progress today! The Frame mode is now available like on the version 5. However I still have the links in the header to add conditionally.
And as seen above the global sharing page available via the left menu is also completed. For now, we do not support mass sharing (like on the version 4), but this can easilly be added later.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
Added first in version 5, it is also now available in version 6. I have not fully tested the code but I am quite confident it works as expected (as it is literally the same as on version 5).
Furthermore, as the keycloak is making use of the fa-key icon, we switched the WebAuthn icon to fa-fingerprint to avoid confusion. Furthermore, with biometrics rolling out such as face-id and fingerprint readers in WebAuthn authentication devices, it also makes more sense to use this icon (first one from left to right on the row of icons in the screenshot below).
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
Added first in version 5, it is also now available in version 6. I have not fully tested the code but I am quite confident it works as expected (as it is literally the same as on version 5).
Furthermore, as the keycloak is making use of the fa-key icon, we switched the WebAuthn icon to fa-fingerprint to avoid confusion. Furthermore, with biometrics rolling out such as face-id and fingerprint readers in WebAuthn authentication devices, it also makes more sense to use this icon (first one from left to right on the row of icons in the screenshot below).
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
\ No newline at end of file
diff --git a/2024-09-24-v6-scramble/index.html b/2024-09-24-v6-scramble/index.html
index 92f6d0f0..0b490e0c 100644
--- a/2024-09-24-v6-scramble/index.html
+++ b/2024-09-24-v6-scramble/index.html
@@ -1,4 +1,4 @@
-Lychee - About Lychee API documentation
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
x1ntt asked the following question and I thought it deserved a visible answer.
Even without API documentation, is the v6 version compatible with this API? I think APIs are very important because I have a need for automated development. Maintaining a good API will lead to the emergence of excellent third-party clients and tools.
In short: Yes and No.
Yes because v6 will provide a legacy api option which can be enabled by setting LEGACY_API_ENABLED in your .env. Furthermore, the URL of the legacy API do not change, they stay the same. So no need to change your code, you will just need to set the .env variable.
No, because v6 will provide a completely upgrade of the API which makes use of a bit more than just POST requests. It will also support GET, PATCH, DELETE (to get closer to proper REST spec).
About v4 and v5 documentation
Documentation on v4 and v5 was making use of dedoc/scramble. This extension of Laravel was doing a static analysis of the routes, checking the controllers, the requests objects and the resources files. Using those data it generated a nice interface with readable documentation.
It has been brought to our attention that Scramble is not even working anymore on version 5.5.1 and most likely suffers from an infinite recursion during the serialization of one of the response (out of memory error).
In the spirit of open source, I could try to fix it. However, scramble fails at the following:
proper software design respecting SOLID architecture (refusal to have proper design with interface, uses reflections instead to check if some methods are available, and violation of the Liskov substitution principle).
lack of static analysis such as Phpstan.
As I do not feel comfortable to contribute to such code base, it is an easier decision to drop the scramble component completely.
Furthermore, with version 6 we are now using Spatie Data. This allows us to generate typescripts definitions from those objects, and thus ensuring stronger type compatibility between front-end and back-end.
Scramble only support Spatie Data in the pro version, we respect the decision of romalytvynenko, and remove it as we are no longer able to use it anymore.
About v6
It is likely that I will release version 6 without API documentation at first. My time is limited and I prefer to focus on adding back the functionalities rather than writing documentations, especially given that the v1 api will remain available.
And to clarify, this does not mean that there won’t be documentation of the API at some point. As x1ntt says “Maintaining a good API will lead to the emergence of excellent third-party clients and tools.” For this reason I am also exploring other documentation options such as scribe.
At the time of writing the list of the api v2 routes is as follows (and subject to change):
GET api/v2/Album ............................................. Gallery\AlbumController@get
+Lychee - About Lychee API documentation
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
x1ntt asked the following question and I thought it deserved a visible answer.
Even without API documentation, is the v6 version compatible with this API? I think APIs are very important because I have a need for automated development. Maintaining a good API will lead to the emergence of excellent third-party clients and tools.
In short: Yes and No.
Yes because v6 will provide a legacy api option which can be enabled by setting LEGACY_API_ENABLED in your .env. Furthermore, the URL of the legacy API do not change, they stay the same. So no need to change your code, you will just need to set the .env variable.
No, because v6 will provide a completely upgrade of the API which makes use of a bit more than just POST requests. It will also support GET, PATCH, DELETE (to get closer to proper REST spec).
About v4 and v5 documentation
Documentation on v4 and v5 was making use of dedoc/scramble. This extension of Laravel was doing a static analysis of the routes, checking the controllers, the requests objects and the resources files. Using those data it generated a nice interface with readable documentation.
It has been brought to our attention that Scramble is not even working anymore on version 5.5.1 and most likely suffers from an infinite recursion during the serialization of one of the response (out of memory error).
In the spirit of open source, I could try to fix it. However, scramble fails at the following:
proper software design respecting SOLID architecture (refusal to have proper design with interface, uses reflections instead to check if some methods are available, and violation of the Liskov substitution principle).
lack of static analysis such as Phpstan.
As I do not feel comfortable to contribute to such code base, it is an easier decision to drop the scramble component completely.
Furthermore, with version 6 we are now using Spatie Data. This allows us to generate typescripts definitions from those objects, and thus ensuring stronger type compatibility between front-end and back-end.
Scramble only support Spatie Data in the pro version, we respect the decision of romalytvynenko, and remove it as we are no longer able to use it anymore.
About v6
It is likely that I will release version 6 without API documentation at first. My time is limited and I prefer to focus on adding back the functionalities rather than writing documentations, especially given that the v1 api will remain available.
And to clarify, this does not mean that there won’t be documentation of the API at some point. As x1ntt says “Maintaining a good API will lead to the emergence of excellent third-party clients and tools.” For this reason I am also exploring other documentation options such as scribe.
At the time of writing the list of the api v2 routes is as follows (and subject to change):
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
Addition of this morning. The map is back!
I still need to integrate the link to the header menu in the gallery page and album page. I will probably do that at the same time as with the frame mod.
Bite-size v6 is a series of small post showing the progress made on the development of the future version of Lychee.
Addition of this morning. The map is back!
I still need to integrate the link to the header menu in the gallery page and album page. I will probably do that at the same time as with the frame mod.
\ No newline at end of file
diff --git a/blog/3/index.html b/blog/3/index.html
index 46341eeb..1202021d 100644
--- a/blog/3/index.html
+++ b/blog/3/index.html
@@ -1 +1 @@
-Lychee - Blog — Page 3
\ No newline at end of file
diff --git a/blog/4/index.html b/blog/4/index.html
index 7bdb704c..0ed53954 100644
--- a/blog/4/index.html
+++ b/blog/4/index.html
@@ -1 +1 @@
-Lychee - Blog — Page 4
\ No newline at end of file
diff --git a/blog/index.html b/blog/index.html
index 9f78c239..15e7138e 100644
--- a/blog/index.html
+++ b/blog/index.html
@@ -1 +1 @@
-Lychee - Blog
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
\ No newline at end of file
+Lychee - Category 'Api Documentation'
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
\ No newline at end of file
diff --git a/category/future/index.html b/category/future/index.html
index f8e72a10..23556ca0 100644
--- a/category/future/index.html
+++ b/category/future/index.html
@@ -1 +1 @@
-Lychee - Category 'Future'
\ No newline at end of file
diff --git a/get-supporter-edition/index.html b/get-supporter-edition/index.html
new file mode 100644
index 00000000..fba850d4
--- /dev/null
+++ b/get-supporter-edition/index.html
@@ -0,0 +1 @@
+Lychee - Pre-Launch Landing Page
With the new Lychee SE coming soon, we understand that you must have some questions. We try to answer some of them here.
What is the difference between the Free and Supporter Edition?
The Free Edition is a great choice for personal use, offering unlimited albums, users, and photo uploads. LycheeSE includes all the features of the Free Edition, plus some exclusive features as a thank-you for supporting the development of Lychee.
I am running an old version of Lychee and I want to upgrade to version 6. Will I be losing features if I do not use the Supporter Edition?
No. The version 6 of Lychee is pretty much the same as version 5 but with a different front-end. It is faster, more fluid, more reactive, and less buggy. The Free version 6 has not been crippled to incentivise you to upgrade to LycheeSE. We are not in that kind of mindset. We want you to use Lychee, and we want you to be happy with it.
Is there a trial period for the Supporter Edition?
Unfortunately, we do not offer trial periods nor refunds. For this reason we recommend that you try the Free Edition first to see if Lychee fits your needs as it already comes packed with a lot of features.
How do I register my Supporter Edition?
Once you support us, you will get a personal license key that you can use in your Lychee instance to unlock the exclusive features.
Is there a limit on the number of Lychee instances I can use my license key on?
No. You can use your personal license key on as many instances of Lychee as you have.
I want to contribute to Lychee, where does my code fall between the Free and the Supporter Edition?
That is a good question, and it really boils down to what you are adding/modifying. Our general rule of thumb is that:
if you are adding a new feature to Lychee that is not already part of the core, we will include it in the Free Edition.
If you are improving a feature that is part of the Free Edition, that improvement will be included in the Free Edition.
If you are improving a feature that is part of LycheeSE, that feature will have to stay in LycheeSE.
It is as simple as that and any other way would not be fair to our users.
Is there a different code license between the Free and the Supporter Edition?
No. The license is the same for both editions: the MIT license. Lychee remains fully Open Source. And as crazy at it sounds, the code of the Supporter Edition is fully available on GitHub.
\ No newline at end of file
diff --git a/index.html b/index.html
index 4756f591..45db053a 100644
--- a/index.html
+++ b/index.html
@@ -1 +1 @@
-LycheeOrg — Self-hosted photo-management done right.
Lychee is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely.
Managing your photos has never been easier. Upload, move, rename, describe, delete or search your photos in seconds. All in one place, right from your browser.
Share
Sharing like it should be. One click and every photo and album is ready for the public. You can also protect albums with passwords if you want. It's under your control.
View
Look at all your images in full-screen mode, navigate forward and backward by using your keyboard or let others enjoy your photos by making them public.
Upload your photos or create new albums.
See all the information from your photo
Batch selection with Desktop-like multi-select
Share your albums or photos with your favourite service.
LycheeOrg.github.io
Open
Lychee is completely open-source. Everyone can take advantage of the work we have already done and improve it. We are open for every suggestion or help.
Secure
Your server, your data, your rules. Never depend on someone else. Lychee is a self-hosted solution, so you are in the full control of your photos.
Beautiful
Our goal was to create a web app everyone can use. Lychee works intuitive and comes with a stunning, beautiful interface.
Made for Photographers, by Photographers.
Lychee is the perfect place to store all your photos. No storage limit, no compression, no loss in data. We even support and display your EXIF and IPTC Metadata. And if you want, you can make your photos public for your audience. With just one click.
EXIF
Get the most out of our photos. Lychee supports EXIF and IPTC Metadata. Always available one click away. Clearly listed next to all other information.
Import
Import your photos from various sources. From you local computer, server, via URL or even from your Dropbox.
Tag
Never lose one of your photos in the depth of your albums. Tag them or mark them as important. Every single photo or all selected photos at once.
24K
Downloads
3.2K
Stars
291
Forks
3.3M
Docker pulls
Lychee on Docker
Deploy in a matter of seconds with our docker-compose file.
Lychee is a free photo-management tool, which runs on your server or web-space. Installing is a matter of seconds. Upload, manage and share photos like from a native application. Lychee comes with everything you need and all your photos are stored securely.
Managing your photos has never been easier. Upload, move, rename, describe, delete or search your photos in seconds. All in one place, right from your browser.
Share
Sharing like it should be. One click and every photo and album is ready for the public. You can also protect albums with passwords if you want. It's under your control.
View
Look at all your images in full-screen mode, navigate forward and backward by using your keyboard or let others enjoy your photos by making them public.
Upload your photos or create new albums.
See all the information from your photo
Batch selection with Desktop-like multi-select
Share your albums or photos with your favourite service.
LycheeOrg.github.io
Open
Lychee is completely open-source. Everyone can take advantage of the work we have already done and improve it. We are open for every suggestion or help.
Secure
Your server, your data, your rules. Never depend on someone else. Lychee is a self-hosted solution, so you are in the full control of your photos.
Beautiful
Our goal was to create a web app everyone can use. Lychee works intuitive and comes with a stunning, beautiful interface.
Made for Photographers, by Photographers.
Lychee is the perfect place to store all your photos. No storage limit, no compression, no loss in data. We even support and display your EXIF and IPTC Metadata. And if you want, you can make your photos public for your audience. With just one click.
EXIF
Get the most out of our photos. Lychee supports EXIF and IPTC Metadata. Always available one click away. Clearly listed next to all other information.
Import
Import your photos from various sources. From you local computer, server, via URL or even from your Dropbox.
Tag
Never lose one of your photos in the depth of your albums. Tag them or mark them as important. Every single photo or all selected photos at once.
25K
Downloads
3.3K
Stars
297
Forks
3.4M
Docker pulls
Lychee on Docker
Deploy in a matter of seconds with our docker-compose file.
\ No newline at end of file
diff --git a/license/index.html b/license/index.html
index 51788c99..771ea4db 100644
--- a/license/index.html
+++ b/license/index.html
@@ -1 +1 @@
-Lychee - License
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
\ No newline at end of file
diff --git a/sitemap-0.xml b/sitemap-0.xml
index a27e9fee..5a70e28e 100644
--- a/sitemap-0.xml
+++ b/sitemap-0.xml
@@ -1 +1 @@
-https://lycheeorg.github.iohttps://lycheeorg.github.io/2024-06-25-performance-problemshttps://lycheeorg.github.io/2024-06-29-future-of-lycheehttps://lycheeorg.github.io/2024-07-02-v6-landing-pagehttps://lycheeorg.github.io/2024-07-06-v6-abouthttps://lycheeorg.github.io/2024-07-07-v6-gallery-1https://lycheeorg.github.io/2024-07-09-v6-gallery-2https://lycheeorg.github.io/2024-07-12-v6-gallery-3https://lycheeorg.github.io/2024-07-13-v6-gallery-4https://lycheeorg.github.io/2024-07-16-v6-album-1https://lycheeorg.github.io/2024-07-17-v6-album-2https://lycheeorg.github.io/2024-07-18-v6-tests-1https://lycheeorg.github.io/2024-07-21-v6-tests-2https://lycheeorg.github.io/2024-07-23-v6-tests-3https://lycheeorg.github.io/2024-07-24-v6-profile-1https://lycheeorg.github.io/2024-07-26-v6-profile-2https://lycheeorg.github.io/2024-07-28-v6-settings-1https://lycheeorg.github.io/2024-07-29-v6-settings-2https://lycheeorg.github.io/2024-07-30-v6-settings-3https://lycheeorg.github.io/2024-08-02-v6-settings-4https://lycheeorg.github.io/2024-08-03-v6-usershttps://lycheeorg.github.io/2024-08-04-v6-diagnosticshttps://lycheeorg.github.io/2024-08-05-v6-jobshttps://lycheeorg.github.io/2024-08-08-v6-maintenancehttps://lycheeorg.github.io/2024-08-09-v6-light-modehttps://lycheeorg.github.io/2024-08-10-v6-move-album-panelhttps://lycheeorg.github.io/2024-08-11-v6-transfer-album-panelhttps://lycheeorg.github.io/2024-08-14-v6-share-album-panelhttps://lycheeorg.github.io/2024-08-17-v6-upload-dialoghttps://lycheeorg.github.io/2024-08-18-v6-upload-dialoghttps://lycheeorg.github.io/2024-08-27-v6-edit-photohttps://lycheeorg.github.io/2024-08-31-v6-helphttps://lycheeorg.github.io/2024-09-14-v6-settingshttps://lycheeorg.github.io/2024-09-15-v6-menushttps://lycheeorg.github.io/2024-09-23-v6-multiplehttps://lycheeorg.github.io/2024-09-24-v6-framehttps://lycheeorg.github.io/2024-09-24-v6-oauthhttps://lycheeorg.github.io/2024-09-24-v6-scramblehttps://lycheeorg.github.io/2024-09-25-v6-maphttps://lycheeorg.github.io/bloghttps://lycheeorg.github.io/blog/2https://lycheeorg.github.io/blog/3https://lycheeorg.github.io/blog/4https://lycheeorg.github.io/category/active-developmenthttps://lycheeorg.github.io/category/active-development/2https://lycheeorg.github.io/category/active-development/3https://lycheeorg.github.io/category/active-development/4https://lycheeorg.github.io/category/api-documentationhttps://lycheeorg.github.io/category/futurehttps://lycheeorg.github.io/category/livewirehttps://lycheeorg.github.io/get-support-editionhttps://lycheeorg.github.io/licensehttps://lycheeorg.github.io/supporthttps://lycheeorg.github.io/tag/apihttps://lycheeorg.github.io/tag/clockworkhttps://lycheeorg.github.io/tag/documentationhttps://lycheeorg.github.io/tag/front-endhttps://lycheeorg.github.io/tag/hprofhttps://lycheeorg.github.io/tag/livewirehttps://lycheeorg.github.io/tag/lycheehttps://lycheeorg.github.io/tag/lychee/2https://lycheeorg.github.io/tag/lychee/3https://lycheeorg.github.io/tag/lychee/4https://lycheeorg.github.io/tag/scramblehttps://lycheeorg.github.io/tag/v5https://lycheeorg.github.io/tag/v6https://lycheeorg.github.io/tag/v6/2https://lycheeorg.github.io/tag/v6/3https://lycheeorg.github.io/tag/v6/4https://lycheeorg.github.io/tag/vuejshttps://lycheeorg.github.io/tag/vuejs/2https://lycheeorg.github.io/tag/vuejs/3https://lycheeorg.github.io/tag/vuejs/4
\ No newline at end of file
+https://lycheeorg.github.iohttps://lycheeorg.github.io/2024-06-25-performance-problemshttps://lycheeorg.github.io/2024-06-29-future-of-lycheehttps://lycheeorg.github.io/2024-07-02-v6-landing-pagehttps://lycheeorg.github.io/2024-07-06-v6-abouthttps://lycheeorg.github.io/2024-07-07-v6-gallery-1https://lycheeorg.github.io/2024-07-09-v6-gallery-2https://lycheeorg.github.io/2024-07-12-v6-gallery-3https://lycheeorg.github.io/2024-07-13-v6-gallery-4https://lycheeorg.github.io/2024-07-16-v6-album-1https://lycheeorg.github.io/2024-07-17-v6-album-2https://lycheeorg.github.io/2024-07-18-v6-tests-1https://lycheeorg.github.io/2024-07-21-v6-tests-2https://lycheeorg.github.io/2024-07-23-v6-tests-3https://lycheeorg.github.io/2024-07-24-v6-profile-1https://lycheeorg.github.io/2024-07-26-v6-profile-2https://lycheeorg.github.io/2024-07-28-v6-settings-1https://lycheeorg.github.io/2024-07-29-v6-settings-2https://lycheeorg.github.io/2024-07-30-v6-settings-3https://lycheeorg.github.io/2024-08-02-v6-settings-4https://lycheeorg.github.io/2024-08-03-v6-usershttps://lycheeorg.github.io/2024-08-04-v6-diagnosticshttps://lycheeorg.github.io/2024-08-05-v6-jobshttps://lycheeorg.github.io/2024-08-08-v6-maintenancehttps://lycheeorg.github.io/2024-08-09-v6-light-modehttps://lycheeorg.github.io/2024-08-10-v6-move-album-panelhttps://lycheeorg.github.io/2024-08-11-v6-transfer-album-panelhttps://lycheeorg.github.io/2024-08-14-v6-share-album-panelhttps://lycheeorg.github.io/2024-08-17-v6-upload-dialoghttps://lycheeorg.github.io/2024-08-18-v6-upload-dialoghttps://lycheeorg.github.io/2024-08-27-v6-edit-photohttps://lycheeorg.github.io/2024-08-31-v6-helphttps://lycheeorg.github.io/2024-09-14-v6-settingshttps://lycheeorg.github.io/2024-09-15-v6-menushttps://lycheeorg.github.io/2024-09-23-v6-multiplehttps://lycheeorg.github.io/2024-09-24-v6-framehttps://lycheeorg.github.io/2024-09-24-v6-oauthhttps://lycheeorg.github.io/2024-09-24-v6-scramblehttps://lycheeorg.github.io/2024-09-25-v6-maphttps://lycheeorg.github.io/bloghttps://lycheeorg.github.io/blog/2https://lycheeorg.github.io/blog/3https://lycheeorg.github.io/blog/4https://lycheeorg.github.io/category/active-developmenthttps://lycheeorg.github.io/category/active-development/2https://lycheeorg.github.io/category/active-development/3https://lycheeorg.github.io/category/active-development/4https://lycheeorg.github.io/category/api-documentationhttps://lycheeorg.github.io/category/futurehttps://lycheeorg.github.io/category/livewirehttps://lycheeorg.github.io/get-supporter-editionhttps://lycheeorg.github.io/licensehttps://lycheeorg.github.io/supporthttps://lycheeorg.github.io/tag/apihttps://lycheeorg.github.io/tag/clockworkhttps://lycheeorg.github.io/tag/documentationhttps://lycheeorg.github.io/tag/front-endhttps://lycheeorg.github.io/tag/hprofhttps://lycheeorg.github.io/tag/livewirehttps://lycheeorg.github.io/tag/lycheehttps://lycheeorg.github.io/tag/lychee/2https://lycheeorg.github.io/tag/lychee/3https://lycheeorg.github.io/tag/lychee/4https://lycheeorg.github.io/tag/scramblehttps://lycheeorg.github.io/tag/v5https://lycheeorg.github.io/tag/v6https://lycheeorg.github.io/tag/v6/2https://lycheeorg.github.io/tag/v6/3https://lycheeorg.github.io/tag/v6/4https://lycheeorg.github.io/tag/vuejshttps://lycheeorg.github.io/tag/vuejs/2https://lycheeorg.github.io/tag/vuejs/3https://lycheeorg.github.io/tag/vuejs/4
\ No newline at end of file
diff --git a/support/index.html b/support/index.html
index e9115917..40d9e71f 100644
--- a/support/index.html
+++ b/support/index.html
@@ -1 +1 @@
-Lychee - Supporting Lychee
We aim to maintain a free open-source photography library with high quality of code. Being in control of our own data, our own pictures is something that we value above all.
Statistics.
2018
Started
2
Devs
40K
Lines of Code
Meet the team
ildyria (Benoît Viguier)
Main dev.
d7415 (Martin Stone)
Main reviewer.
Our values
LycheeOrg is not just producing a photo gallery, it is also about adopting a culture of excelence.
High quality software
We pride ourselves into applying best practices in software development. This includes testing, static analysis, proper design pattern & architecture.
Open
To encourage active collaboration, Lychee strongly encourages pull requests, not just bug reports. We are also open to suggestions and new ideas for future improvements.
Ethical Practices
Lychee is all about statying in control of your data. The gallery comes out of the box without any analytics or other tracking mechanism. Your privacy is one of our priority.
Support us!
If you are using Lychee, a small token of gratitude will go a long way. You can support further development of Lychee on opencollective or on GitHub.
We aim to maintain a free open-source photography library with high quality of code. Being in control of our own data, our own pictures is something that we value above all.
Statistics.
2018
Started
2
Devs
40K
Lines of Code
Meet the team
ildyria (Benoît Viguier)
Main dev.
d7415 (Martin Stone)
Main reviewer.
Our values
LycheeOrg is not just producing a photo gallery, it is also about adopting a culture of excelence.
High quality software
We pride ourselves into applying best practices in software development. This includes testing, static analysis, proper design pattern & architecture.
Open
To encourage active collaboration, Lychee strongly encourages pull requests, not just bug reports. We are also open to suggestions and new ideas for future improvements.
Ethical Practices
Lychee is all about statying in control of your data. The gallery comes out of the box without any analytics or other tracking mechanism. Your privacy is one of our priority.
Support us!
If you are using Lychee, a small token of gratitude will go a long way. You can support further development of Lychee on opencollective or on GitHub.
We would like to thank all the contributors that helped us in the past.
kamil4 (Kamil Iskra)
Top contributor
nagmat84 (Matthias Nagel)
Rock star
electerious (Tobias Reich)
Creator
qwerty287
Top contributor
tmp-hallenser
LudovicRousseau
roblandry
alex-phillips
hermzz (Hermann Käser)
clementlamoureux
bennetscience (Brian)
\ No newline at end of file
diff --git a/tag/api/index.html b/tag/api/index.html
index 3c0d6e1d..a7454742 100644
--- a/tag/api/index.html
+++ b/tag/api/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'api'
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
\ No newline at end of file
+Lychee - Posts by tag 'api'
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
\ No newline at end of file
diff --git a/tag/clockwork/index.html b/tag/clockwork/index.html
index 7ee87d94..204559cd 100644
--- a/tag/clockwork/index.html
+++ b/tag/clockwork/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'clockwork'
A look back on Server-Side rendering performance with Livewire in Lychee v5.
\ No newline at end of file
diff --git a/tag/documentation/index.html b/tag/documentation/index.html
index 0665b5bd..562fe510 100644
--- a/tag/documentation/index.html
+++ b/tag/documentation/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'documentation'
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
\ No newline at end of file
+Lychee - Posts by tag 'documentation'
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
\ No newline at end of file
diff --git a/tag/front-end/index.html b/tag/front-end/index.html
index ce3f251f..62b1dc7b 100644
--- a/tag/front-end/index.html
+++ b/tag/front-end/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'front-end'
What is coming for Lychee? Where are we? What are we looking forward to?
\ No newline at end of file
diff --git a/tag/hprof/index.html b/tag/hprof/index.html
index 7cde99bf..daf63992 100644
--- a/tag/hprof/index.html
+++ b/tag/hprof/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'hprof'
A look back on Server-Side rendering performance with Livewire in Lychee v5.
\ No newline at end of file
diff --git a/tag/livewire/index.html b/tag/livewire/index.html
index bc3ec618..e688a51f 100644
--- a/tag/livewire/index.html
+++ b/tag/livewire/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'livewire'
A look back on Server-Side rendering performance with Livewire in Lychee v5.
\ No newline at end of file
diff --git a/tag/lychee/2/index.html b/tag/lychee/2/index.html
index 652aeeb7..5d28b509 100644
--- a/tag/lychee/2/index.html
+++ b/tag/lychee/2/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'lychee' — Page 2
\ No newline at end of file
diff --git a/tag/lychee/3/index.html b/tag/lychee/3/index.html
index 8690a584..f8086c17 100644
--- a/tag/lychee/3/index.html
+++ b/tag/lychee/3/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'lychee' — Page 3
\ No newline at end of file
diff --git a/tag/lychee/4/index.html b/tag/lychee/4/index.html
index c930764f..9ff976c7 100644
--- a/tag/lychee/4/index.html
+++ b/tag/lychee/4/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'lychee' — Page 4
\ No newline at end of file
diff --git a/tag/lychee/index.html b/tag/lychee/index.html
index 7ee9fff6..ce33e39d 100644
--- a/tag/lychee/index.html
+++ b/tag/lychee/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'lychee'
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
\ No newline at end of file
diff --git a/tag/scramble/index.html b/tag/scramble/index.html
index bd9bdde0..243ed6c9 100644
--- a/tag/scramble/index.html
+++ b/tag/scramble/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'scramble'
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
\ No newline at end of file
+Lychee - Posts by tag 'scramble'
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
\ No newline at end of file
diff --git a/tag/v5/index.html b/tag/v5/index.html
index 678a774c..69f8cd30 100644
--- a/tag/v5/index.html
+++ b/tag/v5/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'v5'
A look back on Server-Side rendering performance with Livewire in Lychee v5.
\ No newline at end of file
diff --git a/tag/v6/2/index.html b/tag/v6/2/index.html
index 004fffe7..cb5dbf24 100644
--- a/tag/v6/2/index.html
+++ b/tag/v6/2/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'v6' — Page 2
\ No newline at end of file
diff --git a/tag/v6/3/index.html b/tag/v6/3/index.html
index 55ab5a68..0fc026db 100644
--- a/tag/v6/3/index.html
+++ b/tag/v6/3/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'v6' — Page 3
\ No newline at end of file
diff --git a/tag/v6/4/index.html b/tag/v6/4/index.html
index 04b3eccb..7cc67dfc 100644
--- a/tag/v6/4/index.html
+++ b/tag/v6/4/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'v6' — Page 4
\ No newline at end of file
diff --git a/tag/v6/index.html b/tag/v6/index.html
index d4167fcc..4fe4eef5 100644
--- a/tag/v6/index.html
+++ b/tag/v6/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'v6'
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
With v6 at the horizon, we had to drop the support of Scramble, a library responsible for automated API documentation. We explain here the reasons which motivated such choice.
\ No newline at end of file
diff --git a/tag/vuejs/2/index.html b/tag/vuejs/2/index.html
index 714d03ec..dd8356ec 100644
--- a/tag/vuejs/2/index.html
+++ b/tag/vuejs/2/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'vuejs' — Page 2
\ No newline at end of file
diff --git a/tag/vuejs/3/index.html b/tag/vuejs/3/index.html
index ddbf5636..6d7f7b08 100644
--- a/tag/vuejs/3/index.html
+++ b/tag/vuejs/3/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'vuejs' — Page 3
\ No newline at end of file
diff --git a/tag/vuejs/4/index.html b/tag/vuejs/4/index.html
index 78455e56..a906daf2 100644
--- a/tag/vuejs/4/index.html
+++ b/tag/vuejs/4/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'vuejs' — Page 4
\ No newline at end of file
diff --git a/tag/vuejs/index.html b/tag/vuejs/index.html
index 0e9f5f89..be99d721 100644
--- a/tag/vuejs/index.html
+++ b/tag/vuejs/index.html
@@ -1 +1 @@
-Lychee - Posts by tag 'vuejs'