Time to pack in a bundle of contributions again!
This update improves backend speed, finishes some work, and adds multiple new frontend features.
I've mostly spent this dev cycle supporting and fixing up PRs... That's certainly not a bad problem to have though.
LANraragi is now on Weblate!
This release finalizes the localization support introduced in 0.9.3, which means I now get to setup... a collaborative translation platform!
You can now use Weblate to contribute translations to LRR in your language of choice, without touching a lick of Github itself. (Translations are still totally eligible for a free sticker pack, even if you contribute through Weblate!)
LRR currently keys in at around 3000 words, which is a solid 2h-job to translate? This update also comes with a full French translation courtesy of yours truly.
๐ Built-in Duplicates processing (#1224, @dix0nym)

This feature looks at archives across your database to try and find duplicates by comparing cover thumbnail hashes.
Once dupes have been found, you can automatically keep the better file using a few preset rules looking at archive size/date.
This dupe detector is completely different from the one built into LRReader, which is probably still better... But it's nice to have a version you can just run turnkey with a default install.
๐ Built-in favorite support (#1173, @psilabs-dev)
You can now add/remove archives to a dedicated "Favorites" category with those handy bookmark buttons.
They're available in thumbnail/compact views, as well as in the Reader.
New installs will add a new built-in category to house those bookmarks, which fits in nicely with the autofilters from last release!
For users who update, this won't be created, but you can customize which category those buttons link to, in case you already have your favs somewhere.
๐๏ธ Customizable/resizable columns in compact view (#669 / #676, @chu-shen - additional fixes by @psilabs-dev )
firefox_xNLIIJ8kPc.mp4
Compact view updates in 2025... Has hell frozen over?
You can now add as many columns to the compact view as you want, each with customizable namespaces.
Go full-on Excel spreadsheet on your ultrawide monitor, see if I care.
(Custom columns and their widths are still saved to localStorage though and won't carry over between browsers.)
๐ผ Other changes
-
๐ Use CHI for caching page data (#1231, @siliconfeces)
LRR will now store extracted archive pages to an in-memory store instead of writing to disk. This should improve speed overall when reading and serving pages, getting rid of some pretty dang old bits of code from the unar
days... How far we've come since then.
As a result of this change, the temporary folder no longer lives in /public
by default, as there's no more need to serve cached pages from it directly.
Using the spacebar in the reader performs double duty, by scrolling down then moving to the next page when you'd get to the bottom.
The previous implementation had some issues in specific browsers at zoom levels beyond 100%, and didn't snap to pages in any fashion in infinite scrolling mode. This fixes both those issues and adds some niceties for webtoon-format archives.
-
Miscellaneous bugfixes and improvements
๐ Fix ratings nuking all instances of a namespace except the first one
๐ Keep page index when reloading the table after adding a rating
๐ Don't add empty strings as tokens in search engine, improving speed in most searches
๐ Remove forced v18 nodejs for Docker installs
๐ Add a variety of k6 tests for performance evaluation (@siliconfeces)
๐ (#1152) Fix decode_json error when setting non-ASCII characters in plugin configuration (@natanane)
๐ (#1191) Fix incorrect recordsTotal value in search API due to arithmetic error (@Reiyy)
๐ (#1185) Update ComicInfo Plugin (@Saetron)
๐ (#1200) Ensure loc init is done after the DB is ready to avoid failure to launch on Windows
๐ (#1210) Fix hitomi.pm plugin (@doublewelp)
๐ (#1222) Removelegacykeyvalueformat
docker build warnings (@psilabs-dev)
๐ (#1217) Handle Github API rate limits more clearly (@psilabs-dev)
๐ (#1220 / #1232) Improve maketext errors and fallbacks for nonexisting translations, update documentation (@psilabs-dev)
๐ (#1230) Fix thumbnail crop for tall images (@psilabs-dev)
๐ (#1233) Fix unescaped quotation marks in translations (@siliconfeces)
๐ (#1195) Fix docs: search api tank parameter name is not correct (@Reiyy) -
API Changes
๐ Added
api/categories/bookmark_link
endpoints to manage the Bookmark feature ( #1173 )
Full Changelog: v.0.9.31...v.0.9.40
Considered as incidental music for an Omikron game sequence, โBrilliant Adventureโ wound up sequenced on โHoursโ as an ampersand between sturm (โNew Angels of Promiseโ) and drang (โThe Dreamersโ).
As with other โHoursโ tracks, โBrilliant Adventureโ is echo-music, here of โMoss Garden,โ Bowieโs koto piece on โHeroesโ.