Releases: Difegue/LANraragi
LANraragi 0.9.7 - Reality
Damn it's 2026 and we're so back!
This is a meaty release with a lot of backend and frontend changes I will likely have to ship a hotfix for once bugs inevitably pop up in it.
It's also potentially... the last release being offered on GitHub! I'm evaluating escape hatches from Microsoft bullshit and I would recommend you join the Discord to follow up on the news.
(Or at least keep https://tvc-16.science in a tab somewhere, I'm not a fan of gatekeeping info to Discord servers and I'll likely make a blog post if anything happens)
aight thats enough doomerism on to the
Release Notes
🔖 Chapter functionality is now available! (#879, @EfronC )
You can now split individual archives into multiple Chapters -- Convenient if you have large books and want the thumbnail overview to not be 3 kilometers long.
This functionality lives under api/archives/toc for clients.
Adding chapters to books is a manual only process for now, which can be done through the thumbnail overview. I'd like to add capability for metadata plugins to declare chapters in the future.
ok but what about putting multiple archives in a single book i have my best folks on the case, soon™️
✅ The LRR API now follows an OpenAPI spec (#1448, @psilabs-dev )
An OpenAPI spec is now available here for the API.
This makes it easier to write clients, as the behavior is now documented following... best practices and stuff! wow!
The API docs have also been substantially improved to follow said spec, with much more detailed parameters and examples.
It's also possible to directly try out the API against the demo at lrr.tvc-16.science from the docs.
An aside for API client devs
The API will eventually rely on the spec to perform validation, by auto-rejecting requests that don't comply with the spec alongside explicit error messages. This functionality is disabled for the time being since I don't want to break clients without any prior warning, but it'll likely be enabled by default for new installs in the next release.
You can test your client with validation today (not tomorrow! today!) by turning off this new toggle in settings:
🔖 Prometheus Metrics integration (#1301, @psilabs-dev )
If you're already hoarding manga, you might also want to hoard...numbers?
LRR now supports exposing server metrics for the Grafana/Prometheus in your homelab through the new /api/info/metrics endpoint.
See here for more information.
🤌 Other changes
-
🧑🎨 Custom CSS files can now be added again
You could still drop your own csses in /public/theme, but the last changes made to theme selection to allow for previewing the themes made it impossible to select your custom themes. Not anymore!

This also still works with previews, so you can test your custom css right in settings before applying it across the server. -
🅰️ Language can now be configured in Settings (#1278 , @gustaavv)You can now set a fixed override for the server's language instead of having it use the browser's language preference. I won't judge you for not wanting to read manga in your native language, I get it...
-
🔨 Implement excluded namespace logic (#1404, @psilabs-dev)
date_addedused to be explicitly excluded from suggestions and tag clouds, but this wasn't a user-configurable preference. It's now possible to set the excluded namespaces yourself in Settings->Tags and Thumbnails. -
⭐ Add ratings section to reader overlay (#1424, @fancydancers)
You might have spotted this already in the SICP screenshot above -- There's now a dedicated UI for setting
rating:tags on your Archives directly from the Reader. -
🖼️ Make progress div independent from new/completed emojis in thumbnail view
Small QoL change following a user request to make page count and progression always visible, even if you've completed a book.

-
🧐 Add option to only save server-side progress if authenticated (#1398, @jacobgkau)
This is a bit niche, but useful if you want to sync your personal progress across devices on a public instance, but don't want guests or scrapers changing your progress.
-
🔎 Allow the user to configure the Regex used by RegexParse (#1434, @alethiophile)
The default regex that the server can apply to derive metadata from filenames works for most doujinshi, but isn't necessarily a good fit for regular manga or other books. Have fun writing regular expressions!
-
📋 Fix namespace sorting behavior with untagged archives (#1299, @psilabs-dev)
Previously, sorting by a namespace would put archives without that namespace at the front of the results instead of the back, causing a bunch of noise. This is now #fixed #wow
-
Add a "read archive" shortcut to the Edit Metadata page (#1408, @fancydancers)
The more QoL you have the better!
-
Miscellaneous bugfixes and improvements
💎 (#1399) Fix slideshow not respecting manga mode
💎 Add support for Redis connections through unix socket (#1465, @Wiichele)
💎 Use fetch for image preloading to fix Safari behavior (#1477, @Guerra24)
💎 Implement log rotation (#1405, @psilabs-dev)
💎 Allow right-click context-menu on entire row in compact mode (#1409, @anon-watcher)
💎 Adjust handlePaste so that it can append the pasted text to an existing pending tag (#1440, @steve1316 + @psilabs-dev)
💎 Allow disabling preloading (#1390, @siliconfeces)
💎 Fix junction and symbolic links not working in Windows (#1387, @Guerra24)
💎 Make building the archive overlay less CPU heavy for huge archives (#1392, @siliconfeces)
💎 Speed up pages by not iterating over entire archive (#1393, @siliconfeces)
💎 Don't initialize archive overlay immediately to save CPU on huge archives (#1395, @siliconfeces)
💎 Log more information on archive read failure (#1389, @psilabs-dev)
💎 Add a "read archive" shortcut to the Edit Metadata page (#1408, @fancydancers)
💎 Reset slideshow timer on manual page changes (#1421, @psilabs-dev)
💎 Fix additional issues with path handling on Win32 (#1419, @Guerra24)
💎 Fix get_filelist error handling and add tests (#1422, @psilabs-dev)
💎 Add Redis locking to various API endpoints that handle archive IDs
💎 Fix stat zincrs not being Redis-encoded
💎 Avoid error toast when server-side progress API returns 423. (#1451, @siliconfeces)
💎 Hide fullscreen toggle on Safari (#1463, @psilabs-dev)
💎 Remove wsl.conf from Dockerfiles
💎 Updated the localization files -
API Changes
🔑 Add extra PUT call to restore New flag on given IDs
🔑 Added/api/archives/:id/tocto handle Chapters
🔑 Removed/api/archives/:id/extractin favor of/api/archives/:id/files
🔑 Allow include_full_data in Api::Tankoubon::get_tankoubon to be a boolean or an int
🔑 Relaxisnewreturn value type to bool or string or null
🔑 Add/api/info/metricsto serve Prometheus metrics if enabled
🔑 Addauthenticated_progressandexcluded_namespacesto/api/info
Full Changelog: v.0.9.60...v.0.9.70
“We cannot turn back. We cannot choose the dreams of unknowing,” Steiner concluded. Instead, one should enjoy the fact that “it is enormously interesting to be alive at this cruel, late stage in Western affairs…It may well be that our post-culture will be marked by a readiness to endure rather than curtail the risks of thought.” [...]
Why the long digression about Steiner and the death of Western civilization in an entry about a Bowie rock song? Well, it’s Bowie’s fault. He named In Bluebeard’s Castle one of his top 100 books, and in interviews for Reality, he kept bringing up Steiner to frame what he intended with the title track.
LANraragi 0.9.6 - 5:15 The Angels Have Gone
Hacktoberfest has come and went with very little fanfare this year... I was expecting an apocalypse of AI-generated pull requests and somehow that absolutely did not happen.
If even bringing back t-shirts can't get people to contribute to open-source for free, what are the big tech companies going to do???
Better hope those coding agents work I guess :^)
This release mostly fixes some issues with the recently released Windows native version... but there are also a few additional treats! 🍬
I'm grateful as always to all the contributors that are helping improve the server, even outside of October.
LANraragi stickers are (still) available!
I am going to shill those one more time and nobody can stop me.
Since nobody took advantage of the free stickers on PR offer for Hacktoberfest, I have a relatively large stock left on the Ko-fi shop.
For a brief time until the end of the month, I'm waiving shipping fees, also because I can. What else is there to say?
🔥Buy the fucking stickers or go to hell🔥
Release Notes
⌚ Slideshow/Automatic next page (#768, @gustaavv)
The reader has gained a new button!

If you toggle this option, a countdown will appear in its place, which on completion will automatically go to the next page.
It took us multiple years... but this means LRR can now be operated entirely hands-free.
This is surely convenient if you have no hands due to being uh, a ghost or something. Yeah.
...The countdown is also configurable.
🧙♂️ libvips support (#1329, @siliconfeces )
LANraragi has traditionally made use of ImageMagick to handle creating thumbnails and resizing images before serving them if the option is enabled.
Magick is very widespread and has a cool wizard, but it's not necessarily the fastest library -- With 0.9.6, LRR can now use libvips instead if it's installed.
(The Docker image will ship with the library built-in.)
This improves image resizing performance from quite a bit all the way to quite substantial.
Please enjoy the following benchmarks thanks to LRR's newfangled integration tests:
ImageMagick
http_req_duration..............: avg=51.71ms min=3.05ms med=4.23ms max=133.55ms p(90)=130.41ms p(95)=131.8ms
{ expected_response:true }...: avg=51.71ms min=3.05ms med=4.23ms max=133.55ms p(90)=130.41ms p(95)=131.8ms
VIPS:
http_req_duration..............: avg=34.86ms min=2.98ms med=4.51ms max=126.15ms p(90)=78.01ms p(95)=97.8ms
{ expected_response:true }...: avg=34.86ms min=2.98ms med=4.51ms max=126.15ms p(90)=78.01ms p(95)=97.8ms
👻 Other changes
-
🧩 PSA:
LANraragi::Model::Config::redis_decodehas been deprecatedIf you're using this API or its equivalent
redis_encodein a Plugin, please consider switching over toLANraragi::Utils::Redis::redis_decode.
There's no real difference at the moment, but the functions will eventually be removed... someday.I'll make the server start outputting log messages when using the older API a few releases before officially removing it at least.
-
⚖️ Stop calculating file sizes when enumerating archive filelist
When extracting an archive, LRR finds the images it contains, and also used to log the size of those images.
This data has never been used for anything (I think the plan was to show them in the Reader or make them visible to the API at some point...), and since it has been found that was noticeably impacting performance... It's gone!
-
🔎 Artist names are now searchable in Reader (#1347 / #1331 , @psilabs-dev)
A simple QOL feature to allow 1-click access to an artist's page on your server.
This also fixes a small bug where the "by Artist" part wouldn't show if theartist:tag was the last one recorded for an archive.
-
🐍 Integration tests (#1344, @psilabs-dev)
This isn't really a feature but is worth outlining -- The Git repo now makes use of https://github.com/psilabs-dev/aio-lanraragi as part of CI validation, which allows us to automatically test that the server works with every change with a wider variety of scenarios.
Those tests have already paid off while testing this release before publishing! I'm hoping they can also be used to show off more cool comparison benchmarks in the future, demonstrating improvements on a YoY basis to my shareholders (aka Ko-fi subscribers).
-
🪟 Handle Windows long paths (#1325 / #1328 / #1332 / #1338 / #1345 / #1346 , @Guerra24 )
Perl on Windows still considers paths to be 260 characters maximum... Which is being less and less true these days, so it's not surprising that a bunch of issues around that dropped right after we shipped the new native port!
As a wise person once said, to handle the future u must look at the past... So we have solved this issue by converting long paths to use MS-DOS filenames instead. It just works™️
This change also makes use of Win32 API helpers written in .NET, compiled to AOT and consumed in Perl through FFI, which tickles multiple of my funny bones. 🩻
-
🍎 Fix network requests from plugins on macOS (#1375, @Fredddi43)
Because of added security to restrict multithreading in macOS High Sierra and later versions of macOS, the forking workers used by Mojo could potentially be killed by the macOS ObjC runtime.
This led to some plugins failing to make HTTP requests -- LRR now uses unsafe (egads) forking on the Mac/homebrew version, which alleviates the issue. -
🍏 Ignore MacOS garbage files (#1179, @psilabs-dev)
Rejoice
.DS_Storeenjoyers, for your zips will no longer have broken thumbnails!
-
Miscellaneous bugfixes and improvements
💎 Bump sweetalert2 from 11.7.32 to 11.22.4, removing the funny Russia nagware (rip ⚰️)
💎 (#1323) Fix the Windows GUI cutting off if the taskbar location is set to top
💎 (#1319) Avoid dependency cycles (@siliconfeces)
💎 (#1358) Add max value note for tempmaxsize input
💎 (#1354) Fix content disposition regression when viewing images directly (@carrot-png)
💎 (#1337) Fix memory leak when generating thumbnails with the new MCE workers (@Guerra24)
💎 (#1336) Fix a url not usingLRR.apiURLwrapper (@gustaavv)
💎 Fix ghostscript on Windows not reading paths with special characters (@Guerra24)
💎 (#1356) Remove build warnings for install.pl (@psilabs-dev)
💎 (#1379) Enable lazy loading for the quick thumbnail list (@siliconfeces)
💎 (#1382) Use fetchpriority to make browsers fetch current image over thumbnails and stuff (@siliconfeces)
💎 (#1369) Remove api key requirement in plugin docs (@psilabs-dev)
💎 (#1372) Add quick CONTRIBUTING.md that links to the actual documentation
💎 Updated the localization files -
New Contributors
🍾 @carrot-png made their first contribution in #1354
🍾 @Fredddi43 made their first contribution in #1375
Full Changelog: v.0.9.50...v.0.9.60
“5:15 The Angels Have Gone” is also a curtain-raiser for “Heathen”: it’s a world deserted by God, or at least a world whose inhabitants have gotten rather sick of Him. [...] The “new angels of promise” were just avatars in a video game most computers can’t play today*. Now even the glum last intermediaries between man and God are gone [...] Heathen was also crafted as a division point, dressed to be autumnal.
* I actually have to correct bowiesongs on this one for once since you can totally just go and buy Omikron on GOG right now if you want
LANraragi 0.9.5 - New Angels of Promise
c3cd51b2700df501078fd97d567e782cac01d9a8d0380ded2cd2038064c7f59d.mp4
It's summer and I'm dying in a heatwave again while the entire industry is succumbing to AI crap -- But not before I get to shill the Ko-Fi again!
This is mostly small bugfixes and features, unless you're a Windows user...
LANraragi stickers are back!
Thanks to popular demand (two people), I've done a new run of previous LRR sticker designs.
Those new versions are actually slightly larger!
You too can now enjoy those potential infrigements of WinRAR, O'Reilly's and Docker's trademarks -- If they come knocking I'll just say I used them to train an AI model or something, apparently that's OK now.
Buy them here!
The Windows version no longer depends on WSL (#1266, @Guerra24)
LRR on WIndows is switching backends again!
After Strawberry Perl and WSL, the server is now using a custom environment based on MSYS2 to run on the cursed Copilot OS.
Improvements from WSL are pretty numerous!
- Access from localhost and LAN should just work ™️
- Enabling Hyper-V is no longer necessary
- No more confusion around WSL1/2 leading to following outdated advice online
- Filewatching should now work similarly to the Linux/macOS versions
The Karen launcher has also been rewritten in WinUI 3 -- Existing settings (content folder, start on boot, etc) from the previous version will be migrated across.
The WSL builds (both 1 and 2) are officially retired from CI and won't be provided going further. Adios!
🔖 New Languages
- Portuguese (@mayannaoliveira)
🧩 New Plugins
- EHDL "info.txt" Metadata plugin (#1273, @IceBreeze)
- Pixiv Downloader (#1240, @psilabs-dev)
☀️ Other changes
-
📁 Download plugins now support filepaths (#1240, @psilabs-dev)
On top of the previous file URL mechanism, DL plugins can now give an archive file to the server directly.
$logger->info("Created ZIP archive with $download_count images: $zip_filename");
return (
file_path => $zip_path
);
This allows plugin devs to handle websites like Pixiv or NH, where you need to grab every image individually and then zip them at the end, or other services where you might not be able to get a direct file URL and need to run the download yourself.
-
📜 Improve display of namespaces in compact mode (#1276, @IceBreeze)
Custom columns in compact mode will now show every tag for the specified namespace, instead of just the first one.
They'll also now have the same behavior as the larger "tags" column, with individual clickable tags to search and a popup in case you have too many tags for the given namespace to fit in the column.
-
🔎 Improve search result sort speed (#1296, @Putarku)
For searches that used specific tags instead of just relying on the name, the server used to iterate through tags for every entry... which was pretty slow!

This change now moves this operation to rely on Lua scripts executed on the database, which allows us to batch a single DB call to get the sorted results.This speeds up some of the slowest searches in this scenario from 15s to around 2 seconds. It's pretty good!
-
📖 Implement additional keyboard shortcuts (#1289, @psilabs-dev)
You can now use the following shortcuts in the index page:
- "esc" to close release overlay
- "/" to focus to search bar
and in the metadata edit page:
- "enter" when in the plugin args textbox to automatically invoke plugin
Additionally, if release overlay is open, "/" will also automatically close the overlay before focusing to search.
-
Miscellaneous bugfixes and improvements
💎 Fix duplicate table having messed up sizing
💎 UpdateCache::FastMmap
💎 ReplaceParallel::LoopswithMCE::Loops
💎 (#1290) Improve EH plugin search (@Putarku)
💎 (#1292) Add support for resampled downloads to EH Plugin (@renakira1)
💎 (#1281) Fix baseurl session cookies spamming user storage (@nspitko)
💎 (#1284) Documentation update (@ResRipper)
💎 (#1283) Documentation update (@psilabs-dev)
💎 (#1286) Documentation update (@psilabs-dev)
💎 (#1316) Add context menu entry for "Copy URL" to Index (@gustaavv)
💎 (#1288) Improve thumbnail cropping position for wide images (@MoveToEx)
💎 (#1277) Add locks to basic write operations (@psilabs-dev)
💎 (#1293) Add a default configurable UserAgent to the FAKKU plugin (@Nixis198)
Full Changelog: v.0.9.41...v.0.9.50
“New Angels of Promise,” used to score the opening credits of the Omikron: the Nomad Soul video game, has a reservoir of memory to give it depth: it’s a direct descendent of, and answer to, “Sons of the Silent Age” and “Look Back in Anger.”[...] So Bowie sets his new angels (God having rebranded his angels like a box of cereal) as a pair of cold, despairing passersby, lost in a crowd: one’s blind, the other serves as his eyes. In the last verse he calls them, in a wonderful phrase, “tabular lovers.”
LANraragi 0.9.41 - Brilliant Adventure (Omikron Beta Mix)
The normally-scheduled hotfix took a bit longer this time since following the release of 0.9.4 with localization support, a few translations started coming in and I thought:
well I can just wait for those two to be done and bundle them in as a bonus
But then a third TL started, and a fourth and... oh no
This update comes with support for six additional languages thanks to the following:
- Vietnamese (@VinhPham26)
- Spanish (@Guerra24)
- Traditional Chinese, Taiwan (@bennyz327)
- Norwegian (@Scentedtiger)
- Korean (@Haytsir)
- Indonesian (@Slasar41)
At this pace we'll get to Klingon in a few months or something? Thanks a lot to everyone who's been chipping in on Weblate.
There are a bunch of new features in PRs that will take some time to make their way to main (non-shit Windows support? maybe?), so this will probably be the last update for a little bit.
-
Miscellaneous bugfixes and improvements
💎 (#1246) Add 6 new languages
💎 (#1253) Keep cache size to somewhat reasonable sizes (@siliconfeces)
💎 (#1250) Don't assume only GIF is animated for thumbnails (@siliconfeces)
💎 (#1254) Trim slash from id parameter in reader if present
💎 (#1263) Update archive-api.md (@gustaavv)
💎 (#1262) Fix carousel not using i18n (@Guerra24)
💎 (#1268) Fix NEW_ONLY & UNTAGGED_ONLY category selection with the Random carousel (@MegrezZhu)
💎 Support Accept-Language fallbacks properly for localization support
💎 Fix duplicate detection refreshing infinitely if a dupe job didn't find any duplicates
Full Changelog: v.0.9.40...v.0.9.41
“Moss Garden” had ambition (an attempt, successful or not, to interweave “Western” and “Eastern” soundscapes) and fearlessness; By comparison, “Brilliant Adventure” is a tiny ship corked in a tiny bottle.
LANraragi 0.9.4 - Brilliant Adventure
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) Removelegacykeyvalueformatdocker 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_linkendpoints 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”.
LANraragi 0.9.31 - Earthlings On Fire (January 1997 pre-show)
As usual, here's the mandatory hotfix release after a point update.
I hope the beginning of the year has been going well - I say, with a posed look.
🆕 New/Untagged selectors are now dynamic categories
Small QoL change I'm sneaking in here.
Previously the new/untagged selectors were only accessible through the carousel (and still are in case you want to filter new/untagged while having a specific category selected), so I've added two shortcut categories you can use to filter your entire library by new/untagged status.
Those categories are not "real" ones and won't appear in Category management - They're just UI shortcuts.
⏬ (#1136) Fix content-disposition logic infinitely retrying
The new content-disp logic was supposed to stop downloads after 5 retried, but.. that was broken.
Things should now work as usual, and downloads that fail after said 5 retries should give you some more detailed information as to why the last attempt failed.
Sorry for the folks whose instance suddenly started making 1M outbound requests after update 🫠
🖼️ (#1142) Stop trying to be clever and reusing the cover thumbnail
As a result of the prior thumbnail fix, cover thumbnails weren't being generated in the Reader overview. This stems from an old design choice where the page 1 thumb would always be the cover. (Which also made it so that if you overrode the thumbnail for an archive to be say, page 46, the Reader would show the page 46 thumb as page 1.)
I've cleaned this up and finally fully decorrelated page thumbnails from main archive thumbnails, which fixes both bugs in one.
🎆 Other changes
-
Miscellaneous bugfixes and improvements
💎 (#1139) WSL1 legacy builds now include Perl 5.36 to maintain compatibility (at the cost of ImageMagick)
💎 Fix not being able to run the server without a working ImageMagic install (heh)
💎 (#1145) Fix text used in FA icons being erroneously translated
💎 (#1143) Fix i18n using generic app logger
💎 Fix extra quote in EN strings
💎 (#1150) fix regen_all_thumbnails
💎 (#939) Try alternate way to detect bottom of page -
API Changes
🔑 Fix incorrect total/filtered counts in the tankoubon API ( #1155, @EfronC )
🔑 Fix not being able to clear tags/summary for a tankoubon (#1156, @EfronC )
Full Changelog: v.0.9.30...v.0.9.31
Though “Law” seems intended to be a club single like “Pallas,” it wasn’t issued as one. It was also the only Earthling song never performed live, though it was used as pre-show music for the 50th Birthday Concert in January 1997.
LANraragi 0.9.3 - Law (Earthlings on Fire)
Merry Christmas! To wrap up the year, I am bringing you the gift of Chinese.
This release clears out a few long-standing feature requests; We haven't had sub-500 issue numbers in a long time!
There are also a fair amount of new features, new plugins(GalleryDL is here!), existing plugin fixes, and API doodads for clients to play with.
I hope you all have an excellent end of the year -- Surely tanks will be finished in 2025.
This update bumps the Perl minversion requirement to v.5.36.0.
🖼️ Thumbnail improvements (#953 / #1059 / #1076)
Last release broke automatic generation of cover thumbnails in an attempt to spam the job queue less; This should now be fixed.
Page thumbnails improved a lot last time but were a bit slower as a result; I've reintroduced some multithreading there so that beefy machines don't get stuck for ages generating all pages if they can help it.
And finally, in what is a bit of a breaking change, the default mount directory for thumbnails has changed.
It used to be a subdirectory of the content folder, but as recent changes made it possible to be its own Docker volume, this made the situation convoluted and hard to work with.
tl;dr /home/koyomi/lanraragi/content/thumb is now /home/koyomi/lanraragi/thumb.
Feel free to set it back to the old location in server settings if you want to keep the old behavior. Sorry for the trouble!
🌟 Added Rating option on WebUI contextMenu (#873, @Hanga7yr)
There's some new shorthand UI for creating and deleting rating:xxx tags.
It might be possible to allow being able to set those ratings from the Reader page as well in the future, like what has been done for Categories... But for now this is only usable in the Index.
📚 Tankoubons are progressing (#519, #1045) (@EfronC)
While there's no UI yet, if you use the API to assign archives to Tankoubons, they will all be grouped under said tank, which will show up in search.
Tankoubons can also now have their own summary and tags -- Tankoubon-specific tags will be added to the sum of the tags of all the contained archives.
The feature is still a WIP and is disabled in the web UI;
Clients can use the grouping mechanism with the search API by using the group_tanks flag.
🈁 Localization support and official CN translation (#617, @Haibersut)
This has been a longstanding ask to the point there are maintained translated forks of the server -- There have been attempts to bring localizations in a few times but I never managed to make anything pan out... Until now! Many thanks to @Haibersut for going through with this anew.
LRR is now (mostly) fully localizable, and will adapt its display language to whatever your browser requests (through the Accept-Language header) if it supports it.. Which for now really just means english and chinese.
The current work translates most of the webapp - Some dynamic popup messages will remain untranslated in this release.
More languages coming soon -- If you wish to contribute yourself, feel free to check the Documentation.
🅱️ Base URL support (#363, @alethiophile)
This was another longstanding request for folks who wanted to deploy LANraragi without using an entire toplevel domain or subdomain.
You can now configure base_url_path in lrr.conf to allow for subdirectory deployment.
E.g. if a top-level deployment had the URL manga.example.com, a subdirectory deployment might have the URL example.com/manga. LANraragi can be used as normal, with all its internal URLs rewritten to be under the /manga subdirectory:
base_url_path => "/manga",
🎁 Other changes
-
Plugin Dev QoL updates (#1091 / #1071 / #1041, @IceBreeze)
💣 Error handling from plugins is now handled more gracefully at the plugin loader level.
💥 This really mostly means you can write sloppier code than before and stop caring about error checking -- Anydieexceptions thrown from plugins will be mirrored to a proper error message for end users.
🧩 Plugins can now use named parameters instead of the previous array mechanism - See the Documentation if you fancy migrating. -
Upload API endpoint (#1085, @psilabs-dev)
⬆️ This API implementation (using multipart/form-data encoding) allows users to perform language-agnostic archive migrations or mirrors from their existing archive servers and downloaders to the LRR server via the API, or write comparatively thin HTTP client wrappers around their downloaders that negotiate with and push to LRR during that application's runtime.
🏣 You can also attach the SHA1 hash of the file to check for file integrity and avoid corruptions during transit. -
Fix Docker healthcheck failing with proxies and ipv6 (#1040, #1117, @psilabs-dev)
🐋 The built-in healthcheck is a dumb wget and will false fail in a lot of cases... But we fixed some of them with this update.
-
Plugin updates
🆕 Add plugin to copy tags from another archive ID (@IceBreeze)
🆕 Add GalleryDL plugin (#1109, @okaros)
🧩 [ComicInfo] Add support for elements in ComicInfo files (#1047)
🧩 [Koromo] Avoid ARRAY garbage tags for unexpected koromo info.json files (#1050, @siliconfeces)
🧩 [Eze] Check for existing upload_date tag before processing (#1046, @lnhpm)
🧩 [HDoujin] Improve HDoujin info.txt parsing with additional field support (#1053, @HDoujinDownloader)
🧩 [RegexParse] Add testing for RegexParse (#1060, @siliconfeces)
🧩 [HDoujin] Add title and source extraction for HDoujin info files (#1068, @HDoujinDownloader)
🧩 [nH] Fix local filepaths not being decoded before being used for seach (#1074, @natanane)
🧩 [nH] Add support to set upload date in timestamp field using epoch stamp (#1077, @shinji257)
🧩 [FAKKU] Add option to use FAKKU plugin safely (#1082, @nivkner)
🧩 [ComicInfo] Add Title parsing and updating to ComicInfo (#1098, @shinji257)
🧩 [Pixiv] Add Pixiv summary (#1105, @psilabs-dev)
🧩 [FAKKU] Fixed Fakku summary and added thumb folder to gitignore. (#1113, @Nixis198)
🧩 [RegexParse] Add support for multiple artists in filename (#1084, @IceBreeze) -
Miscellaneous bugfixes and improvements
💎 (#1037) Use string-based comparison (cmp) rather than numeric <=> for IDs (@siliconfeces)
💎 Fix backup generation failing if content folder is Readonly
💎 Add support for .zst and .tar.zst archives (#1063, @baysonfox)
💎 (#1055) Fix tag edit fields on mobile (@alethiophile)
💎 (#1070) Fix Windows uninstall failing if wslconfig.exe is unavailable
💎 Fix archive count stat not being counted correctly
💎 Add logging to debug occasional filetype failures on mass downloads
💎 (#846) Add some basic retry logic for blank content-disposition headers
💎 Fix the issue where "Pin this Category" doesn't work in Chrome (#1132, @Reiyy)
💎 Test for file existence before removing mojo/minion/shinobu pid files (#1110, @okaros)
💎 Fix incorrectly firedpage_thumbjobs when the cover is missing
💎 Update npm, Mojo and Minion versions
💎 Update perl requirement to v5.36 so we can use try/catch
💎 Fix incorrect search sorting in some cases (#1122, @psilabs-dev)
💎 Fix noisy logs (#1125, @psilabs-dev)
💎 Add docs and permission-fixing to the plugin sideload directory
💎 Fix search engine not halting token processing when there are no more results -
API Changes
🔑 (#1119) Add
recordsTotalto/api/search/random
🔑 (#1085) Implement/api/archives/upload(@psilabs-dev)
🔑 Fix JSON types on/api/info-- This is a breaking change. (thanks @MegrezZhu for a bugfix on this)
🔑 Add a cleanersuccessMessageto metadata update API
🔑 (#1080) Add total_archives to /api/info
🔑 (#519) Add parameter to search API to group IDs into tanks if enabled
🔑 PUT/api/tankoubons/:id/archiveis now PUT/api/tankoubons/:idand the payload has changed to accomodate being able to set specific summary/tags for Tanks.
Full Changelog: v.0.9.22...v.0.9.30
Bowie saw Russell as predicting the data avalanche of the Internet. You can attempt to use the information it generates to shore up your preconceptions, or you can simply sit on the banks and watch an endless, ever-broadening stream of information go by. Russell “was right, mean old bastard that he was,” Bowie said in 1997.
LANraragi 0.9.22 - Telling Lies (Adam F mix)
This update hotfixes the built-in EH downloader to correct issue #1101 - 0.9.3 isn't really ready for an external release but this issue impacts enough people that it's worth getting a quick patch out.
Look at the 0.9.20 release for a fuller changelog since 0.9.1.
Full Changelog: v.0.9.21...v.0.9.22
But if baffling and clunky on record, lines like “gasping for my resurrection” and “come straggling in your tattered remnants” came alive on tour, with Bowie playing a Satanic figure in his performance, coming across as an aging imp of the perverse.
LANraragi 0.9.21 - Telling Lies (Paradox mix)
Just a small hotfix release to make things easier for API clients.
Look at the previous release for the full deets!
Full Changelog: v.0.9.20...v.0.9.21
“Telling Lies” lacks a definitive version. Instead it has four faces: a drum-happy mix by Bowie and Plati, originally called the “Feelgood Mix,” which was the first version of “Lies” to be released; a Guy Called Gerald’s “Paradox” mix (dub and ambient brewed in a kettle, with Bowie’s vocal twisted into odd shapes); Adam F.’s buoyant, airy take, with a better chorus/verse join than the LP track.
LANraragi 0.9.2 - Telling Lies
A new release this early!? It's surprising how much stuff you end up with in just a month sometimes.
I hope y'all are having a sugoi summer™️!
📇 Add support for Koharu-style info.yaml (#1023, @siliconfeces)
Another day, another info.yaml spec...
Support for Koharu's yaml syntax has been added to the existing KSK plugin.
🌽 Add a new tag rule for fast replacements (#1015, @nuclear06)
You can now use ns_a:tag_a => ns_b:tag_b to perform replacements.
This works similarly to ns_a:tag_a -> ns_b:tag_b, but uses a hash table to enhance speed.
The result is that this rule is way faster, but only executes after all other tag rules.
🧺 Other changes
-
(#980) Sideloaded plugins in Docker installs are now persisted (@Nixis198)
📩 Previously, plugins sideloaded through the web client would land alongside the stock plugins, in
home/koyomi/lanraragi/lib/LANraragi/Plugin.
🐋 The issue with this was that Docker installs would lose their sideloaded plugins on every update.
🐳 Uploaded plugins now land in/home/koyomi/lanraragi/lib/LANraragi/Plugin/Sideloaded, which now has its own VOLUME set for Docker installs. If I ever make a third-party plugin repository, they'll probably install in there as well. -
(#1022) Fix summary whitespace display
🗒️ Summaries supported newlines and tabs just fine, but the web client was just eating those up. Things should work better now 👍
-
Plugin changes/fixes
🧩 (#1007) Allow ksk plugin to handle single-string in yamls alongside arrays
🧩 (#1012) Updated the FAKKU plugin to add summary support and source tag lookup (@Nixis198)
🧩 (#993) EH plugin can now handle source tags with https prefix (@anonstash) -
Miscellaneous bugfixes and improvements
💎 Updated to Alpine 3.20 for Docker/Win builds
💎 (#882) Rewrite given/when as if-chains (@siliconfeces)
💎 Avoid puking out warning when calling trim_crlf with undef (#1026) (@siliconfeces)
💎 Revert maximum-scale change to fix pinch to zoom
💎 Ignoresource:ordate_added:namespaces when building tag cloud (#1013) (@nuclear06)
💎 (#1006) Use proper locale comparison API for clientside category sorting
💎 Fix error messages being broken by xml_escape
💎 Updated Taskbar icon for Windows installs
💎 Fix PWA app.webappmanifest references
💎 Use a better placeholder for checkbox menu when there are no categories on the server
💎 Fix backup restoration failing when setting summaries
Full Changelog: v.0.9.10...v.0.9.20
As a transition piece, “Lies” worked well, getting the band into the frame of mind for what would become Earthling. When they got off the road, Bowie hustled to take a “sonic photograph” of them in the studio before they lost their tour-hardened sound..








