<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:media="http://search.yahoo.com/mrss/">
  <channel>
    
    <title>GitHub Lua Daily Trending Repositories</title>
    <description>Daily Trending Repositories of Lua on GitHub</description>
    
    <pubDate>Mon, 14 Sep 2026 05:45:28 GMT</pubDate>
    <link>https://mshibanami.github.io/GitHubTrendingRSS</link>
    
    <item>
      <title>LandSandBoat/server</title>
      <link>https://github.com/LandSandBoat/server</link>
      <description>&lt;p&gt;⛵ LandSandBoat - a server emulator for Final Fantasy XI&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://landsandboat.github.io/server/&quot;&gt;https://landsandboat.github.io/server/&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; &lt;img width=&quot;256&quot; height=&quot;256&quot; src=&quot;https://raw.githubusercontent.com/LandSandBoat/server/base/res/lsb_logo_circle.png&quot; /&gt; &lt;/p&gt;
&lt;h1 align=&quot;center&quot;&gt;LandSandBoat&lt;/h1&gt; 
&lt;p&gt;&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; An open-source server emulator for FFXI. &lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;a href=&quot;https://github.com/LandSandBoat/server/actions/workflows/build.yml&quot;&gt;&lt;img src=&quot;https://github.com/LandSandBoat/server/actions/workflows/build.yml/badge.svg?branch=base&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/LandSandBoat/server/actions/workflows/test.yml&quot;&gt;&lt;img src=&quot;https://github.com/LandSandBoat/server/actions/workflows/test.yml/badge.svg?branch=base&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://www.gnu.org/licenses/gpl-3.0&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/License-GPLv3-blue.svg?sanitize=true&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/LandSandBoat/server/pulls&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Contributions-welcome-brightgreen.svg?style=flat&quot; /&gt;&lt;/a&gt; &lt;/p&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;p&gt;A &lt;a href=&quot;https://github.com/LandSandBoat/server/wiki/Quick-Start-Guide&quot;&gt;quick start guide&lt;/a&gt;, the &lt;a href=&quot;https://github.com/LandSandBoat/server/wiki/Frequently-Asked-Questions&quot;&gt;frequently asked questions&lt;/a&gt;, and a table of &quot;&lt;a href=&quot;https://github.com/LandSandBoat/server/wiki/What-Works&quot;&gt;what works&lt;/a&gt;&quot; are all available on &lt;a href=&quot;https://github.com/LandSandBoat/server/wiki&quot;&gt;our wiki&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Interacting with LandSandBoat&lt;/h2&gt; 
&lt;h3&gt;Crashes, warnings, errors, bugs, gameplay issues, visual issues, questions, documentation issues, build problems, etc.&lt;/h3&gt; 
&lt;p&gt;Please create a new issue in the &lt;a href=&quot;https://github.com/LandSandBoat/server/issues&quot;&gt;issues tab&lt;/a&gt; after searching to see if your issue is already logged.&lt;/p&gt; 
&lt;p&gt;&lt;em&gt;If you are encountering an issue, please open an issue!&lt;/em&gt; It&#39;s easier for us to track and you&#39;re more likely to get resolution through an issue than any other means.&lt;/p&gt; 
&lt;h3&gt;AI Agents and their use&lt;/h3&gt; 
&lt;p&gt;If you&#39;re a human using AI agents or an AI agent you should go read &lt;code&gt;./docs/ai_agents/README.md&lt;/code&gt;.&lt;/p&gt; 
&lt;h2&gt;LICENSE&lt;/h2&gt; 
&lt;p&gt;LandSandBoat is licensed under &lt;a href=&quot;https://github.com/LandSandBoat/server/raw/base/LICENSE&quot;&gt;GNU GPL v3&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Thanks&lt;/h2&gt; 
&lt;p&gt;Thanks to all contributors past and present, we wouldn&#39;t be here without you!&lt;/p&gt; 
&lt;p&gt;Thanks to GitHub for hosting us, and for all the CI minutes we use!&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/bcd9ae92966b5043999d4a846108c4179849cad7a1b1d54e176ea2b8caf2a1c0/LandSandBoat/server" medium="image" />
      
    </item>
    
    <item>
      <title>koreader/koreader</title>
      <link>https://github.com/koreader/koreader</link>
      <description>&lt;p&gt;An ebook reader application supporting PDF, DjVu, EPUB, FB2 and many more formats, running on Cervantes, Kindle, Kobo, PocketBook and Android devices&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;http://koreader.rocks/&quot;&gt;http://koreader.rocks/&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://koreader.rocks&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/koreader/koreader.github.io/master/koreader-logo.png&quot; alt=&quot;KOReader&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h4&gt;KOReader is a document viewer primarily aimed at e-ink readers.&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/COPYING&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/koreader/koreader&quot; alt=&quot;AGPL Licence&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/koreader/koreader/releases&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/release/koreader/koreader.svg?sanitize=true&quot; alt=&quot;Latest release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://gitter.im/koreader/koreader&quot;&gt;&lt;img src=&quot;https://img.shields.io/gitter/room/koreader/koreader?color=red&quot; alt=&quot;Gitter&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;http://www.mobileread.com/forums/forumdisplay.php?f=276&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/forum-on_mobileread-lightgrey&quot; alt=&quot;Mobileread&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://circleci.com/gh/koreader/koreader&quot;&gt;&lt;img src=&quot;https://circleci.com/gh/koreader/koreader.svg?style=shield&quot; alt=&quot;Build Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://codecov.io/gh/koreader/koreader&quot;&gt;&lt;img src=&quot;https://codecov.io/gh/koreader/koreader/branch/master/graph/badge.svg?sanitize=true&quot; alt=&quot;Coverage Status&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://hosted.weblate.org/engage/koreader/?utm_source=widget&quot;&gt;&lt;img src=&quot;https://hosted.weblate.org/widgets/koreader/-/koreader/svg-badge.svg?sanitize=true&quot; alt=&quot;Weblate Status&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/koreader/koreader/releases&quot;&gt;Download&lt;/a&gt; • &lt;a href=&quot;http://koreader.rocks/user_guide/&quot;&gt;User guide&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki&quot;&gt;Wiki&lt;/a&gt; • &lt;a href=&quot;http://koreader.rocks/doc/&quot;&gt;Developer docs&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Main features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;portable&lt;/strong&gt;: runs on embedded devices (Cervantes, Kindle, Kobo, PocketBook, reMarkable), Android and Linux computers. Developers can run a KOReader emulator in Linux and MacOS.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;multi-format documents&lt;/strong&gt;: supports fixed page formats (PDF, DjVu, CBT, CBZ) and reflowable e-book formats (EPUB, FB2, Mobi, DOC, RTF, HTML, CHM, TXT). Scanned PDF/DjVu documents can also be reflowed with the built-in K2pdfopt library. &lt;a href=&quot;https://github.com/koreader/koreader/wiki/ZIP&quot;&gt;ZIP files&lt;/a&gt; are also supported for some formats.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;full-featured reading&lt;/strong&gt;: multi-lingual user interface with a highly customizable reader view and many typesetting options. You can set arbitrary page margins, override line spacing and choose external fonts and styles. It has multi-lingual hyphenation dictionaries bundled into the application.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;integrated&lt;/strong&gt; with &lt;em&gt;calibre&lt;/em&gt; (search metadata, receive ebooks wirelessly, browse library via OPDS), &lt;em&gt;Wallabag&lt;/em&gt;, &lt;em&gt;Wikipedia&lt;/em&gt;, &lt;em&gt;Google Translate&lt;/em&gt; and other content providers.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;optimized for e-ink devices&lt;/strong&gt;: custom UI without animation, with paginated menus, adjustable text contrast, and easy zoom to fit content or page in paged media.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;extensible&lt;/strong&gt;: via plugins&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;fast&lt;/strong&gt;: on some older devices, it has been measured to have less than half the page-turn delay as the built in reading software.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;and much more&lt;/strong&gt;: look up words with StarDict dictionaries / Wikipedia, add your own online OPDS catalogs and RSS feeds, over-the-air software updates, an FTP client, an SSH server, …&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Please check the &lt;a href=&quot;http://koreader.rocks/user_guide/&quot;&gt;user guide&lt;/a&gt; and the &lt;a href=&quot;https://github.com/koreader/koreader/wiki&quot;&gt;wiki&lt;/a&gt; to discover more features and to help us document them.&lt;/p&gt; 
&lt;h2&gt;Screenshots&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-menu.png&quot;&gt;&lt;img src=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-menu-thumbnail.png&quot; alt=&quot;&quot; width=&quot;200px&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-footnotes.png&quot;&gt;&lt;img src=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-footnotes-thumbnail.png&quot; alt=&quot;&quot; width=&quot;200px&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-dictionary.png&quot;&gt;&lt;img src=&quot;https://github.com/koreader/koreader-artwork/raw/master/koreader-dictionary-thumbnail.png&quot; alt=&quot;&quot; width=&quot;200px&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;Please follow the model specific steps for your device:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-Android-devices&quot;&gt;Android&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-BQ-devices&quot;&gt;Cervantes&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-Kindle-devices&quot;&gt;Kindle&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-Kobo-devices&quot;&gt;Kobo&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-desktop-linux&quot;&gt;Linux&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-PocketBook-devices&quot;&gt;Pocketbook&lt;/a&gt; • &lt;a href=&quot;https://github.com/koreader/koreader/wiki/Installation-on-Remarkable&quot;&gt;reMarkable&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Development&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/doc/Building.md&quot;&gt;Setting up a build environment&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/doc/Collaborating_with_Git.md&quot;&gt;Collaborating with Git&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/doc/Building_targets.md&quot;&gt;Building targets&lt;/a&gt; • &lt;a href=&quot;https://raw.githubusercontent.com/koreader/koreader/master/doc/Porting.md&quot;&gt;Porting&lt;/a&gt; • &lt;a href=&quot;http://koreader.rocks/doc/&quot;&gt;Developer docs&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;p&gt;KOReader is developed and supported by volunteers all around the world. There are many ways you can help:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/koreader/koreader/issues?q=is%3Aopen+is%3Aissue+label%3Abug&quot;&gt;fix bugs&lt;/a&gt; and &lt;a href=&quot;https://github.com/koreader/koreader/issues?q=is%3Aopen+is%3Aissue+label%3Aenhancement&quot;&gt;implement new features&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://hosted.weblate.org/engage/koreader/?utm_source=widget&quot;&gt;translate the program into your language&lt;/a&gt; or improve an existing translation&lt;/li&gt; 
 &lt;li&gt;document lesser-known features on the &lt;a href=&quot;https://github.com/koreader/koreader/wiki&quot;&gt;wiki&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;help others with your knowledge on the &lt;a href=&quot;http://www.mobileread.com/forums/forumdisplay.php?f=276&quot;&gt;forum&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Right now we only support &lt;a href=&quot;https://liberapay.com/KOReader&quot;&gt;liberapay&lt;/a&gt; donations.&lt;/p&gt; 
&lt;h2&gt;Contributors&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/koreader/koreader/commits/master&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/last-commit/koreader/koreader?color=orange&quot; alt=&quot;Last commit&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/koreader/koreader/pulse&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/commit-activity/m/koreader/koreader&quot; alt=&quot;Commit activity&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/975f5796ae0e2bd78701d7dbe20dfabd7edabe3c6b37de1919232b761d34f1d3/koreader/koreader" medium="image" />
      
    </item>
    
    <item>
      <title>AndyHazz/bookshelf.koplugin</title>
      <link>https://github.com/AndyHazz/bookshelf.koplugin</link>
      <description>&lt;p&gt;A nice looking home screen for KOReader. Lets you pick a book from your shelf and read it, with some customisation around the book preview info that&#39;s shown.&lt;/p&gt;&lt;hr&gt;&lt;p align=&quot;center&quot;&gt; 
 &lt;picture&gt; 
  &lt;source media=&quot;(prefers-color-scheme: dark)&quot; srcset=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/assets/bookshelf-logo-dark.png&quot; /&gt; 
  &lt;img alt=&quot;Bookshelf&quot; src=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/assets/bookshelf-logo.png&quot; width=&quot;320&quot; /&gt; 
 &lt;/picture&gt; &lt;/p&gt; 
&lt;h1&gt;Bookshelf&lt;/h1&gt; 
&lt;p&gt;A friendly home screen for KOReader. Browse your library by series, author, genre, collection, or anything you like; pick a book, glance at its cover, blurb, rating, and progress, and start reading. Browse &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#opds-catalogues&quot;&gt;online catalogues&lt;/a&gt; (Project Gutenberg, Standard Ebooks, and friends) the same way and download straight to your shelf. A build-your-own &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#the-start-menu&quot;&gt;start menu&lt;/a&gt; puts your shortcuts, folders, and live panels a tap away in the corner. Shelves draw three ways: a grid of &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#the-shelf-grid-the-books&quot;&gt;covers&lt;/a&gt;, a text &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#list-view&quot;&gt;list&lt;/a&gt;, or &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#spines&quot;&gt;spines&lt;/a&gt; standing edge-on like a real bookcase.&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/assets/screenshot-home.png&quot; width=&quot;19%&quot; alt=&quot;Bookshelf home screen&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/assets/screenshot-series.png&quot; width=&quot;19%&quot; alt=&quot;A shelf grouped by series&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/assets/screenshot-shelf-editor.png&quot; width=&quot;19%&quot; alt=&quot;The shelf editor&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/assets/screenshot-hero-editor.png&quot; width=&quot;19%&quot; alt=&quot;The hero card line editor&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/assets/screenshot-search.png&quot; width=&quot;19%&quot; alt=&quot;Library search results&quot; /&gt; &lt;/p&gt; 
&lt;h2&gt;Install&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;Download the latest &lt;strong&gt;bookshelf.koplugin.zip&lt;/strong&gt; from &lt;a href=&quot;https://github.com/AndyHazz/bookshelf.koplugin/releases&quot;&gt;Releases&lt;/a&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Unzip it onto your device&#39;s KOReader plugins folder:&lt;/p&gt; 
  &lt;table&gt; 
   &lt;thead&gt; 
    &lt;tr&gt; 
     &lt;th&gt;Device&lt;/th&gt; 
     &lt;th&gt;Plugins folder&lt;/th&gt; 
    &lt;/tr&gt; 
   &lt;/thead&gt; 
   &lt;tbody&gt; 
    &lt;tr&gt; 
     &lt;td&gt;Kindle&lt;/td&gt; 
     &lt;td&gt;&lt;code&gt;/mnt/us/koreader/plugins/&lt;/code&gt;&lt;/td&gt; 
    &lt;/tr&gt; 
    &lt;tr&gt; 
     &lt;td&gt;Kobo&lt;/td&gt; 
     &lt;td&gt;&lt;code&gt;/mnt/onboard/.adds/koreader/plugins/&lt;/code&gt;&lt;/td&gt; 
    &lt;/tr&gt; 
    &lt;tr&gt; 
     &lt;td&gt;Android&lt;/td&gt; 
     &lt;td&gt;&lt;code&gt;&amp;lt;koreader-dir&amp;gt;/plugins/&lt;/code&gt;&lt;/td&gt; 
    &lt;/tr&gt; 
   &lt;/tbody&gt; 
  &lt;/table&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Restart KOReader.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;Open KOReader&#39;s menu and set &lt;strong&gt;Start with -&amp;gt; Bookshelf&lt;/strong&gt;. Without this, KOReader opens its standard file browser on launch; you can still open Bookshelf manually from the menu.&lt;/p&gt; 
  &lt;blockquote&gt; 
   &lt;p&gt;The &lt;strong&gt;Start with&lt;/strong&gt; setting only appears in the menu of KOReader&#39;s &lt;strong&gt;File Manager&lt;/strong&gt; screen, not while a book is open. If you can&#39;t find it, close the book first (or launch KOReader without one open), then open the menu from the file browser.&lt;/p&gt; 
  &lt;/blockquote&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Bookshelf needs KOReader&#39;s Cover browser plugin.&lt;/strong&gt; It is switched on in a stock KOReader, so this is usually nothing to do. You only need to check it if you have turned it off yourself, which some other plugins ask you to do. To look: open the KOReader menu, then &lt;strong&gt;More tools -&amp;gt; Plugin management -&amp;gt; Built-in plugins&lt;/strong&gt;, and make sure &lt;strong&gt;Cover browser&lt;/strong&gt; is ticked. Cover browser supplies the covers and metadata Bookshelf reads; without it, Bookshelf shows a one-time notice and steps aside to KOReader&#39;s standard file browser.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;Once it&#39;s running, the top menu has a &lt;strong&gt;Bookshelf&lt;/strong&gt; section with everything else: shelf size, shelves, Hardcover, updates, and settings.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;&quot;menu&quot; below always means Bookshelf&#39;s own menu&lt;/strong&gt;: the &lt;strong&gt;Bookshelf&lt;/strong&gt; tab in KOReader&#39;s top menu, marked with an open-book icon and usually second from the left. Not to be confused with the &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#the-start-menu&quot;&gt;start menu&lt;/a&gt;, the hamburger in the bottom-left corner of the shelf, which is a launcher you build yourself (though it does carry a &lt;strong&gt;Bookshelf menu&lt;/strong&gt; shortcut to the same place by default). Anywhere these instructions mean a different menu, they say so.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;hr /&gt; 
&lt;h2&gt;A quick tour&lt;/h2&gt; 
&lt;h3&gt;The shelf menu (top of the screen)&lt;/h3&gt; 
&lt;p&gt;Each shelf is one slice of your library. Tap one to switch to it. Out of the box you get &lt;strong&gt;Home&lt;/strong&gt;, &lt;strong&gt;Recent&lt;/strong&gt;, &lt;strong&gt;Series&lt;/strong&gt;, and &lt;strong&gt;Favorites&lt;/strong&gt;, but you can rename, reorder, hide, or delete any of them and add as many of your own as you like.&lt;/p&gt; 
&lt;p&gt;A shelf can point at:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Home&lt;/strong&gt; -- your library as folders, or as a flat list of every book.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Recent&lt;/strong&gt; or &lt;strong&gt;Latest&lt;/strong&gt; -- books you read recently, or books added recently.&lt;/li&gt; 
 &lt;li&gt;A &lt;strong&gt;stack&lt;/strong&gt; of series, authors, genres, collections, formats, ratings, or reading statuses. Tap a stack to drill into one of its members.&lt;/li&gt; 
 &lt;li&gt;A &lt;strong&gt;specific&lt;/strong&gt; series, author, genre, collection, format, rating, folder, or reading status -- a shelf showing just that one slice of your library.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Favorites&lt;/strong&gt; -- the built-in starred shelf.&lt;/li&gt; 
 &lt;li&gt;An &lt;strong&gt;OPDS catalogue&lt;/strong&gt; -- an online book catalogue browsed as a shelf, with downloads. See &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#opds-catalogues&quot;&gt;OPDS catalogues&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Your &lt;strong&gt;Kindle library&lt;/strong&gt; -- on a Kindle, the books in the Kindle&#39;s own library. See &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#kindle-library&quot;&gt;Kindle library&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Each shelf remembers its own &lt;strong&gt;filters&lt;/strong&gt; (reading status, genre, language, format, rating, collection, or folder -- see &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#shelf-sources-filters-and-sorts&quot;&gt;Shelf sources, filters, and sorts&lt;/a&gt;), sort priority (up to three levels deep, e.g. &lt;em&gt;surname, then series, then series number&lt;/em&gt;), label, icon, colour, and whether it&#39;s enabled.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;To edit a shelf:&lt;/strong&gt; long-press it. The footer of the editor has &lt;strong&gt;+ Add new shelf&lt;/strong&gt; if you&#39;d like to start a fresh one.&lt;/p&gt; 
&lt;p&gt;The same menu (&lt;strong&gt;menu -&amp;gt; Bookshelf shelves…&lt;/strong&gt;) also has &lt;strong&gt;Shelf menu font size&lt;/strong&gt; for adjusting how big the shelves render across the top of the screen.&lt;/p&gt; 
&lt;p&gt;When you have more shelves than fit across the screen, the bar splits into pages: tap the &lt;strong&gt;&amp;gt;&lt;/strong&gt; / &lt;strong&gt;&amp;lt;&lt;/strong&gt; chevrons at the end of the row, or swipe left/right on the bar, to move between them (the active shelf&#39;s page shows first). On e-ink the change plays as a wipe -- see &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#animations&quot;&gt;Animations&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Searching&lt;/h3&gt; 
&lt;p&gt;Tap the search icon at the right of the shelf menu. Search looks across authors, series, genres, collections, and book titles in one go, and groups the results by category. Tapping a result drills into it; back-swipe to return to whichever shelf you were on.&lt;/p&gt; 
&lt;p&gt;Folder names aren&#39;t searched by default: in most libraries the folders mirror the author/series/genre stacks, so matching a folder just duplicates the metadata result of the same name. If you navigate by folder, turn on &lt;strong&gt;Settings -&amp;gt; Library &amp;amp; search -&amp;gt; Include folder names in search results&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;On an &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#opds-catalogues&quot;&gt;OPDS catalogue&lt;/a&gt; shelf, the same search icon searches the catalogue itself (when the catalogue supports search), so you can look up a title or author across the whole catalogue rather than just the page on screen.&lt;/p&gt; 
&lt;h3&gt;The hero card (top of the shelf area)&lt;/h3&gt; 
&lt;p&gt;The big card at the top of the screen previews the focused book. Tap a cover on the grid to focus it; the card refreshes with its title, author, description, rating, and progress. Tap the hero card cover to open the book.&lt;/p&gt; 
&lt;p&gt;The hero card has eight sections you can show, hide, or restyle:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Status line&lt;/strong&gt; -- top right; defaults to disk space, battery, frontlight, Wi-Fi, and time.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Rating&lt;/strong&gt; -- five tappable stars (off by default; tap a star to set or clear).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Title&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Author&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Metadata&lt;/strong&gt; -- a free-form line; the default shows the series and series number for books in a series.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt; -- the book blurb. Tap to read the full text in a scrollable viewer.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tags (interactive)&lt;/strong&gt; -- a strip of tappable pills for the book&#39;s author, series, genres, collections, and parent folder. Tap a pill to jump straight to that shelf. Off by default.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Progress&lt;/strong&gt; -- bottom-anchored line with an inline progress bar.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;To edit them, open &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Edit book detail view&lt;/strong&gt; (see &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#customising-the-hero-card&quot;&gt;Customising the hero card&lt;/a&gt; below).&lt;/p&gt; 
&lt;h3&gt;Micro-modules on the home screen&lt;/h3&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/assets/screenshot-hero-grid.png&quot; width=&quot;32%&quot; alt=&quot;The micro-module dashboard&quot; /&gt; &lt;/p&gt; 
&lt;p&gt;The home screen can show a grid of &lt;strong&gt;micro-modules&lt;/strong&gt; -- small live panels like a clock, a quote from your highlights, your reading goal, the weather, or a launcher button. They&#39;re the same kinds of panels you can add to the &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#micro-modules&quot;&gt;start menu&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Micro-modules can appear in three independent places, each its own on/off checkbox under &lt;strong&gt;Bookshelf settings -&amp;gt; Micro modules&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;In hero area&lt;/strong&gt; -- a &lt;strong&gt;grid&lt;/strong&gt; entry at the right of the shelf menu swaps the book preview at the top of the screen for the grid (tap it to toggle between the two).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Full-screen button&lt;/strong&gt; -- a grid button sits in the footer opposite the start menu; tapping it opens the modules full-screen as a dashboard, with the status line across the top. Close it with the &lt;strong&gt;X&lt;/strong&gt;, a tap on empty space, or Back. The usual KOReader gestures (top-edge menu, edge swipes for brightness, corner actions) still work over it.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;In start menu&lt;/strong&gt; -- module cards appear in the &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#micro-modules&quot;&gt;start menu&lt;/a&gt; launcher alongside your other items.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;You can run any combination. The &lt;strong&gt;hero&lt;/strong&gt; and &lt;strong&gt;full-screen&lt;/strong&gt; views keep &lt;strong&gt;separate module lists&lt;/strong&gt;, so you can show different modules in each -- the full-screen list starts as a copy of your hero modules and then the two diverge as you edit them. Turning all three off disables micro-modules entirely (a quick way to rule them out when troubleshooting).&lt;/p&gt; 
&lt;p&gt;In either grid:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Long-press a module&lt;/strong&gt; to move it, make it wider or narrower (&lt;code&gt;-&lt;/code&gt; / &lt;code&gt;+&lt;/code&gt;), add another from the picker (&lt;strong&gt;+&lt;/strong&gt;), or remove it. In the hero grid you can also send a module to one of four &lt;strong&gt;pages&lt;/strong&gt;; the full-screen view shows everything at once, so it has no pages.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Swipe left/right&lt;/strong&gt; on the hero grid, or tap the in-grid arrows, to flip between pages.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Long-press the grid shelf&lt;/strong&gt; to reset the hero grid to its defaults, or to remove micro-modules from the hero area.&lt;/li&gt; 
 &lt;li&gt;On &lt;strong&gt;physical-button (D-pad) devices&lt;/strong&gt;, move the cursor across the grid with the arrow keys, open a module with the centre key, and long-press to edit it.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The grid packs square modules (clocks, launcher icons) tightly and lets text modules fill the rest of the row. Set the number of &lt;strong&gt;columns and rows&lt;/strong&gt; under &lt;strong&gt;menu -&amp;gt; Edit shelf size&lt;/strong&gt;. Hero micro-modules have their own entry under &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Text size&lt;/strong&gt; so you can scale the grid independently of the book hero.&lt;/p&gt; 
&lt;h3&gt;The shelf grid (the books)&lt;/h3&gt; 
&lt;p&gt;Each cover on the grid is either a book or a stack of books (for series, authors, etc.).&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Tap&lt;/strong&gt; a book to preview it in the hero card.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tap&lt;/strong&gt; the hero card cover to actually open the book.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Long-press&lt;/strong&gt; a book to open the book menu (see below).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Long-press&lt;/strong&gt; a stack to pin it to the shelf menu as its own shelf.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Swipe up&lt;/strong&gt; to collapse the hero and show more books at once.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Swipe down&lt;/strong&gt; on the hero to restore it; &lt;strong&gt;swipe down&lt;/strong&gt; on the shelf area to refresh the library after adding new books over USB or Calibre.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Every shelf shows a line of text under each cover -- the title by default. One setting drives it everywhere: &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Cover display -&amp;gt; Show text below covers&lt;/strong&gt; picks Title, Author, Series, or None (covers then use the full row). Its text size is &lt;strong&gt;Cover labels&lt;/strong&gt; under &lt;strong&gt;Settings -&amp;gt; Text size&lt;/strong&gt;. Books without covers already show their title and author on the placeholder itself, so those skip the extra label.&lt;/p&gt; 
&lt;p&gt;The full gesture reference is in &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#gestures-cheatsheet&quot;&gt;Gestures cheatsheet&lt;/a&gt; below; physical-key devices have their own reference in &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#keyboard-and-d-pad&quot;&gt;Keyboard and D-pad&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;List view&lt;/h3&gt; 
&lt;p&gt;Any shelf can be a text list instead of covers. Long-press the shelf and pick &lt;strong&gt;List&lt;/strong&gt; under Show as, or hold the page range in the footer to cycle whichever shelf you are looking at through covers, list and spines. Every shelf shows &lt;strong&gt;Covers&lt;/strong&gt; until you change it; the third option, &lt;strong&gt;Auto&lt;/strong&gt;, switches that shelf to a list whenever it is expanded or drilled into a folder or stack, and back to covers on the two rows under the hero. The same dialog sets how many &lt;strong&gt;rows&lt;/strong&gt; (1 to 12) and &lt;strong&gt;columns&lt;/strong&gt; (1 to 3) the list uses, and pinching the shelf fits one more or one fewer row.&lt;/p&gt; 
&lt;p&gt;Search results keep their own view -- covers unless you say otherwise. Long-press the &lt;strong&gt;Search results&lt;/strong&gt; pill (or hold the page number) while viewing results to pick Covers, List or Auto for them.&lt;/p&gt; 
&lt;p&gt;Rows are built from the same editable lines as the hero card: up to six per row, each with its own template, font, size, weight, slant, case and alignment, edited under &lt;strong&gt;menu &amp;gt; Settings &amp;gt; List view&lt;/strong&gt;. Tokens work in every line, so a row can carry a progress bar (&lt;code&gt;%bar&lt;/code&gt;, or &lt;code&gt;%bar{rel}&lt;/code&gt; to make its length reflect how long the book is), file size, dates, or anything else from the &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#token-cheatsheet&quot;&gt;Token cheatsheet&lt;/a&gt;. As rows get shorter, lines drop from the bottom up, so the title and author are the last to go.&lt;/p&gt; 
&lt;p&gt;Series, authors and folders draw as a fan of their members&#39; covers; OPDS subcatalogues become full-width buttons. The list&#39;s text size lives under &lt;strong&gt;Settings &amp;gt; Text size&lt;/strong&gt;.&lt;/p&gt; 
&lt;h3&gt;Spines&lt;/h3&gt; 
&lt;p&gt;The third style. Books stand edge-on on a wooden plank, the way they do on a real shelf, so a lot of them fit at once and the shelf reads as an object rather than a grid.&lt;/p&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/assets/screenshot-spines-shelf.png&quot; width=&quot;45%&quot; alt=&quot;A spine shelf with the hero card above it&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/assets/screenshot-spines-series.png&quot; width=&quot;45%&quot; alt=&quot;A full-screen spine shelf grouped by series, with section labels&quot; /&gt; &lt;/p&gt; 
&lt;p&gt;Each book is drawn from what Bookshelf already knows about it:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Width&lt;/strong&gt; comes from the page count, so a doorstop is visibly fatter than a novella. This is the one that benefits most from &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#page-counts&quot;&gt;Extract page counts&lt;/a&gt; below.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Height&lt;/strong&gt; comes from the cover&#39;s aspect ratio, so a tall paperback and a squat hardback differ.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Colour&lt;/strong&gt; is sampled from the cover art, darkened enough to keep the title legible along the spine.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Long-press a shelf and pick &lt;strong&gt;Spines&lt;/strong&gt; under Show as, or hold the page range in the footer to cycle to it. The same dialog has the settings below it.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Face out.&lt;/strong&gt; Some books turn to show their cover, the way a shop dresses a shelf. Choose which: favourites, the first in each series, what you are currently reading, all books, or none.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Grouping.&lt;/strong&gt; On a grouped shelf (series, authors, genres) there are no folders to drill into -- the groups are flattened onto the shelf and each run gets a label at the shelf&#39;s edge. Everything is out where you can see it.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Ornaments.&lt;/strong&gt; Drop SVG files into KOReader&#39;s &lt;code&gt;icons/bookshelf.ornaments&lt;/code&gt; folder and they turn up now and then in the gaps, standing on the plank like the books. A potted plant and a cactus are seeded there to start you off; delete them if you would rather not see them and they stay deleted. &lt;code&gt;template.svg&lt;/code&gt; carries the conventions in its comments: the bottom of the viewBox is the plank surface, &lt;code&gt;bookshelf:overhang=N&lt;/code&gt; lets part of the shape hang over the front edge, and the renderer is small, so bold solid shapes work and text, filters and masks do not.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Shelf plank colour&lt;/strong&gt; is under &lt;strong&gt;Settings -&amp;gt; Colours&lt;/strong&gt;. The lit top surface and the shaded front edge are both tinted from that one colour; the default is light oak.&lt;/p&gt; 
&lt;p&gt;Spines are not available for OPDS catalogues, which have no local page counts or cover art to measure.&lt;/p&gt; 
&lt;h3&gt;Folder styles (how groups look)&lt;/h3&gt; 
&lt;p&gt;Anything that stands for several books -- a series, an author, a folder, a collection -- is drawn as a group tile, and you choose how those look. &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Cover display -&amp;gt; Default folder style&lt;/strong&gt; sets it for the whole library:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Divider card&lt;/strong&gt; -- a cardboard tab with the group&#39;s name on it. The default.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Ribbon&lt;/strong&gt; -- the first book&#39;s cover with the name on a band across the bottom.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Book stack&lt;/strong&gt; -- a small pile of the covers inside.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Collage&lt;/strong&gt; -- a grid of several covers from the group.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Text&lt;/strong&gt; -- the name alone, no artwork.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;None&lt;/strong&gt; -- the first book&#39;s cover, unadorned.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Individual shelves can differ. Long-press a shelf -&amp;gt; &lt;strong&gt;Folder style&lt;/strong&gt; gives that one shelf its own look, and the list leads with &lt;strong&gt;Default setting&lt;/strong&gt; to put it back to following the library. The picker stays open while you try styles and the shelf redraws behind it, so you can compare them rather than guessing. (OPDS catalogue shelves have no such row -- their category tiles are always text; see &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#opds-catalogues&quot;&gt;OPDS catalogues&lt;/a&gt;.)&lt;/p&gt; 
&lt;p&gt;You can also give a specific folder or stack a picture of your own -- see &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#custom-images-for-folders-and-stacks&quot;&gt;Custom images for folders and stacks&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Folder shortcuts and jump-to-folder gestures&lt;/h3&gt; 
&lt;p&gt;If a KOReader folder shortcut, the &quot;go to parent folder&quot; or &quot;go home&quot; gesture, or any plugin points the file browser at a folder while Bookshelf is open, Bookshelf follows into that folder rather than leaving you on the previous shelf. The folder is added to the breadcrumb trail, so a back-swipe returns you to where you were. Opening an actual book still goes straight to the reader as usual.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;The start menu&lt;/h2&gt; 
&lt;p align=&quot;center&quot;&gt; &lt;img src=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/assets/screenshot-start-menu.png&quot; width=&quot;32%&quot; alt=&quot;The start menu open over the shelf&quot; /&gt; &lt;img src=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/assets/screenshot-micromodules.png&quot; width=&quot;32%&quot; alt=&quot;The micro-module picker&quot; /&gt; &lt;/p&gt; 
&lt;p&gt;Tap the menu button in the bottom corner of the shelf, in line with the page arrows, to open a popup launcher you build yourself. Think of it as a Start menu for your home screen.&lt;/p&gt; 
&lt;p&gt;Each item can be:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;A &lt;strong&gt;KOReader action&lt;/strong&gt; -- history, the reading calendar, Wi-Fi, night mode, sleep, frontlight, and anything else from KOReader&#39;s action list.&lt;/li&gt; 
 &lt;li&gt;A &lt;strong&gt;menu action&lt;/strong&gt; -- capture any item from KOReader&#39;s own menus and replay it with one tap. Browse to the item, tap &lt;strong&gt;Add as shortcut&lt;/strong&gt;, and it becomes a menu entry; toggle items (like Wi-Fi) show their current on/off state.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Another plugin&lt;/strong&gt; -- launch any installed plugin that has a menu entry (games included).&lt;/li&gt; 
 &lt;li&gt;A &lt;strong&gt;Bookshelf action&lt;/strong&gt; -- the full Bookshelf menu (settings, the book detail editor, collections, and the rest), or exit Bookshelf.&lt;/li&gt; 
 &lt;li&gt;A &lt;strong&gt;folder&lt;/strong&gt; -- group items together; it flies out to the side when you tap it.&lt;/li&gt; 
 &lt;li&gt;A &lt;strong&gt;micro-module&lt;/strong&gt; -- a small live panel (see below).&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Building and editing it.&lt;/strong&gt; Long-press any item for &lt;strong&gt;rename&lt;/strong&gt;, &lt;strong&gt;change icon&lt;/strong&gt;, &lt;strong&gt;move up / down&lt;/strong&gt;, &lt;strong&gt;move into / out of a folder&lt;/strong&gt;, &lt;strong&gt;show in&lt;/strong&gt; (home screen, reader, or both), &lt;strong&gt;delete&lt;/strong&gt;, and &lt;strong&gt;add new menu item&lt;/strong&gt;. Adding walks you through the categories above; the icon picker is a built-in glyph grid (no extra plugins needed). Folders open downward from the row you tapped, overlapping the menu so they read as connected.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Position.&lt;/strong&gt; Under &lt;strong&gt;Bookshelf settings -&amp;gt; Start menu&lt;/strong&gt; you can put the button on the &lt;strong&gt;left&lt;/strong&gt;, the &lt;strong&gt;right&lt;/strong&gt;, or turn it &lt;strong&gt;off&lt;/strong&gt;, and set a &lt;strong&gt;Minimum start menu width&lt;/strong&gt; if the popup feels cramped. It works with touch and with physical-button (D-pad) devices.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;While reading.&lt;/strong&gt; Under &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Advanced -&amp;gt; While reading&lt;/strong&gt;, turn on &lt;strong&gt;Show menu button&lt;/strong&gt; to keep a small launcher button in the reader&#39;s bottom corner. Tapping it opens the same start menu over your book, so you can jump to a shelf, a collection, or another plugin and tap straight back in. &lt;strong&gt;Show micro-modules button&lt;/strong&gt; adds the full-screen grid button to the reader too. &lt;strong&gt;Launcher button position and size…&lt;/strong&gt; opens a live canvas for placing them: pick the side, the screen edge they sit against, how far along it, and how big -- so they can hide in whichever corner your books&#39; margins leave free. The start menu and module view open from wherever the buttons actually are. By default each menu item shows both on the home screen and while reading; use &lt;strong&gt;show in&lt;/strong&gt; (above) to limit one to the reader or the home screen -- handy for keeping the reading menu short.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;By gesture (no button needed).&lt;/strong&gt; Prefer not to show a button? KOReader&#39;s &lt;strong&gt;Gesture manager&lt;/strong&gt; (wrench -&amp;gt; Taps and gestures -&amp;gt; Gesture manager) lists Bookshelf&#39;s assignable actions, including &lt;strong&gt;Bookshelf: open start menu&lt;/strong&gt;, &lt;strong&gt;Bookshelf: open micro-modules&lt;/strong&gt;, and &lt;strong&gt;Bookshelf: go to home screen&lt;/strong&gt; (drop whatever you&#39;re doing and land on your home shelf). Bind any of them to a gesture -- a corner tap, a swipe, a multiswipe -- and it works in the reader (or the library) whether or not the launcher buttons are shown. Because a bound gesture is a deliberate request, the start-menu and micro-module actions work even when those features are set to &lt;strong&gt;Off&lt;/strong&gt;.&lt;/p&gt; 
&lt;h3&gt;Micro-modules&lt;/h3&gt; 
&lt;p&gt;Micro-modules are small live panels. Add them to the start menu through &lt;strong&gt;Add new menu item -&amp;gt; Bookshelf micro-module…&lt;/strong&gt;, or to the &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#micro-modules-on-the-home-screen&quot;&gt;home-screen grid&lt;/a&gt;. The ones that ship with Bookshelf:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Clock&lt;/strong&gt; -- digital (12- or 24-hour) or analogue.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Quote of the day&lt;/strong&gt; -- a highlight drawn from your own books, refreshed daily or on every open. Tapping it can roll a new quote, open that book&#39;s bookmark list, or open the book at the highlight.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Reading goal&lt;/strong&gt; -- progress towards a daily reading target.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Reading stats&lt;/strong&gt; -- time and pages read today and this week (needs the &lt;code&gt;statistics&lt;/code&gt; plugin).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Reading streak&lt;/strong&gt; -- your current and best reading streak, in days and weeks (needs the &lt;code&gt;statistics&lt;/code&gt; plugin).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Random book&lt;/strong&gt; -- rolls an unread book from the current shelf (or your whole library) into the hero card; tap the dice for another.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Shelf count&lt;/strong&gt; -- how many books are on the current shelf.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Countdown&lt;/strong&gt; -- &quot;N days until 
  &lt;your label&gt;
   &quot; for a date you pick; counts up (&quot;N days since…&quot;) once the date has passed. Add it more than once for several dates, each with its own label.
  &lt;/your&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Weather&lt;/strong&gt;, &lt;strong&gt;On this day&lt;/strong&gt;, &lt;strong&gt;Trivia&lt;/strong&gt;, &lt;strong&gt;Daily fun&lt;/strong&gt; (jokes, facts and riddles) -- live content from the internet.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Action&lt;/strong&gt; -- a launcher card that runs a plugin, a KOReader action, or a Bookshelf action, with your own icon and an optional label.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Each module can carry its own settings (reached via &lt;strong&gt;Module settings…&lt;/strong&gt; when you long-press it). Modules that need the internet show their data source in the picker rather than fetching while you browse. Modules are a small self-contained format: if you write a little Lua you can add your own by dropping a file into the plugin&#39;s &lt;code&gt;micromodules/&lt;/code&gt; folder, or into &lt;code&gt;koreader/settings/bookshelf/micromodules/&lt;/code&gt; to have it survive plugin updates. A bad one is skipped rather than breaking the menu. See &lt;code&gt;micromodules/README.md&lt;/code&gt; for the contract.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;The book menu (long-press a cover)&lt;/h2&gt; 
&lt;p&gt;Long-press any cover on the shelf or in the hero card -- or tap a book&#39;s &lt;strong&gt;+N&lt;/strong&gt; tags pill -- to open the book detail popup, a tabbed window with everything about the book. The header shows a cover thumbnail, the title and author, and (when the book has bookmarks or highlights) a &lt;strong&gt;N bookmarks ›&lt;/strong&gt; link in the top-right corner; tap it to open KOReader&#39;s bookmark browser for that book and jump into it. Along the bottom sit &lt;strong&gt;Close&lt;/strong&gt;, two &lt;strong&gt;zoom&lt;/strong&gt; buttons (magnifier icons) for text size, and &lt;strong&gt;Open&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;There are five tabs:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Description&lt;/strong&gt; -- the book&#39;s blurb. When a Hardcover description is cached, a shelf menu switches between the embedded and Hardcover text.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Reviews&lt;/strong&gt; -- spoiler-free Hardcover reviews for a linked book, cached so they reopen offline once fetched (see &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#hardcover-enrichment&quot;&gt;Hardcover enrichment&lt;/a&gt;). Only shown for linked books.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tags&lt;/strong&gt; -- &lt;strong&gt;navigation pills&lt;/strong&gt; grouped into Author, Series, Collections, Genres, and Folder. Tap any pill to drill into that shelf; each section has an &lt;strong&gt;Edit…&lt;/strong&gt; button for changing membership (this is where you add or remove the book from collections, edit genres, and so on).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Edit&lt;/strong&gt; -- the book&#39;s actions:&lt;/li&gt; 
&lt;/ul&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Button&lt;/th&gt; 
   &lt;th&gt;What it does&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Unopened / Reading / On hold / Finished&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Reading status. Tap to change. Unopened clears progress and drops the book from Recent without touching highlights or bookmarks.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Favorite&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Toggle the book in and out of Favorites.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Your rating&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Set a 1-to-5 star rating, or clear it.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Show info&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;KOReader&#39;s built-in book info dialog.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Refresh metadata&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Re-read the cover and metadata from the file (useful after editing metadata externally).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Move…&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Move the file to another folder on the device, via a folder picker. Reading progress, bookmarks, highlights, custom covers, and Hardcover links all follow the book. (Disabled while the book is open in the reader.)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Remove from history&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Drop the book from Recent without changing anything else on disk.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Reset book data…&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;A wider purge with checkboxes for progress, bookmarks, highlights, notes, custom cover, and custom metadata.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Delete&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Permanently remove the file from disk (with a confirmation).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Link… / Edit…&lt;/strong&gt; (Hardcover)&lt;/td&gt; 
   &lt;td&gt;Shown only when &lt;code&gt;hardcoverapp.koplugin&lt;/code&gt; is enabled. Link the book to a Hardcover edition, or edit an existing link. See &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#hardcover-enrichment&quot;&gt;Hardcover enrichment&lt;/a&gt;.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;If another plugin adds its own entries to KOReader&#39;s file long-press menu (for example &quot;Open Incognito&quot;, or an AI assistant&#39;s &quot;About this book&quot;), those appear in the Edit tab too, so you can use them straight from Bookshelf.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Cover&lt;/strong&gt; (last tab) -- pick the book&#39;s cover from a paginated grid of candidates: covers already stored for the book, an image from your device (&lt;strong&gt;Choose from device&lt;/strong&gt;), or an &lt;strong&gt;online search&lt;/strong&gt; (Google Books, Open Library, and Hardcover for a linked book). Each candidate shows its source and resolution. Tap one to set it as the cover -- the shelf updates and the chosen image is saved as KOReader&#39;s standard custom cover, so its file browser shows it too. The book&#39;s own embedded cover appears in the grid as well, so you can revert by tapping it; a cover you&#39;d set yourself is preserved.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Text size.&lt;/strong&gt; The footer&#39;s &lt;strong&gt;zoom&lt;/strong&gt; buttons resize the current tab&#39;s text, and each tab remembers its own size -- so you can enlarge a long Description or the Reviews without also inflating the Edit tab&#39;s buttons or the Tags pills. To resize the &lt;strong&gt;tab labels&lt;/strong&gt; themselves (handy if Description/Reviews/Tags/Edit wrap onto a second row on a small screen), use &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Text size -&amp;gt; Modal tabs&lt;/strong&gt;. (With Reviews present that&#39;s up to five tabs -- Description, Reviews, Tags, Edit, Cover -- so this helps most on a small screen.)&lt;/p&gt; 
&lt;p&gt;Long-pressing a series, author, genre, collection, format, rating, or folder stack instead opens a small group menu: &lt;strong&gt;Pin to shelf menu&lt;/strong&gt; (the fastest way to turn a stack you&#39;ve drilled into into a permanent shelf), &lt;strong&gt;Set … image…&lt;/strong&gt; / &lt;strong&gt;Clear … image&lt;/strong&gt; (see &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#custom-images-for-folders-and-stacks&quot;&gt;Custom images&lt;/a&gt;), &lt;strong&gt;Select N&lt;/strong&gt; to start a bulk selection of the group&#39;s books, and -- for real folders -- &lt;strong&gt;Move folder…&lt;/strong&gt; and &lt;strong&gt;Rename folder…&lt;/strong&gt;, which relocate or rename the folder on disk with every book&#39;s progress, bookmarks, and covers following along.&lt;/p&gt; 
&lt;p&gt;With a bulk selection active (from a group menu&#39;s &lt;strong&gt;Select N&lt;/strong&gt;, or &lt;strong&gt;Select&lt;/strong&gt; in a book&#39;s Edit tab), tapping covers adds or removes them, and the selection bar offers batch actions including &lt;strong&gt;Move to folder…&lt;/strong&gt; for moving several books at once. The bulk menu also has &lt;strong&gt;Select all in this shelf&lt;/strong&gt;, which takes every book the current shelf holds across all its pages -- the way to select a shelf built from filters, which has no folder or stack tile to long-press. There&#39;s an assignable gesture for it too (&lt;strong&gt;Bookshelf: select all books in this shelf&lt;/strong&gt;).&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Collections&lt;/h2&gt; 
&lt;p&gt;Collections are named lists of books, and Bookshelf uses KOReader&#39;s built-in collection system, so anything you collect in Bookshelf shows up in KOReader&#39;s collection menu (and vice versa). Two collections come ready:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Favorites&lt;/strong&gt; -- the built-in starred shelf. Always present; can&#39;t be renamed or deleted.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;To Be Read&lt;/strong&gt; -- a reading pile for things you haven&#39;t started yet.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Open &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Library &amp;amp; search -&amp;gt; Manage collections…&lt;/strong&gt; to add new collections, rename or delete existing ones, and &lt;strong&gt;pin&lt;/strong&gt; any collection to your shelf menu as a dedicated shelf.&lt;/p&gt; 
&lt;p&gt;To put a book into a collection, open its popup (long-press the cover), go to the &lt;strong&gt;Tags&lt;/strong&gt; tab and tap &lt;strong&gt;Edit…&lt;/strong&gt; in the Collections section. Tick the collections you want, then Save. The Collections pills update immediately to reflect what&#39;s changed.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;OPDS catalogues&lt;/h2&gt; 
&lt;p&gt;Bookshelf can browse online book catalogues (OPDS) as ordinary shelves -- Project Gutenberg, Standard Ebooks, Internet Archive, and any other catalogue you point it at -- so you can find and download books without leaving your home screen.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Setting up.&lt;/strong&gt; Add a shelf (long-press any shelf -&amp;gt; &lt;strong&gt;+ Add new shelf&lt;/strong&gt;) and pick &lt;strong&gt;OPDS catalog…&lt;/strong&gt; as its source. The picker lists the standard public catalogues out of the box, and it&#39;s also where you manage the list: &lt;strong&gt;Add catalog…&lt;/strong&gt; sits in the footer, and a long-press on any catalogue offers &lt;strong&gt;Edit&lt;/strong&gt; and &lt;strong&gt;Delete&lt;/strong&gt;. A catalogue is just a name and a URL, plus an optional username and password for ones that need a login. If you also use KOReader&#39;s own OPDS plugin the two share one catalogue list, so anything added in either place appears in both -- but Bookshelf works fine with that plugin disabled.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Browsing.&lt;/strong&gt; A catalogue renders like any other shelf. Its categories appear as folder tiles -- tap to drill in, back-swipe to come back out -- and some catalogues offer extra filters (language, category) as tiles at the start of the shelf. Category tiles always use the plain text style, whatever folder style the rest of your shelves are set to: they&#39;re places to go rather than piles of books you own, and a catalogue&#39;s own artwork rides along on them where it sends any.&lt;/p&gt; 
&lt;p&gt;Covers download in the background as you browse, a few at a time, and appear as they land; until one arrives its book shows a placeholder with the title and author. Nothing is fetched for pages you never look at.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Previewing and downloading.&lt;/strong&gt; Tap a book to preview it in the hero card -- the description comes straight from the catalogue, and the cover is fetched in the background and appears in the hero and on the shelf as it lands. Tap the same cover again (or the hero) for the download view: available formats are grouped under &lt;strong&gt;Recommended&lt;/strong&gt; and &lt;strong&gt;Alternatives&lt;/strong&gt;, with the best format for KOReader listed first, and &lt;strong&gt;Read now&lt;/strong&gt; opens the book as soon as it arrives. Downloads are saved into your library folder -- by default wherever KOReader&#39;s own download folder points, or your home folder if that isn&#39;t set. Each catalogue shelf can file its downloads somewhere of its own instead: long-press the shelf to edit it and use &lt;strong&gt;Saves to&lt;/strong&gt;, so (say) Gutenberg classics and your own server&#39;s books land in different folders. The folder has to sit inside your home folder, otherwise the books would never appear on your shelves. The catalogue&#39;s description stays with the book after download, so the hero and book menu keep showing it.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Big catalogues, and finding the end.&lt;/strong&gt; Large catalogues load as you go: the page indicator reads &quot;page N of M+&quot;, where the &lt;strong&gt;+&lt;/strong&gt; means nobody knows yet how far it goes, and paging forward pulls the next batch. Catalogues are not reliable about their own size -- most don&#39;t say, and at least one advertises a round number it never actually serves -- so the count is what&#39;s loaded rather than a promise.&lt;/p&gt; 
&lt;p&gt;To find the real end, tap the &lt;strong&gt;last-page&lt;/strong&gt; chevron. It walks the whole category, counting as it goes, and lands you on the last page with books on it. It can run for a while on a big category, so it tells you where it&#39;s up to and a tap stops it -- and stopping keeps everything already loaded, landing you on the last page of that.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Offline, and coming back.&lt;/strong&gt; Everything a catalogue has shown you is kept on the device, so a catalogue you&#39;ve browsed opens straight away and keeps working with no connection. By default it only goes back to the server when you ask it to, with a swipe down -- so paging deep into a category is work you keep. If you&#39;d rather a catalogue went stale on its own, long-press its shelf and use &lt;strong&gt;Catalog settings -&amp;gt; Refresh&lt;/strong&gt; to pick an age (five minutes through a week, or every time you open it). The same dialog has &lt;strong&gt;Saves to&lt;/strong&gt; for where that catalogue&#39;s downloads land.&lt;/p&gt; 
&lt;p&gt;Where you were is remembered: restart KOReader inside a drilled category and you come back to it, on the page you left, provided it&#39;s still cached. If it isn&#39;t, you land on the catalogue&#39;s front page rather than on an empty shelf -- getting there would mean a download you didn&#39;t ask for.&lt;/p&gt; 
&lt;p&gt;Catalogues that only &lt;em&gt;lend&lt;/em&gt; DRM-protected books (library loans) can&#39;t be used -- KOReader has no DRM support -- so lending-only categories show &quot;No downloadable titles&quot; rather than books that wouldn&#39;t open.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Kindle library&lt;/h2&gt; 
&lt;p&gt;On a Kindle, Bookshelf can show the books in your Kindle&#39;s own library as an ordinary shelf, alongside the books you side-load yourself. It needs the &lt;strong&gt;Kindle Virtual Library&lt;/strong&gt; plugin (&lt;a href=&quot;https://github.com/kaikozlov/kindle.koplugin&quot;&gt;kindle.koplugin&lt;/a&gt;) installed: a Kindle book has to be converted before KOReader can read it, and that plugin is what does the converting. Without it the source isn&#39;t offered at all.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Setting up.&lt;/strong&gt; Add a shelf (long-press any shelf -&amp;gt; &lt;strong&gt;+ Add new shelf&lt;/strong&gt;) and pick &lt;strong&gt;Kindle Virtual Library&lt;/strong&gt; as its source. The option only appears on a Kindle that has the plugin installed, so it stays out of the way everywhere else.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;What you get.&lt;/strong&gt; Your Kindle books with their own cover art, sorted however you like -- title, author, progress, when you last opened them, or anything else the sort picker offers. Titles that the Kindle derived from filenames (&lt;code&gt;01. The Colour of Magic - Terry Pratchett&lt;/code&gt;) are tidied up, with a trailing or leading author name removed only where the Kindle&#39;s own records confirm that is who wrote it; an unrecognised name is left alone rather than guessed at. Series numbering is kept, so a numbered series still reads in order. A book with no cover art gets Bookshelf&#39;s own placeholder, showing title and author, rather than the blank &quot;No image available&quot; card the Kindle stores for it.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Reading progress.&lt;/strong&gt; The progress shown on a cover comes from the Kindle&#39;s own record until you have read the book in KOReader, after which KOReader&#39;s is used. That is what the shelf &lt;em&gt;displays&lt;/em&gt;, not where the book opens: the Kindle&#39;s percentage is never handed to KOReader as a position, so opening a Kindle book for the first time starts at the beginning however far through it you were on the Kindle. The status marker follows the display rule, which means a book you finished on the Kindle is marked finished even though KOReader has never opened it, while long-pressing it still reports its reading status as unopened -- that dialog sets &lt;em&gt;KOReader&#39;s&lt;/em&gt; status, and KOReader has not read it. All of which is to say the Kindle&#39;s record and KOReader&#39;s are kept apart rather than merged.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;The first open.&lt;/strong&gt; The first time you open a Kindle book it has to be converted. That takes a few minutes, the screen will not respond while it works, and it cannot be stopped once started -- so Bookshelf asks first, and only asks once per book. Every open after that is immediate, because the converted copy is kept.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Books that will not open.&lt;/strong&gt; Older MOBI and AZW purchases are protected in a way no KOReader plugin can undo, and &lt;code&gt;.azw3&lt;/code&gt; files cannot be read by KOReader at all, protected or not. Both say so when you tap them, naming the format, rather than dropping you into the file browser. KFX books -- most of a modern Kindle library -- are unaffected.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Filters and sorts.&lt;/strong&gt; A Kindle shelf takes filters and sort priorities like any other, and its filter pickers describe &lt;em&gt;its&lt;/em&gt; books: the genres, formats, languages and collections offered are the ones your Kindle library actually has, so nothing on the list matches nothing on the shelf. A new Kindle shelf starts with the formats KOReader cannot open already filtered out, so the shelf is not padded with books that can only refuse; if you would rather see them, clear that under the shelf&#39;s &lt;strong&gt;Filters -&amp;gt; Format&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Counted with everything else.&lt;/strong&gt; Your Kindle books are part of your library, so they count towards the Shelf size module and the &lt;code&gt;%books_read&lt;/code&gt; token, and a book you finished on the Kindle counts as finished.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Hardcover.&lt;/strong&gt; Kindle books can be linked to Hardcover like any other, individually or through &lt;strong&gt;Auto-link all books&lt;/strong&gt;, which picks up covers, ratings and genres for them. Genres matter twice over here: once linked, a Kindle book&#39;s genres work in genre filters and on genre shelves, which the Kindle&#39;s own records cannot supply.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Searching.&lt;/strong&gt; Once you have a Kindle shelf, searching your library searches your Kindle books too. And searching from an OPDS catalogue now offers both: &lt;strong&gt;Search my library&lt;/strong&gt; alongside the catalogue&#39;s own search, so browsing a catalogue no longer means leaving it to check whether you already own something.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Read-only.&lt;/strong&gt; The book menu leaves out Move, Delete and Reset for these books. The files belong to your Kindle&#39;s library rather than being files you put on the device, and deleting one would really remove the book.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Kobo library (beta)&lt;/h2&gt; 
&lt;p&gt;The Kobo equivalent of the Kindle shelf above: your Kobo&#39;s own virtual library, the books managed by the Kobo store, shown as an ordinary shelf. Turn it on under &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Advanced -&amp;gt; BETA: Kobo library shelf&lt;/strong&gt; and a &lt;strong&gt;Kobo&lt;/strong&gt; shelf appears.&lt;/p&gt; 
&lt;p&gt;It needs &lt;a href=&quot;https://github.com/OGKevin/kobo.koplugin&quot;&gt;OGKevin&#39;s kobo.koplugin&lt;/a&gt;, which is what actually holds that library, and it only appears on a Kobo. If the plugin is missing or its internals have moved, the shelf simply does not show rather than erroring.&lt;/p&gt; 
&lt;p&gt;The shelf is &lt;strong&gt;read-only&lt;/strong&gt;: covers and opening the books are the other plugin&#39;s job, so Bookshelf shows what it finds and hands taps straight back. Filters, sort priorities and the filter pickers work as they do on any other shelf, and as with the Kindle shelf the pickers describe the Kobo library&#39;s own books.&lt;/p&gt; 
&lt;p&gt;It is marked beta for an honest reason: it was built without a Kobo to hand, against unit tests and one Kobo-owning reporter. It should behave, but if something looks wrong, that is worth an issue.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Hardcover enrichment&lt;/h2&gt; 
&lt;p&gt;If you also use &lt;code&gt;hardcoverapp.koplugin&lt;/code&gt;, Bookshelf can link books to Hardcover and cache a small amount of Hardcover metadata for display. Everything Hardcover follows that plugin&#39;s state: it all appears only while the plugin is installed and enabled, so it stays out of the way if you don&#39;t use Hardcover. Disable or remove the plugin and the &lt;strong&gt;Hardcover enrichment&lt;/strong&gt; menu (in the bookshelf menu, above Settings) disappears and linked books revert to their own ratings, covers, metadata and descriptions. Nothing is lost -- the cached data stays on disk and comes back if you re-enable the plugin.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Linking a book.&lt;/strong&gt; Open a book&#39;s popup (long-press its cover) and go to the &lt;strong&gt;Edit&lt;/strong&gt; tab; with the plugin enabled, a Hardcover row sits below File &amp;amp; metadata. &lt;strong&gt;Link…&lt;/strong&gt; (or &lt;strong&gt;Edit…&lt;/strong&gt; once linked) opens the link menu:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Auto link&lt;/strong&gt; -- links without searching, using identifiers embedded in the EPUB (an ISBN, or a Hardcover id/edition baked into the file). The most specific identifier wins (a Hardcover edition, then ISBN, then a Hardcover book/slug). If the file carries no usable identifier, Auto link falls back to a best-guess search by title and author.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Manual link…&lt;/strong&gt; -- searches Hardcover by title and author and lets you pick the right book.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Select edition…&lt;/strong&gt; -- once linked, choose a specific edition (e.g. to get the right cover or page count).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Use Hardcover image&lt;/strong&gt; / &lt;strong&gt;Use Hardcover description&lt;/strong&gt; -- per-book toggles (shown once linked) that override the book&#39;s own cover or description with Hardcover&#39;s. See below for how these are set automatically.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Clear link&lt;/strong&gt; -- remove the Hardcover link.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;When a book is linked, its popup gains a &lt;strong&gt;Reviews&lt;/strong&gt; tab (and the hero rating row&#39;s &quot;N reviews&quot; opens the popup straight to it). Reviews are filtered to spoiler-free ones, and cached, so they reopen offline once fetched.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Linking the whole library at once.&lt;/strong&gt; &lt;strong&gt;Hardcover enrichment -&amp;gt; Auto-link all books&lt;/strong&gt; links every unlinked book in one pass, fetching each match&#39;s details (description, cover, rating) as it goes. You pick how to match:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Exact match&lt;/strong&gt; -- uses an embedded ISBN or Hardcover id. Fast, and only links books that carry one.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Best guess&lt;/strong&gt; -- searches by title and author and picks the most confident match. Slower, but catches books with no embedded id.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;It contacts Hardcover at about one book per second with cancellable progress, and shows a report at the end listing what was linked, what wasn&#39;t matched, and what had no identifier to try.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Choosing covers and descriptions.&lt;/strong&gt; Each linked book has its own &lt;strong&gt;Use Hardcover image&lt;/strong&gt; and &lt;strong&gt;Use Hardcover description&lt;/strong&gt; toggles. When you link a book, Bookshelf sets sensible defaults once: it adopts the Hardcover description if the book has none of its own, and the Hardcover cover if the book has no embedded cover or its cover is lower resolution than Hardcover&#39;s. After that the per-book toggle is yours -- it&#39;s never changed again by a later refresh. Turning &lt;strong&gt;Use Hardcover image&lt;/strong&gt; on saves the Hardcover cover into the book&#39;s sidecar (&lt;code&gt;.sdr&lt;/code&gt;) folder as a custom cover, so KOReader&#39;s own file browser shows it too; turning it off restores whatever was there before -- a cover you&#39;d set yourself is preserved, never overwritten.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Ratings and metadata.&lt;/strong&gt; Two more options sit in the &lt;strong&gt;Hardcover enrichment&lt;/strong&gt; menu:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Show Hardcover ratings in hero&lt;/strong&gt; -- the hero rating row shows the cached public Hardcover rating instead of KOReader&#39;s local one (and turns the rating row on).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Use Hardcover metadata&lt;/strong&gt; -- for linked books, shows Hardcover&#39;s title, author, series and genres in place of the book&#39;s own (a clean switch, no merging). This feeds sorting, search and series grouping for those books; non-linked books are untouched. &lt;strong&gt;Hardcover genres used&lt;/strong&gt; caps how many of a book&#39;s genres become tag pills and genre stacks. Covers and descriptions stay under their per-book toggles. The metadata is always cached, so this only decides whether it&#39;s used.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Managing the cache.&lt;/strong&gt; &lt;strong&gt;Hardcover enrichment -&amp;gt; Manage Hardcover data&lt;/strong&gt; holds &lt;strong&gt;Refresh ratings only&lt;/strong&gt;, &lt;strong&gt;Refresh linked book details&lt;/strong&gt;, &lt;strong&gt;Clear cache (keeps links)&lt;/strong&gt;, and &lt;strong&gt;Remove all Hardcover data&lt;/strong&gt; (unlinks everything and restores any covers Bookshelf installed).&lt;/p&gt; 
&lt;p&gt;The two refreshes differ in cost. &lt;strong&gt;Refresh ratings only&lt;/strong&gt; fetches every linked book&#39;s rating in one batched request, so it takes seconds even on a large library, and ratings are the thing that actually drifts day to day. &lt;strong&gt;Refresh linked book details&lt;/strong&gt; re-fetches the rarely-changing fields as well -- author, genres, series, description, page count -- one rate-limited request per book, so minutes rather than seconds, and cancellable. Reach for it after an upgrade asks for it, or when cached data looks stale.&lt;/p&gt; 
&lt;p&gt;Bookshelf does not rewrite EPUB files. Descriptions, ratings and the other cached metadata live in Bookshelf&#39;s own cache; a chosen Hardcover cover is stored as KOReader&#39;s standard custom cover in the book&#39;s &lt;code&gt;.sdr&lt;/code&gt; folder. Network calls only happen from explicit actions (linking, refreshing ratings, fetching reviews); normal shelf rendering reads only the local cache.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Layout&lt;/h2&gt; 
&lt;p&gt;Open &lt;strong&gt;menu -&amp;gt; Edit shelf size…&lt;/strong&gt; for a live overlay that resizes the grid without leaving the home screen. Two nudge rows:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Columns&lt;/strong&gt; -- how many covers fit across, which also sets how large they render.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Rows&lt;/strong&gt; -- how many rows of them the shelf gets.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Together they decide how the screen is divided: the shelf takes what these two ask for and the hero card above fills whatever is left. List and spine shelves use that same space with their own row counts, which is why the shelf previews as covers while the overlay is open.&lt;/p&gt; 
&lt;p&gt;The layout auto-fits your screen and orientation, so the same settings adapt between portrait and landscape. Changes preview in real time behind the overlay; &lt;strong&gt;Accept&lt;/strong&gt; keeps them, &lt;strong&gt;Cancel&lt;/strong&gt; reverts. Pinching the shelf itself is the quicker way to the same thing, and on list and spine shelves it moves in half steps, so four rows can become three rather than jumping to two.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Animations&lt;/h2&gt; 
&lt;p&gt;On e-ink, Bookshelf can play a brief page-wipe animation on transitions so they read as motion rather than an abrupt refresh. Two independent settings under &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Behavior&lt;/strong&gt; control them:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Page turn animation&lt;/strong&gt; -- shelf page turns (the new page sweeps in from the side) and shelf-bar paging (the shelf row wipes across as you move between pages).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Start menu animation&lt;/strong&gt; -- the start menu reveals upward as it opens and wipes back down as it closes. It repaints a taller area than the page wipe and can look choppy on some panels, particularly while reading, so it&#39;s kept separate: keep one and turn the other off if you like.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Each is set to &lt;strong&gt;Off&lt;/strong&gt;, &lt;strong&gt;Fast&lt;/strong&gt;, &lt;strong&gt;Medium&lt;/strong&gt;, or &lt;strong&gt;Slow&lt;/strong&gt; on its own -- slower is smoother but takes a little longer on older panels. The effect is e-ink only: on LCD/OLED screens the refreshes complete instantly, so nothing is shown and the setting has no visible effect there.&lt;/p&gt; 
&lt;p&gt;A separate &lt;strong&gt;Cover opening effect&lt;/strong&gt; toggle (under &lt;strong&gt;Settings -&amp;gt; Cover display&lt;/strong&gt;) briefly flexes a book&#39;s cover open as it launches. It&#39;s purely cosmetic and on by default; turn it off for an instant, plain open.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Instant book close&lt;/h2&gt; 
&lt;p&gt;Leaving a book drops you back to Bookshelf straight away, without waiting for the book to close. The actual close happens at the next quiet moment -- when you open another book, after about half a minute of inactivity, or when you leave Bookshelf -- so browsing never has to wait for it. Until then, going straight back into the same book is instant too.&lt;/p&gt; 
&lt;p&gt;This works however you leave a book: the reader&#39;s top-menu &lt;strong&gt;File browser&lt;/strong&gt; button, a &lt;strong&gt;File browser&lt;/strong&gt; gesture, or the quick menu.&lt;/p&gt; 
&lt;p&gt;It&#39;s on by default. Turn it off under &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Advanced -&amp;gt; Performance tweaks -&amp;gt; Instant book close&lt;/strong&gt; to close books fully before Bookshelf appears, as before. (Leaving a book you read in a different orientation to the shelf always closes fully, so the shelf returns to its own orientation.)&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Cover indicators&lt;/h2&gt; 
&lt;p&gt;Each cover can show small badges and bars at the corners. Configure them under &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Cover display&lt;/strong&gt;:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Show reading bookmarks&lt;/strong&gt; -- a bookmark mark on books you&#39;re partway through.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Show completed book badge&lt;/strong&gt; -- a check-mark pill at the bottom-left of finished books.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Show progress bars&lt;/strong&gt; -- a thin progress bar above the bottom edge for in-progress books.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Show page count&lt;/strong&gt; -- a page-count pill in the bottom-right (&quot;123 p&quot;). (For EPUBs it works once you&#39;ve opened the book at least once.)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Show series #&lt;/strong&gt; -- a &quot;#3&quot; badge on covers in a series. Tri-state: Always, Within series folder (so mixed shelves stay clean), or Never.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The colours of these elements are set separately under &lt;strong&gt;Settings -&amp;gt; Colors&lt;/strong&gt; (see below).&lt;/p&gt; 
&lt;p&gt;The same &lt;strong&gt;Cover display&lt;/strong&gt; menu also has &lt;strong&gt;True cover aspect ratio&lt;/strong&gt;. Off by default, Bookshelf fits every cover to a uniform book rectangle; turn this on to show each cover at its real shape instead. Covers keep the same width but vary in height -- on the shelf they sit along the bottom shelf line, in the hero area they align to the top -- so wide or square covers stop being cropped or stretched.&lt;/p&gt; 
&lt;p&gt;Two more rows in that menu change how a cover is drawn rather than how it is sized. &lt;strong&gt;Square cover corners&lt;/strong&gt; replaces the rounded card shape with square ones, and &lt;strong&gt;No cover drop shadow&lt;/strong&gt; draws covers flat against the page rather than raised off it, giving their reserved pixels back to the cover so it grows slightly. They are independent, so a flatter grid can keep the shadow or lose it separately. Both are off by default, and list view&#39;s cover column is unaffected either way -- a table cell has never had the chrome.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Colours&lt;/h2&gt; 
&lt;p&gt;Open &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Colors&lt;/strong&gt; to recolour the cover chrome. Bookshelf keeps &lt;strong&gt;independent day-mode and night-mode palettes&lt;/strong&gt; -- the top row of the menu shows which one you&#39;re editing (&quot;Editing day-mode colours&quot; / &quot;Editing night-mode colours&quot;) and tapping it flips night mode so you can set each theme. Anything you leave unset uses a sensible default for that mode.&lt;/p&gt; 
&lt;p&gt;Each colour is chosen as a &quot;% black on screen&quot; value (so it reads the same way in both modes), and long-pressing a row resets just that colour. The pickers:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Progress bar&lt;/strong&gt; / &lt;strong&gt;Progress bar track&lt;/strong&gt; -- the filled and unfilled parts of the cover progress bar.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Bookmark color&lt;/strong&gt; / &lt;strong&gt;Finished bookmark color&lt;/strong&gt; -- the in-progress bookmark glyph and the finished-book check.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Favorite star color&lt;/strong&gt; -- the star on favourited covers.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Badge foreground&lt;/strong&gt; / &lt;strong&gt;Badge background&lt;/strong&gt; -- the text and fill of the &quot;#N&quot; series and &quot;123 p&quot; page-count pills.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Border color&lt;/strong&gt; -- one shared colour for cover frames, badge borders, the bookmark/star halos, the cardboard edge on folder and stack cards, and placeholder (no-image) covers.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Folder overlay background&lt;/strong&gt; -- the cardboard fill behind folder and stack cards.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Folder text color&lt;/strong&gt; -- the label text on those cards (the card outline follows Border colour).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Reset to default colors&lt;/strong&gt; -- restore the whole palette for the current mode.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;On colour e-ink panels (Kaleido), a separate &lt;strong&gt;Color panel dithering&lt;/strong&gt; toggle under &lt;strong&gt;Advanced -&amp;gt; Performance tweaks&lt;/strong&gt; keeps covers at full saturation when the shelf redraws; it&#39;s on by default, and the row only appears on colour devices.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Custom images for folders and stacks&lt;/h2&gt; 
&lt;p&gt;Bookshelf can replace the default folder cover (cardboard card with the first book peeking above) and the stack covers (Authors / Series / Genres / Collections) with your own images. Three ways to set one:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Long-press the card&lt;/strong&gt; -&amp;gt; &lt;em&gt;Set folder image…&lt;/em&gt; / &lt;em&gt;Set author image…&lt;/em&gt; / etc. -&amp;gt; pick an image file. The image renders as that folder&#39;s or stack&#39;s cover with the cardboard tab + label staying on top so the group identity is still visible.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Drop &lt;code&gt;cover.jpg&lt;/code&gt;, &lt;code&gt;cover.png&lt;/code&gt;, &lt;code&gt;folder.jpg&lt;/code&gt;, or &lt;code&gt;folder.png&lt;/code&gt; into a folder&lt;/strong&gt; and Bookshelf picks it up automatically. The hidden dot-file variants (&lt;code&gt;.cover.jpg&lt;/code&gt;, &lt;code&gt;.cover.png&lt;/code&gt;, &lt;code&gt;.folder.jpg&lt;/code&gt;, &lt;code&gt;.folder.png&lt;/code&gt;) work too, for keeping the image out of the visible file listing; a visible file wins if both are present. The image follows the folder when you move it.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Drop named images into an image library&lt;/strong&gt; for authors, series, genres, and collections. The default location is &lt;code&gt;&amp;lt;your-library&amp;gt;/.bookshelf-images/&lt;/code&gt; with subfolders &lt;code&gt;authors/&lt;/code&gt;, &lt;code&gt;series/&lt;/code&gt;, &lt;code&gt;genres/&lt;/code&gt;, and &lt;code&gt;collections/&lt;/code&gt;. Name each file after the exact stack name (e.g. &lt;code&gt;authors/Asimov, Isaac.jpg&lt;/code&gt;) or use a slugified form as a fallback. The slug lowercases the name and turns runs of punctuation / whitespace into single dashes, preserving the original order -- so &lt;code&gt;Asimov, Isaac&lt;/code&gt; matches &lt;code&gt;asimov-isaac.jpg&lt;/code&gt;, and &lt;code&gt;Isaac Asimov&lt;/code&gt; matches &lt;code&gt;isaac-asimov.jpg&lt;/code&gt;. Extensions tried in order: &lt;code&gt;jpg&lt;/code&gt;, &lt;code&gt;jpeg&lt;/code&gt;, &lt;code&gt;png&lt;/code&gt;, &lt;code&gt;gif&lt;/code&gt;, &lt;code&gt;bmp&lt;/code&gt;, &lt;code&gt;webp&lt;/code&gt;, &lt;code&gt;tiff&lt;/code&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Pick a different image-library location under &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Library &amp;amp; search -&amp;gt; Image library&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;Long-press an image-set folder or stack and tap &lt;em&gt;Clear … image&lt;/em&gt; to revert to the cardboard default.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Calibre metadata (beta)&lt;/h2&gt; 
&lt;p&gt;For libraries managed by Calibre. Turn on &lt;strong&gt;menu &amp;gt; Settings &amp;gt; Advanced &amp;gt; BETA: Read calibre metadata.calibre&lt;/strong&gt; and Bookshelf reads the &lt;code&gt;metadata.calibre&lt;/code&gt; file Calibre writes when it syncs books to a device or manages a folder. The file must sit &lt;strong&gt;directly in your KOReader home folder&lt;/strong&gt; (the folder Bookshelf scans for books), so point Calibre&#39;s device sync at that folder, or set your home folder to wherever Calibre already syncs. Its fields are read alongside each book&#39;s embedded metadata.&lt;/p&gt; 
&lt;p&gt;What it adds:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Calibre&#39;s title, authors, series, tags, language and description win over the values embedded in the book file, so edits made in Calibre show up without reconverting books&lt;/li&gt; 
 &lt;li&gt;Calibre&#39;s author sort (&quot;Le Guin, Ursula K.&quot;) orders author shelves, including hand-edited sort values&lt;/li&gt; 
 &lt;li&gt;A custom column of the &lt;strong&gt;Series&lt;/strong&gt; type gives its books a second series shelf alongside the primary one&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Any custom column you create in Calibre&lt;/strong&gt; can be shown in a token line via &lt;code&gt;%calibre{name}&lt;/code&gt;, using the column&#39;s lookup name: a column &lt;code&gt;#mood&lt;/code&gt; renders with &lt;code&gt;%calibre{mood}&lt;/code&gt; (the &lt;code&gt;#&lt;/code&gt; is optional). Text, fixed-value lists, numbers, dates, yes/no and multi-value columns all work; the one exception is long-text (&quot;Comments&quot;-type) columns, which are too big for a one-line token. This works anywhere tokens do -- hero card sections, list view lines, and conditionals like &lt;code&gt;[if:calibre{mood}=&quot;cosy&quot;]&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Three standard Calibre fields are exposed the same way: &lt;code&gt;%calibre{pubdate}&lt;/code&gt; (publication year), &lt;code&gt;%calibre{publisher}&lt;/code&gt; and &lt;code&gt;%calibre{rating}&lt;/code&gt;. Date columns -- standard or custom -- show as the year&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;What can be shelved, and what can only be shown.&lt;/strong&gt; Calibre&#39;s &lt;strong&gt;tags&lt;/strong&gt; become genres, so they drive genre shelves, the genre filter and &lt;code&gt;%genres&lt;/code&gt; exactly like tags read from the book file. A custom column of the &lt;strong&gt;Series&lt;/strong&gt; type gets its own series shelf, as above. Every other custom column is display-only: it can be printed in a token line and tested in a conditional, but you cannot yet build a shelf per column or filter by one.&lt;/p&gt; 
&lt;p&gt;Bookshelf looks for &lt;code&gt;metadata.calibre&lt;/code&gt; or &lt;code&gt;.metadata.calibre&lt;/code&gt; (the hidden form Calibre writes for some device setups), so either name works.&lt;/p&gt; 
&lt;p&gt;Two things worth knowing:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;KOReader&#39;s own wireless Calibre connection rewrites &lt;code&gt;metadata.calibre&lt;/code&gt; after a sync and permanently drops author sort and custom columns from it. Bookshelf works around this automatically: whenever it reads a Calibre-written file it saves those fields into a small &lt;code&gt;calibre.bookshelf.json&lt;/code&gt; beside it, and merges them back after KOReader&#39;s rewrite. No setup needed -- but the library must have been written by Calibre itself (USB sync, or a Calibre-managed folder) at least once, since a wireless-only library never has those fields on disk to save. That file is plain JSON keyed by each book&#39;s &lt;code&gt;lpath&lt;/code&gt; (the same path Calibre writes into &lt;code&gt;metadata.calibre&lt;/code&gt;), so if you ever need to supply columns Bookshelf cannot get at any other way, you can write it yourself and it will be merged in; anything present in &lt;code&gt;metadata.calibre&lt;/code&gt; wins.&lt;/li&gt; 
 &lt;li&gt;A &lt;code&gt;metadata.calibre&lt;/code&gt; over 64 MB is read with a slimmer parser that skips custom columns. Below that the file is read in full, and above about 16 MB Bookshelf shows an &quot;Importing calibre metadata&quot; message while it works: a 64 MB file takes around 6 seconds to read and is held in about 24 MB of memory. That happens when Bookshelf starts and again after a Calibre sync changes the file, not on every screen. Custom columns are what make these files big: Calibre repeats each column&#39;s whole definition on every book, roughly 400 bytes per column per book, so trimming the columns you do not need is the quickest way to bring a large file down.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Author names&lt;/h2&gt; 
&lt;p&gt;By default Bookshelf shows author names however each book stores them, so the same person can appear two ways (e.g. &lt;em&gt;Richard Osman&lt;/em&gt; and &lt;em&gt;Osman, Richard&lt;/em&gt;). Under &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Library &amp;amp; search -&amp;gt; Author name formatting&lt;/strong&gt; you can pick:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Auto&lt;/strong&gt; -- leave names as stored (the original behaviour; first form found wins).&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;First Last&lt;/strong&gt; -- always &lt;em&gt;Forename Surname&lt;/em&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Last, First&lt;/strong&gt; -- always &lt;em&gt;Surname, Forename&lt;/em&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Whichever you choose, variant spellings of the same author are merged into one entry on the Authors shelf, and the alpha-jump / surname sort uses the surname -- including names with particles like &lt;em&gt;de Maupassant&lt;/em&gt;, which sort under &lt;strong&gt;M&lt;/strong&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Customising the hero card&lt;/h2&gt; 
&lt;p&gt;Open &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Edit book detail view&lt;/strong&gt; to toggle each of the book&#39;s sections on or off; tap a section&#39;s row to open its &lt;strong&gt;line editor&lt;/strong&gt;. The status line (the strip of device and reading info at the very top) is configured the same way from its own &lt;strong&gt;Status line&lt;/strong&gt; entry just above, and the hero card&#39;s overall text size lives under &lt;strong&gt;Settings -&amp;gt; Text size -&amp;gt; Hero card&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Show status line.&lt;/strong&gt; Bookshelf can put this same line across the top of the reader, so it does not change as you move between the shelf and a book. The switch lives under &lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Advanced -&amp;gt; While reading&lt;/strong&gt;, alongside the other things Bookshelf can draw into the reader; the line itself is still edited here, and the reader follows. It is drawn by the same code that draws it on the shelf, so the two are identical by construction. This works on its own; if you also use &lt;a href=&quot;https://github.com/AndyHazz/bookends.koplugin&quot;&gt;Bookends&lt;/a&gt;, its top row and any top-anchored progress bar move down to make space.&lt;/p&gt; 
&lt;p&gt;The &lt;strong&gt;Tags&lt;/strong&gt; section is an interactive pill strip rather than a line of text, so instead of the line editor its row opens a small submenu: turn the line on or off, choose which pill categories to show (&lt;strong&gt;Author&lt;/strong&gt;, &lt;strong&gt;Series&lt;/strong&gt;, &lt;strong&gt;Collections&lt;/strong&gt;, &lt;strong&gt;Genres&lt;/strong&gt;, &lt;strong&gt;Folder&lt;/strong&gt;), and set the &lt;strong&gt;Font size&lt;/strong&gt; and &lt;strong&gt;Alignment&lt;/strong&gt;. Turning off Author and Series, for instance, leaves a line of just the real tags. The &lt;strong&gt;Rating&lt;/strong&gt; section is interactive too and is a simple on/off toggle.&lt;/p&gt; 
&lt;p&gt;The line editor lets you change the text and styling of one section. You&#39;ll see these controls:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Button&lt;/th&gt; 
   &lt;th&gt;What it does&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Bold&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Toggle bold weight.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Size&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;A nudge dialog (-5 / -1 / +1 / +5) over the font size, range 8 to 48 pixels.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Font&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Pick a font family. Shows previews when &lt;a href=&quot;https://github.com/AndyHazz/bookends.koplugin&quot;&gt;Bookends&lt;/a&gt; is installed.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Aa / AA&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Toggle uppercase (hidden on the Description section).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;L / C / R&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Cycle alignment (left, centre, right).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Bar style&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;(Progress only) Cycle the inline progress bar&#39;s visual style.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;+ Bar / - Bar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;(Progress only) Add or remove the &lt;code&gt;%bar&lt;/code&gt; placeholder.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Bar height&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;(Progress only) Nudge the inline bar&#39;s height as a percentage.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Tokens…&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Pick from a categorised list of placeholders (see below).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Icons…&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Insert icon glyphs from the built-in icon library (a searchable, categorised glyph grid).&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Default&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Reset this section&#39;s text and styling to its defaults.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Cancel&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Revert and close.&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;Save&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Persist and close.&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Edits update the hero card behind the editor in real time.&lt;/p&gt; 
&lt;h3&gt;Tokens (placeholders)&lt;/h3&gt; 
&lt;p&gt;Any text in a hero section can include &lt;strong&gt;tokens&lt;/strong&gt; -- placeholders that get replaced with live data. For example, &lt;code&gt;%title&lt;/code&gt; becomes the book title; &lt;code&gt;%book_pct&lt;/code&gt; becomes the percentage read.&lt;/p&gt; 
&lt;p&gt;You can wrap things in &lt;code&gt;[if:...]...[/if]&lt;/code&gt; to show them only when the relevant data exists. For instance, &lt;code&gt;[if:series]%series_name #%series_num[/if]&lt;/code&gt; only renders when the book is in a series.&lt;/p&gt; 
&lt;p&gt;The full token list is in the &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#token-cheatsheet&quot;&gt;Token cheatsheet&lt;/a&gt; below.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Bundled fonts&lt;/h2&gt; 
&lt;p&gt;Bookshelf ships three open-licensed fonts (see &lt;code&gt;fonts/CREDITS.md&lt;/code&gt;):&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Roboto Condensed&lt;/strong&gt; (Apache 2.0) -- the default Bookshelf UI font on new installs.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Inter ExtraBold&lt;/strong&gt; (OFL) -- default hero title.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Caveat&lt;/strong&gt; (OFL) -- default hero author.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Set the interface font under &lt;strong&gt;Bookshelf settings -&amp;gt; Bookshelf UI font&lt;/strong&gt; (defaults to &lt;em&gt;Follow KOReader UI font&lt;/em&gt; for existing users). The fonts are also copied into your font folder so they&#39;re selectable in the hero card&#39;s font picker after a restart. Existing users can adopt the new detail look via &lt;strong&gt;Reset book detail area to defaults&lt;/strong&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Updates&lt;/h2&gt; 
&lt;p&gt;Open &lt;strong&gt;menu -&amp;gt; Updates&lt;/strong&gt; to keep Bookshelf current. Once any check has found a newer release, the menu entry itself reads &lt;strong&gt;Update available&lt;/strong&gt; so you don&#39;t have to open it to find out.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Check for updates&lt;/strong&gt; -- the installed version is shown in brackets. Tap to check GitHub for a newer release, read its notes, and choose &lt;strong&gt;Update and restart&lt;/strong&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;View changelog&lt;/strong&gt; -- browse this and past releases&#39; notes, newest first. Notes are cached, so anything fetched once stays readable offline; &lt;strong&gt;Refresh&lt;/strong&gt; pulls the latest.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Notify on wake when update available&lt;/strong&gt; -- opt-in. Once an hour after a Wi-Fi-connected wake, Bookshelf checks the GitHub releases page and posts a quiet notification if a new version is out. Off by default; nothing is ever fetched without your permission.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Developer updates&lt;/strong&gt; (advanced) -- type a development branch name (e.g. &lt;code&gt;feat/foo&lt;/code&gt;) to install the tip of that branch. Use &lt;strong&gt;Reset to latest stable release&lt;/strong&gt; to clear the dev branch and pull the latest published release.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The whole download, unpack, and restart sequence runs over Wi-Fi only and needs no extra plugins. If Wi-Fi is off, Bookshelf offers to turn it on and carries on once it connects; if it&#39;s already connected, it just proceeds, including on networks where a connectivity check would fail (a Pi-hole blocking Microsoft&#39;s test domain, for instance).&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Library refresh&lt;/h2&gt; 
&lt;p&gt;After adding new books over USB, Calibre, Syncthing, or KOReader&#39;s network downloads:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Automatically&lt;/strong&gt; -- Bookshelf watches your library folder in the background and picks up newly added books on its own, with no interaction needed.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Tap a shelf&lt;/strong&gt; -- it also checks for filesystem changes on shelf taps.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Swipe down&lt;/strong&gt; on the shelf area for an immediate, full refresh; a brief &quot;Refreshing library&quot; notice appears.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Page counts&lt;/h2&gt; 
&lt;p&gt;Reflowable formats like EPUB have no fixed page count until something paginates them, so a book you have never opened usually has none. That is fine for most of Bookshelf, but it matters in two places: spine widths have nothing to vary by, and the page tokens have nothing to show.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;menu -&amp;gt; Settings -&amp;gt; Library &amp;amp; search -&amp;gt; Extract page counts&lt;/strong&gt; fills them in. It works down a ladder, cheapest first, and only falls back to the slow option for what is left:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;a &lt;code&gt;p(123)&lt;/code&gt; marker in the filename, which costs nothing to read&lt;/li&gt; 
 &lt;li&gt;a linked book&#39;s page count from &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#hardcover-enrichment&quot;&gt;Hardcover&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;a publisher page count embedded in the book itself&lt;/li&gt; 
 &lt;li&gt;failing all of those, it offers to paginate the rest with KOReader&#39;s own engine, one book at a time in the background&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;You get a report at the end saying where each count came from. The slow step is optional, cancellable, and the one worth thinking about on a large library.&lt;/p&gt; 
&lt;p&gt;Two things worth knowing about the numbers:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;The scan paginates at the engine&#39;s default font settings, not yours.&lt;/strong&gt; That keeps counts comparable between books, which is what spine widths want, rather than shifting every spine whenever you change font size. It is an approximation, and it is replaced by the real count as soon as you open the book, since KOReader works that out at your own settings and Bookshelf prefers it.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;The counts live in Bookshelf&#39;s own store, not in the book&#39;s sidecar.&lt;/strong&gt; Writing them to a sidecar would make KOReader treat an untouched book as one you had opened, which would quietly change your Recent shelf and reading statistics.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Once found, the counts feed spine widths, &lt;code&gt;%page_count&lt;/code&gt;, &lt;code&gt;%pages_left&lt;/code&gt;, and &lt;code&gt;%bar{rel}&lt;/code&gt; (the progress bar whose length reflects how long the book is).&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Reference&lt;/h2&gt; 
&lt;p&gt;Everything beyond this point is the full feature reference. Expand any section you need.&lt;/p&gt; 
&lt;p&gt;&lt;a id=&quot;gestures-cheatsheet&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Gestures cheatsheet&lt;/strong&gt;&lt;/summary&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Gesture&lt;/th&gt; 
    &lt;th&gt;Where&lt;/th&gt; 
    &lt;th&gt;What it does&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Tap&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Shelf cover (normal mode)&lt;/td&gt; 
    &lt;td&gt;Preview the book in the hero card&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Tap&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Shelf cover (expanded mode)&lt;/td&gt; 
    &lt;td&gt;Open the book directly&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Tap&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Hero card cover&lt;/td&gt; 
    &lt;td&gt;Open the previewed book&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Tap&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;OPDS catalogue cover (already previewed)&lt;/td&gt; 
    &lt;td&gt;Open the download view&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Tap&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;OPDS folder tile&lt;/td&gt; 
    &lt;td&gt;Drill into the category&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Tap&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Hero card description&lt;/td&gt; 
    &lt;td&gt;Open the full description in a scrollable viewer&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Tap&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Hero card star&lt;/td&gt; 
    &lt;td&gt;Set / clear the book&#39;s rating&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Tap&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Shelf&lt;/td&gt; 
    &lt;td&gt;Switch shelf&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Tap&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Search icon&lt;/td&gt; 
    &lt;td&gt;Open the library search&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Tap&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;&quot;9-16 of 247&quot; footer&lt;/td&gt; 
    &lt;td&gt;Open the go-to dialog: jump by page number, jump to the first item starting with a letter, or search the library&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Tap&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;First / prev / next / last chevrons&lt;/td&gt; 
    &lt;td&gt;Page navigation&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Long-press&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Shelf&lt;/td&gt; 
    &lt;td&gt;Open the shelf editor&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Long-press&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Shelf book cover&lt;/td&gt; 
    &lt;td&gt;Open the per-book menu&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Long-press&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Shelf stack cover (series, author, etc.)&lt;/td&gt; 
    &lt;td&gt;Pin the stack to the shelf menu&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Long-press&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Prev / next chevron&lt;/td&gt; 
    &lt;td&gt;Skip 10 pages back / forward (clamped to first / last)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Long-press&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Hero card&lt;/td&gt; 
    &lt;td&gt;Open the per-book menu for the previewed book&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Swipe west&lt;/strong&gt; (&amp;lt;-)&lt;/td&gt; 
    &lt;td&gt;Hero card&lt;/td&gt; 
    &lt;td&gt;Cycle preview to the next book in the active shelf&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Swipe west&lt;/strong&gt; (&amp;lt;-)&lt;/td&gt; 
    &lt;td&gt;Anywhere else&lt;/td&gt; 
    &lt;td&gt;Next page; on the last page, drills out or switches shelf&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Swipe east&lt;/strong&gt; (-&amp;gt;)&lt;/td&gt; 
    &lt;td&gt;Hero card&lt;/td&gt; 
    &lt;td&gt;Cycle preview to the previous book&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Swipe east&lt;/strong&gt; (-&amp;gt;)&lt;/td&gt; 
    &lt;td&gt;Anywhere else&lt;/td&gt; 
    &lt;td&gt;Previous page / drill back out / previous shelf&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Swipe north&lt;/strong&gt; (up)&lt;/td&gt; 
    &lt;td&gt;Anywhere&lt;/td&gt; 
    &lt;td&gt;Collapse hero to a thin status strip; expand the grid&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Swipe south&lt;/strong&gt; (down)&lt;/td&gt; 
    &lt;td&gt;Hero&lt;/td&gt; 
    &lt;td&gt;Restore the full hero from expanded mode&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Swipe south&lt;/strong&gt; (down)&lt;/td&gt; 
    &lt;td&gt;Shelf area&lt;/td&gt; 
    &lt;td&gt;Refresh the library walk&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Back&lt;/strong&gt; (physical key)&lt;/td&gt; 
    &lt;td&gt;Drilled into a stack&lt;/td&gt; 
    &lt;td&gt;Pop one drill level back out to the parent shelf&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;p&gt;The pagination row uses wide tap zones across the middle 75% of the screen. The outer 12.5% on each side is left free so KOReader&#39;s bottom-corner gestures (gestures.koplugin profiles for brightness, night mode, etc.) still register.&lt;/p&gt; 
&lt;/details&gt; 
&lt;p&gt;&lt;a id=&quot;keyboard-and-d-pad&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Keyboard and D-pad (non-touch devices)&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Everything on the shelf is reachable with physical keys.&lt;/p&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Key&lt;/th&gt; 
    &lt;th&gt;What it does&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Arrow keys&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Move the cursor. Focus moves between the shelf menu, the hero card, the shelf grid and the footer as you run out of room in each.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Press&lt;/strong&gt; (centre)&lt;/td&gt; 
    &lt;td&gt;Act on whatever has focus: open the focused book, switch to the focused shelf, press the focused footer button.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;ScreenKB + Press&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;The context menu -- the equivalent of a long-press. See below.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Shift + Press&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Same, for external and desktop keyboards.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Sym + AA&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Same, for other key layouts.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Page forward / back&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Page the shelf, wherever the cursor is.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Back&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Pop one level back out of a drilled-into folder or stack.&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;p&gt;&lt;strong&gt;The context-menu chord is the important one.&lt;/strong&gt; It is how a non-touch device reaches anything a touch device gets by long-pressing:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;On the &lt;strong&gt;hero card&lt;/strong&gt; or a &lt;strong&gt;shelf book&lt;/strong&gt;, it opens the &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#the-book-menu-long-press-a-cover&quot;&gt;book menu&lt;/a&gt; -- description, tags, reviews, rating, reading status, and the rest.&lt;/li&gt; 
  &lt;li&gt;On a &lt;strong&gt;shelf&lt;/strong&gt;, it opens the shelf editor.&lt;/li&gt; 
  &lt;li&gt;On a &lt;strong&gt;stack&lt;/strong&gt; (series, author, etc.), it opens the pin / add / remove menu.&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;The chords are KOReader&#39;s own (they match &lt;code&gt;FocusManager&lt;/code&gt;&#39;s hold gestures), so they are the same ones the rest of KOReader uses. The &lt;strong&gt;Menu&lt;/strong&gt; key is deliberately left alone -- it belongs to KOReader&#39;s own menu on devices that have one.&lt;/p&gt; 
 &lt;p&gt;Within the hero card the cover is a single focus target: the rating stars, description and tag pills alongside it are not separately focusable, so use the context-menu chord to reach them.&lt;/p&gt; 
 &lt;p&gt;&lt;strong&gt;Back in the reader.&lt;/strong&gt; Pressing Back after opening a book is KOReader&#39;s setting, not Bookshelf&#39;s: it defaults to walking your position history &lt;em&gt;inside&lt;/em&gt; the book, which is empty in a freshly opened one, so it falls through to &quot;Exit KOReader?&quot;. If you would rather Back returned you to the shelf, set &lt;strong&gt;menu -&amp;gt; Navigation -&amp;gt; Back in reader -&amp;gt; Go to file browser&lt;/strong&gt;. Bookshelf picks that up and shows the shelf, the same as the Home action does.&lt;/p&gt; 
&lt;/details&gt; 
&lt;p&gt;&lt;a id=&quot;shelf-sources-filters-and-sorts&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Shelf sources, filters, and sorts&lt;/strong&gt;&lt;/summary&gt; 
 &lt;h4&gt;Sources&lt;/h4&gt; 
 &lt;p&gt;Each shelf points at one of:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Home (folders)&lt;/strong&gt; -- your library as a folder tree.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Home (flat)&lt;/strong&gt; -- every book in one list, no folders.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Recent&lt;/strong&gt; -- books you&#39;ve opened, newest-read first.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Latest added&lt;/strong&gt; -- new files on disk, newest-added first (scan depth set under Settings -&amp;gt; Advanced -&amp;gt; Performance tweaks -&amp;gt; &quot;Latest&quot; walk depth).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Favorites&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Series&lt;/strong&gt;, &lt;strong&gt;Authors&lt;/strong&gt;, &lt;strong&gt;Genres&lt;/strong&gt;, &lt;strong&gt;Collections&lt;/strong&gt;, &lt;strong&gt;Formats&lt;/strong&gt;, &lt;strong&gt;Ratings&lt;/strong&gt;, &lt;strong&gt;Languages&lt;/strong&gt; -- a stack of all the values; drill into one to see its books.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Specific&lt;/strong&gt; series / author / genre / collection / format / rating / language / folder / reading status -- a shelf scoped to a single chosen value.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Folder (flattened)&lt;/strong&gt; -- a single folder shown as every book beneath it in one list, no sub-folder cards (vs. the plain folder source, which keeps the sub-folder tree).&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;OPDS catalog&lt;/strong&gt; -- an online catalogue browsed as a shelf (see &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#opds-catalogues&quot;&gt;OPDS catalogues&lt;/a&gt;). The feed&#39;s own order is authoritative, so these shelves have no sort priority, and the local filters don&#39;t apply -- some catalogues offer their own filters as tiles instead.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Kindle Virtual Library&lt;/strong&gt; -- on a Kindle, the books in the Kindle&#39;s own library, shown as a sortable shelf with their own covers. Needs the Kindle Virtual Library plugin, and is offered only where it is installed. See &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#kindle-library&quot;&gt;Kindle library&lt;/a&gt;.&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;h4&gt;Filters&lt;/h4&gt; 
 &lt;p&gt;Each shelf can narrow its shelf with any combination of filters, set from &lt;strong&gt;Filters…&lt;/strong&gt; in the shelf editor:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Reading status&lt;/strong&gt; -- Unread, Reading, On hold, Finished.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Genre&lt;/strong&gt;, &lt;strong&gt;Language&lt;/strong&gt;, &lt;strong&gt;Format&lt;/strong&gt;, &lt;strong&gt;Collection&lt;/strong&gt; -- pick any number of values.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Rating&lt;/strong&gt; -- one to five stars, or Unrated.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Folder&lt;/strong&gt; -- include and/or exclude folders (an exclude wins over an include, and both apply to sub-folders).&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;Picks within one filter match &lt;em&gt;any&lt;/em&gt; of them, so two chosen genres show books in either. Picks across different filters must &lt;em&gt;all&lt;/em&gt; match, so adding a 5-star rating then limits those to 5-star books only. Each choice shows how many books currently match given the other selected filters. All filters are off by default (everything visible).&lt;/p&gt; 
 &lt;h4&gt;Sort priority&lt;/h4&gt; 
 &lt;p&gt;Up to three levels per shelf. Available sort keys:&lt;/p&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;Title&lt;/strong&gt;, &lt;strong&gt;Filename&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Author surname&lt;/strong&gt;, &lt;strong&gt;Author (given name)&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Series name&lt;/strong&gt;, &lt;strong&gt;Series index&lt;/strong&gt;, &lt;strong&gt;Series + index&lt;/strong&gt; (series name then number, in one pick)&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Last opened&lt;/strong&gt; (most-recent-first by default)&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Date added&lt;/strong&gt; (most-recent-first by default)&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Percent read&lt;/strong&gt; (most progress first by default)&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Rating&lt;/strong&gt; (highest first by default; unrated last)&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Unread/Reading/Finished&lt;/strong&gt; or &lt;strong&gt;Reading/Unread/Finished&lt;/strong&gt; (status orderings)&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;File size&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Page count&lt;/strong&gt;&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Book count&lt;/strong&gt; (for stacks)&lt;/li&gt; 
 &lt;/ul&gt; 
 &lt;p&gt;Defaults adjust to the source (e.g. Recent defaults to &lt;em&gt;Last opened&lt;/em&gt;; Latest added defaults to &lt;em&gt;Date added&lt;/em&gt;). The first-level sort decides the order of stacks for grouped sources; subsequent levels order books within each stack.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Hero card line editor&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;The book detail card has &lt;strong&gt;eight editable sections&lt;/strong&gt;: Status, Rating, Title, Author, Metadata, Description, Tags (interactive), and Progress. The Tags section shows tappable pills rather than a text template, so it has no line editor; toggle it on or off like the others.&lt;/p&gt; 
 &lt;p&gt;Open &lt;strong&gt;menu -&amp;gt; Edit book detail view&lt;/strong&gt; to toggle each section on or off. Tap a section&#39;s row (when its toggle is on) to open the &lt;strong&gt;line editor&lt;/strong&gt;.&lt;/p&gt; 
 &lt;p&gt;Edits live-update the hero behind the editor on every keystroke; only the right column of the card is rebuilt, so the cover stays untouched.&lt;/p&gt; 
 &lt;h4&gt;Editor buttons&lt;/h4&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Button&lt;/th&gt; 
    &lt;th&gt;What it does&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Bold&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Toggle bold weight&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Size&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;-5 / -1 / +1 / +5 nudge over the font size (range 8-48 px)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Font&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Font family picker&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Aa / AA&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Case toggle (hidden on Description)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;L / C / R&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Alignment cycle (left / centre / right)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Bar style&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;(Progress only) Cycle inline progress-bar styles&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;+ Bar / - Bar&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;(Progress only) Insert or remove the &lt;code&gt;%bar&lt;/code&gt; token in the template&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Bar height&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;(Progress only) Nudge the inline bar&#39;s height (% of text height)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Tokens…&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Categorised token catalogue with live preview&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Icons…&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Insert icon glyphs from the built-in icon library (searchable glyph grid)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Default&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Reset this section&#39;s template and styling to defaults&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Cancel&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Revert and close&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;strong&gt;Save&lt;/strong&gt;&lt;/td&gt; 
    &lt;td&gt;Persist and close&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;h4&gt;Bookends extras&lt;/h4&gt; 
 &lt;p&gt;Several editor surfaces use the &lt;a href=&quot;https://github.com/AndyHazz/bookends.koplugin&quot;&gt;Bookends&lt;/a&gt; plugin when it&#39;s installed. Everything degrades gracefully when it isn&#39;t:&lt;/p&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Surface&lt;/th&gt; 
    &lt;th&gt;With Bookends&lt;/th&gt; 
    &lt;th&gt;Without&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Token picker&lt;/td&gt; 
    &lt;td&gt;Modal with shelves, search, live preview&lt;/td&gt; 
    &lt;td&gt;Plain Menu over the token catalogue&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Font picker&lt;/td&gt; 
    &lt;td&gt;Each family rendered in its own typeface, weight variants deduped&lt;/td&gt; 
    &lt;td&gt;Plain Menu over the system font list&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Progress-bar styles&lt;/td&gt; 
    &lt;td&gt;7 styles (&lt;code&gt;bordered&lt;/code&gt;, &lt;code&gt;solid&lt;/code&gt;, &lt;code&gt;rounded&lt;/code&gt;, &lt;code&gt;metro&lt;/code&gt;, &lt;code&gt;wavy&lt;/code&gt;, &lt;code&gt;radial&lt;/code&gt;, &lt;code&gt;radial_hollow&lt;/code&gt;)&lt;/td&gt; 
    &lt;td&gt;2 styles (&lt;code&gt;bordered&lt;/code&gt;, &lt;code&gt;solid&lt;/code&gt;)&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;p&gt;The icon picker is built in and needs no extra plugins.&lt;/p&gt; 
&lt;/details&gt; 
&lt;p&gt;&lt;a id=&quot;token-cheatsheet&quot;&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Token cheatsheet&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Tokens are placeholders prefixed with &lt;code&gt;%&lt;/code&gt;. Conditional logic uses &lt;code&gt;[if:cond]…[/if]&lt;/code&gt; (with optional &lt;code&gt;[else]&lt;/code&gt;).&lt;/p&gt; 
 &lt;h4&gt;Book metadata&lt;/h4&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Token&lt;/th&gt; 
    &lt;th&gt;Example&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%title&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;The Great Gatsby&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%author&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;F. Scott Fitzgerald&lt;/em&gt; (first author)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%author_2&lt;/code&gt; / &lt;code&gt;%author_3&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;second / third author (empty if absent)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%authors&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;Neil Gaiman, Terry Pratchett&lt;/em&gt; (all authors)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%author_count&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;2&lt;/em&gt; (number of authors)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%authors_short&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;first author, or &lt;em&gt;A and B&lt;/em&gt;, or &lt;em&gt;A, B, et al.&lt;/em&gt; for three or more&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%genres&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;Science Fiction, Classics&lt;/em&gt; (all genres, what calibre calls tags)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%genre&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;Science Fiction&lt;/em&gt; (first genre)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%series&lt;/code&gt; / &lt;code&gt;%series_name&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;Dune&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%series_num&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;1&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%rating&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;★★★☆☆&lt;/em&gt; (empty when unrated)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%rating_number&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;3&lt;/em&gt; (1-5, empty when unrated)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%hardcover_rating&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;4.5&lt;/em&gt; (cached Hardcover rating, empty when unavailable)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%hardcover_stars&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Cached Hardcover rating as star glyphs&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%status&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;reading&lt;/em&gt; (unread / reading / on_hold / finished)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%status_label&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;Reading&lt;/em&gt; (the status as a readable label)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%favourite&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Favourite icon (empty when not a favourite)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%size&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;2.2 MB&lt;/em&gt; (file size)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%added&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Date the file was added to the library&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%opened&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Date the book was last opened&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%calibre{name}&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Any Calibre column by lookup name -- custom columns included: a column &lt;code&gt;#mood&lt;/code&gt; renders with &lt;code&gt;%calibre{mood}&lt;/code&gt;. Also &lt;code&gt;%calibre{pubdate}&lt;/code&gt; (publication year) and &lt;code&gt;%calibre{publisher}&lt;/code&gt;. Needs the &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/#calibre-metadata-beta&quot;&gt;calibre metadata beta&lt;/a&gt;; dates show as the year; long-text columns excluded.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%filename&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;The_Great_Gatsby&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%format&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;EPUB&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%lang&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;en&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%description&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Book blurb (HTML stripped, entities decoded)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%total_read_time&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Lifetime reading time across every book&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%books_finished&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Books finished; the same count as &lt;code&gt;%books_read&lt;/code&gt;, under bookends&#39; name&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%pages_today&lt;/code&gt; / &lt;code&gt;%time_today&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Pages and time read today, across all books (needs the statistics plugin)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%avg_page_time&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Average time per page for this book&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%highlights&lt;/code&gt; / &lt;code&gt;%notes&lt;/code&gt; / &lt;code&gt;%bookmarks&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Counts from the book&#39;s own annotations&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%annotations&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;All three added together&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%quote&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;A random highlight from this book, in quotation marks (a fresh one each time you select the book; empty if the book has no highlights). Handy in the Description section in place of the blurb.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%quote_source&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;The book and author for &lt;code&gt;%quote&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;h4&gt;Position and progress&lt;/h4&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Token&lt;/th&gt; 
    &lt;th&gt;Example&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%page_num&lt;/code&gt; / &lt;code&gt;%page_count&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;42&lt;/em&gt; / &lt;em&gt;218&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%pages_left&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;176&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%book_pct&lt;/code&gt; / &lt;code&gt;%book_pct_left&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;19%&lt;/em&gt; / &lt;em&gt;81%&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%book_pct_read&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;44%&lt;/em&gt; (how much you have actually read, not where you are)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%bar&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Inline progress-bar widget (Progress section only)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%bar{rel}&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Same bar, but its length reflects how long the book is&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%spacer&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Elastic gap that pushes content left/right. &lt;code&gt;Reading%spacer47%&lt;/code&gt; renders &lt;em&gt;Reading&lt;/em&gt; on the left and &lt;em&gt;47%&lt;/em&gt; on the right.&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;h4&gt;Statistics (requires the &lt;code&gt;statistics&lt;/code&gt; plugin)&lt;/h4&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Token&lt;/th&gt; 
    &lt;th&gt;Example&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%book_time_left&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;3h 45m&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%book_read_time&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;2h 30m&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%book_pages_read&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;142&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%days_reading_book&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;7&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%pages_per_day&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;12&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%speed&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;42&lt;/em&gt; (pages per hour)&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;p&gt;Statistics tokens auto-hide when the plugin is absent or the book has no recorded reading time.&lt;/p&gt; 
 &lt;h4&gt;Library&lt;/h4&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Token&lt;/th&gt; 
    &lt;th&gt;Example&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%books_read&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;13&lt;/em&gt; (books in your whole library marked Finished)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%books_started&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Books with any reading time recorded by the statistics plugin&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;p&gt;These are library-wide rather than per-book, so they suit the hero status line and micro-modules.&lt;/p&gt; 
 &lt;h4&gt;Time and date&lt;/h4&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Token&lt;/th&gt; 
    &lt;th&gt;Example&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%time&lt;/code&gt; / &lt;code&gt;%time_24h&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;14:35&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%time_12h&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;2:35 pm&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%date&lt;/code&gt; / &lt;code&gt;%date_long&lt;/code&gt; / &lt;code&gt;%date_numeric&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;3 May&lt;/em&gt; / &lt;em&gt;3 May 2026&lt;/em&gt; / &lt;em&gt;03/05/2026&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%weekday&lt;/code&gt; / &lt;code&gt;%weekday_short&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;Monday&lt;/em&gt; / &lt;em&gt;Mon&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%datetime{%H:%M}&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Custom &lt;code&gt;os.date&lt;/code&gt; format&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;h4&gt;Device&lt;/h4&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Token&lt;/th&gt; 
    &lt;th&gt;Example&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%batt&lt;/code&gt; / &lt;code&gt;%batt_icon&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;73%&lt;/em&gt; / charge-aware glyph&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%wifi_icon&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Wi-Fi icon (connected / disconnected)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%light&lt;/code&gt; / &lt;code&gt;%light_pct&lt;/code&gt; / &lt;code&gt;%light_icon&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;18&lt;/em&gt; (or &lt;em&gt;OFF&lt;/em&gt;) / &lt;em&gt;75%&lt;/em&gt; / lightbulb glyph&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%warmth&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Frontlight warmth on the device&#39;s own scale, &lt;em&gt;12&lt;/em&gt; (0-24 on Kindle, varies by device; natural-light only)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%warmth_pct&lt;/code&gt; / &lt;code&gt;%warmth_icon&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;em&gt;50%&lt;/em&gt; / thermometer glyph, three steps (natural-light only)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%nightmode&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Moon glyph when night mode is on, sun otherwise&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%mem&lt;/code&gt; / &lt;code&gt;%ram&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;System memory (%) / KOReader RSS, &lt;em&gt;84M&lt;/em&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%sysused&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;System memory used (MiB)&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;%disk&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Free space on the books partition (GB)&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;h4&gt;Conditionals&lt;/h4&gt; 
 &lt;pre&gt;&lt;code&gt;[if:book_time_left]%book_time_left LEFT[else]Open to start reading[/if]
[if:lang!=en]Lang: %lang\n[/if]%description
[if:batt&amp;lt;20]LOW BATTERY %batt[/if]
[if:not series]Standalone[/if]
[if:connected]%wifi_icon[/if]
%time_12h[if:full_width]   ·   %date[/if]
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Comparisons: &lt;code&gt;=&lt;/code&gt; &lt;code&gt;!=&lt;/code&gt; &lt;code&gt;&amp;lt;&lt;/code&gt; &lt;code&gt;&amp;gt;&lt;/code&gt; &lt;code&gt;&amp;lt;=&lt;/code&gt; &lt;code&gt;&amp;gt;=&lt;/code&gt;. Boolean: &lt;code&gt;and&lt;/code&gt;, &lt;code&gt;or&lt;/code&gt;, &lt;code&gt;not&lt;/code&gt;. Numeric tokens compare numerically; string tokens compare by string equality. The &lt;code&gt;connected&lt;/code&gt; condition is true only while actually online, so &lt;code&gt;[if:connected]%wifi_icon[/if]&lt;/code&gt; shows the Wi-Fi glyph just when connected. The &lt;code&gt;full_width&lt;/code&gt; condition is true only in the wide status line of the micro-module and full-screen views (not the narrow cover-view status), so you can surface extra content -- a date, say -- only where there&#39;s room for it.&lt;/p&gt; 
 &lt;h4&gt;Delimited tokens&lt;/h4&gt; 
 &lt;p&gt;A token name runs until the next non-letter, so text placed straight after it is read as part of the name -- &lt;code&gt;%author&lt;/code&gt; followed by an &lt;code&gt;s&lt;/code&gt; becomes &lt;code&gt;%authors&lt;/code&gt; and prints every author. Wrap the name in angle brackets to butt text directly against it:&lt;/p&gt; 
 &lt;pre&gt;&lt;code&gt;%&amp;lt;author&amp;gt;s book        -&amp;gt;  Frank Herberts book
%&amp;lt;page_num&amp;gt;/%&amp;lt;page_count&amp;gt;  -&amp;gt;  42/500
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;This matches &lt;a href=&quot;https://github.com/AndyHazz/bookends.koplugin&quot;&gt;Bookends&lt;/a&gt;, so a line written for one works in the other.&lt;/p&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Settings file (advanced)&lt;/strong&gt;&lt;/summary&gt; 
 &lt;p&gt;Bookshelf stores its settings in a dedicated file alongside KOReader&#39;s other plugin data, separate from &lt;code&gt;settings.reader.lua&lt;/code&gt;:&lt;/p&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Platform&lt;/th&gt; 
    &lt;th&gt;Path&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Linux / dev&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;~/.config/koreader/settings/bookshelf.lua&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Kindle&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;/mnt/us/koreader/settings/bookshelf.lua&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Kobo&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;/mnt/onboard/.adds/koreader/settings/bookshelf.lua&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;Android&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;&amp;lt;koreader-dir&amp;gt;/settings/bookshelf.lua&lt;/code&gt;&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
 &lt;p&gt;Existing v1 settings migrate automatically on first launch -- legacy keys are read from &lt;code&gt;settings.reader.lua&lt;/code&gt;, copied across with the &lt;code&gt;bookshelf_&lt;/code&gt; prefix stripped, and removed from the global file.&lt;/p&gt; 
 &lt;h4&gt;Selected keys&lt;/h4&gt; 
 &lt;table&gt; 
  &lt;thead&gt; 
   &lt;tr&gt; 
    &lt;th&gt;Key&lt;/th&gt; 
    &lt;th&gt;Shape&lt;/th&gt; 
   &lt;/tr&gt; 
  &lt;/thead&gt; 
  &lt;tbody&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;tabs&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Ordered list of shelf records (id, label, icon, source, filter, sort_priority, enabled).&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;hero_regions&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Per-section overrides (sparse). One entry per section (status / rating / title / author / metadata / description / tags / progress) with any subset of template, font_face, font_size, bold, uppercase, alignment, disabled, bar_style, bar_height. The interactive &lt;strong&gt;tags&lt;/strong&gt; section also takes per-category toggles (show_author / show_series / show_collections / show_genres / show_folder) plus font_size and alignment.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;font_scale&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Global zoom for hero text (50-200%).&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;chip_font_scale&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Shelf menu font size (50-300%).&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;chip_flex_widths&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Boolean. When true, longer-labelled shelves get more horizontal space than icon-only ones.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;active_chip&lt;/code&gt; / &lt;code&gt;active_page&lt;/code&gt; / &lt;code&gt;drill_path&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Persisted navigation state, restored on KOReader restart.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;progress_bar_enabled&lt;/code&gt; / &lt;code&gt;progress_bookmark_enabled&lt;/code&gt; / &lt;code&gt;progress_badge_enabled&lt;/code&gt; / &lt;code&gt;progress_page_count_enabled&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Cover indicator toggles.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;show_series_num&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&quot;always&quot; / &quot;in_series&quot; / &quot;never&quot;.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;progress_fill&lt;/code&gt; / &lt;code&gt;progress_track&lt;/code&gt; / &lt;code&gt;bookmark_color&lt;/code&gt; / &lt;code&gt;complete_bookmark_color&lt;/code&gt; / &lt;code&gt;favorite_star_color&lt;/code&gt; / &lt;code&gt;badge_fg&lt;/code&gt; / &lt;code&gt;badge_bg&lt;/code&gt; / &lt;code&gt;border_color&lt;/code&gt; / &lt;code&gt;folder_overlay_bg&lt;/code&gt; / &lt;code&gt;folder_overlay_fg&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Cover-chrome colours (% black). Each also has a &lt;code&gt;_night&lt;/code&gt; variant for the night-mode palette; unset keys fall back to per-mode defaults.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;author_format&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;&quot;auto&quot;&lt;/code&gt; / &lt;code&gt;&quot;first_last&quot;&lt;/code&gt; / &lt;code&gt;&quot;last_first&quot;&lt;/code&gt; -- author name display.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;bookshelf_ui_font&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Chosen Bookshelf interface font (a resolvable font face). Absent = follow KOReader&#39;s UI font.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;cover_cache_mb&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Memory budget (MB) for the scaled-cover cache (default 24). The legacy &lt;code&gt;cover_cache_size&lt;/code&gt; count key is discarded on first load.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;hardcover_links&lt;/code&gt; / &lt;code&gt;hardcover_enrichment&lt;/code&gt; / &lt;code&gt;hardcover_ratings&lt;/code&gt; / &lt;code&gt;hardcover_reviews&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Optional Hardcover link and cached description/cover/rating/review metadata used by the Hardcover enrichment menu.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;hardcover_hero_rating&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Show cached Hardcover ratings in the hero rating row instead of KOReader&#39;s local rating.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;hardcover_use_metadata&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Use Hardcover&#39;s title/author/series/genres for linked books in place of their own.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;hardcover_max_genres&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;How many of a linked book&#39;s Hardcover genres to use (when &lt;code&gt;hardcover_use_metadata&lt;/code&gt; is on).&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;calibre_metadata&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;BETA. Read metadata from &lt;code&gt;metadata.calibre&lt;/code&gt; if present.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;search_view_mode&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;How search results display: absent = covers, &lt;code&gt;&quot;list&quot;&lt;/code&gt;, or &lt;code&gt;&quot;auto&quot;&lt;/code&gt;. Set by long-pressing the Search results pill.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;latest_walk_depth&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;How deep the &lt;strong&gt;Latest&lt;/strong&gt; source scans your library.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;show_close_msg&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Show the centred &quot;Closing book…&quot; toast when exiting a book.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;hot_park&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Instant book close: leave the book open in the background and finish closing it at the next quiet moment. Default on.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;open_cover_effect&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Play the cover-opening flex when launching a book. Default on.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;shelf_page_animation&lt;/code&gt; / &lt;code&gt;start_menu_animation&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Wipe-animation speed (&lt;code&gt;off&lt;/code&gt; / &lt;code&gt;fast&lt;/code&gt; / &lt;code&gt;medium&lt;/code&gt; / &lt;code&gt;slow&lt;/code&gt;) for shelf/shelf paging and for the start menu, set independently. E-ink only.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;true_cover_aspect&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Render covers at their real shape instead of a uniform rectangle. Default off.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;dev_branch&lt;/code&gt; / &lt;code&gt;last_install_source&lt;/code&gt; / &lt;code&gt;check_updates&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Updater state.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;start_menu_items&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;The start menu tree: an ordered list of entries (actions, plugin launchers, folders with children, and micro-modules).&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;start_menu_position&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;&lt;code&gt;&quot;left&quot;&lt;/code&gt; / &lt;code&gt;&quot;right&quot;&lt;/code&gt; / &lt;code&gt;&quot;off&quot;&lt;/code&gt; -- where the start-menu button sits in the footer.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;start_menu_seeded&lt;/code&gt; / &lt;code&gt;start_menu_next_id&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;One-shot seed flag for the default menu, and the counter behind generated entry ids.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;micromodule_&amp;lt;key&amp;gt;_*&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;Per-micro-module settings (e.g. &lt;code&gt;micromodule_clock_format&lt;/code&gt;, &lt;code&gt;micromodule_random_unread_source&lt;/code&gt;). Each module owns its own keys.&lt;/td&gt; 
   &lt;/tr&gt; 
   &lt;tr&gt; 
    &lt;td&gt;&lt;code&gt;migrated&lt;/code&gt;&lt;/td&gt; 
    &lt;td&gt;One-shot flag; presence indicates v1 -&amp;gt; v2 migration has run.&lt;/td&gt; 
   &lt;/tr&gt; 
  &lt;/tbody&gt; 
 &lt;/table&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;strong&gt;Known limitations&lt;/strong&gt;&lt;/summary&gt; 
 &lt;ul&gt; 
  &lt;li&gt;&lt;strong&gt;&lt;code&gt;%bar&lt;/code&gt; styling lives in the Progress section.&lt;/strong&gt; Inserting &lt;code&gt;%bar&lt;/code&gt; in another section still renders the widget, but uses the bordered default style and 100% height since the Bar style / Bar height buttons only appear in the Progress section&#39;s editor.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Italic&lt;/strong&gt; is reachable only via the font picker (by selecting an italic family). The line editor has no italic toggle because &lt;code&gt;TextBoxWidget&lt;/code&gt; doesn&#39;t synthesise italic from upright fonts.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Inline format tags&lt;/strong&gt; render in &lt;strong&gt;list view&lt;/strong&gt; lines only: &lt;code&gt;[b]&lt;/code&gt;, &lt;code&gt;[i]&lt;/code&gt;, &lt;code&gt;[font=NAME]&lt;/code&gt; and &lt;code&gt;[size=N]&lt;/code&gt; (also &lt;code&gt;[size=+N]&lt;/code&gt; / &lt;code&gt;[size=-N]&lt;/code&gt;, relative to the enclosing run). &lt;code&gt;[u]&lt;/code&gt; is accepted but draws nothing. Hero card sections strip all of them, so use that section&#39;s own Bold button there.&lt;/li&gt; 
  &lt;li&gt;&lt;strong&gt;Page count for EPUBs&lt;/strong&gt; requires opening the book at least once. The count comes from KOReader&#39;s pagemap or reading statistics, both of which are populated only after the first paginate.&lt;/li&gt; 
 &lt;/ul&gt; 
&lt;/details&gt; 
&lt;hr /&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;AGPL-3.0 -- see &lt;a href=&quot;https://raw.githubusercontent.com/AndyHazz/bookshelf.koplugin/master/LICENSE&quot;&gt;LICENSE&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://ko-fi.com/O5O5FDLVJ&quot;&gt;&lt;img src=&quot;https://ko-fi.com/img/githubbutton_sm.svg?sanitize=true&quot; alt=&quot;ko-fi&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/1229563695/debdcdd8-3ab4-4834-9739-2f1248c36cae" medium="image" />
      
    </item>
    
    <item>
      <title>Footagesus/WindUI</title>
      <link>https://github.com/Footagesus/WindUI</link>
      <description>&lt;p&gt;WindUI is a open source UI library for Roblox Script Hubs&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://footagesus.github.io/treehub-web/docs/windui&quot;&gt;https://footagesus.github.io/treehub-web/docs/windui&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;img src=&quot;https://raw.githubusercontent.com/Footagesus/WindUI/main/docs/WindUI%20%E2%80%93%20Themes.png&quot; alt=&quot;WindUI Banner&quot; /&gt; 
&lt;p&gt;&lt;a href=&quot;https://uibin.orqan.xyz/library/341a345c-b3c9-42fe-a45c-eb296580ce61&quot;&gt;&lt;img src=&quot;https://uibin.orqan.xyz/api/card?id=341a345c-b3c9-42fe-a45c-eb296580ce61&amp;amp;theme=green&quot; alt=&quot;Wind Ui&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;This WindUI was not inspired by, and the name has nothing to do with UI Frameworks&lt;/p&gt; 
&lt;/div&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Warning&lt;/p&gt;
 &lt;p&gt;WindUI is currently in Beta. This project is still under active development. Bugs, issues, and unstable features may occur. We’re constantly working on improvements, so please be patient and report any problems you encounter.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;Credits&lt;/h2&gt; 
&lt;h4&gt;Icons (&lt;a href=&quot;https://github.com/Footagesus/Icons&quot;&gt;https://github.com/Footagesus/Icons&lt;/a&gt;)&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/lucide-icons/lucide&quot;&gt;Lucide-Icons&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.figma.com/community/file/1415718327120418204&quot;&gt;Craft Icons&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://vercel.com/geist/icons&quot;&gt;Geist Icons&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://icones.js.org/collection/solar&quot;&gt;Solar Icons&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://sf-symbols-one.vercel.app/&quot;&gt;SF Symbols&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Links&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://discord.gg/ftgs-development-hub-1300692552005189632&quot;&gt;Discord Server&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://footagesus.github.io/treehub-web/docs/windui&quot;&gt;Documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://footagesus.github.io/WindUI-Docs/docs/installation&quot;&gt;Installation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/Footagesus/WindUI/main/main_example.lua&quot;&gt;Example&lt;/a&gt; (wip)&lt;pre&gt;&lt;code class=&quot;language-luau&quot;&gt;loadstring(game:HttpGet(&#39;https://raw.githubusercontent.com/Footagesus/WindUI/refs/heads/main/main_example.lua&#39;))()
&lt;/code&gt;&lt;/pre&gt; &lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/880118829/7b5ecd5a-a8e1-4bd0-b80c-ed1df3dc18b9" medium="image" />
      
    </item>
    
    <item>
      <title>finlater/weread.koplugin</title>
      <link>https://github.com/finlater/weread.koplugin</link>
      <description>&lt;p&gt;微信读书 koreader 插件，在 koreader 里阅读微信读书里的书籍、公众号文章，支持阅读进度同步，阅读时长上报和统计，本地书籍支持获取微信读书划线和想法内容，支持Kindle、Kobo等设备。&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;WeRead KOReader Plugin&lt;/h1&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;免责声明&lt;/strong&gt;：本项目仅供个人学习和技术研究使用，不得用于商业用途。使用本项目所产生的一切后果（包括但不限于账号封禁、数据丢失等）由使用者自行承担，项目作者概不负责。请遵守微信读书的用户协议和相关法律法规。&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;在 KOReader 上阅读微信读书中的书籍、公众号文章的插件。支持同步进度同步，阅读时长同步和统计，查看书评、划线和想法。让Kindle、Kobo等封闭系统设备也能体验微信读书！&lt;/p&gt; 
&lt;h2&gt;安装&lt;/h2&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;⚠️ 建议使用 &lt;strong&gt;KOReader 2026.03 或更高版本&lt;/strong&gt;。旧版本可能无法正常加载或使用插件，例如「工具」菜单中找不到「微信读书」。详见 &lt;a href=&quot;https://github.com/finlater/weread.koplugin/issues/14&quot;&gt;#14&lt;/a&gt;。&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;ol&gt; 
 &lt;li&gt;前往 &lt;a href=&quot;https://github.com/finlater/weread.koplugin/releases&quot;&gt;GitHub Releases&lt;/a&gt; 下载最新的 &lt;code&gt;weread.koplugin-vX.Y.Z.zip&lt;/code&gt; 安装包。&lt;/li&gt; 
 &lt;li&gt;解压安装包，得到 &lt;code&gt;weread.koplugin&lt;/code&gt; 文件夹。&lt;/li&gt; 
 &lt;li&gt;将该文件夹复制到 KOReader 的 &lt;code&gt;plugins&lt;/code&gt; 目录：&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;koreader/plugins/weread.koplugin/
&lt;/code&gt;&lt;/pre&gt; 
&lt;ol start=&quot;4&quot;&gt; 
 &lt;li&gt;重启 KOReader，在菜单中找到：&lt;/li&gt; 
&lt;/ol&gt; 
&lt;pre&gt;&lt;code&gt;工具 → 微信读书
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;后续更新插件可在 &lt;strong&gt;微信读书 → 设置 → 更新管理&lt;/strong&gt; 菜单中在线更新。&lt;/p&gt; 
&lt;h2&gt;登录与认证&lt;/h2&gt; 
&lt;p&gt;插件只支持微信扫码登录，扫码前需要先为账号开通微信读书 Skill：&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt;手机打开&lt;strong&gt;微信读书 App&lt;/strong&gt;。&lt;/li&gt; 
 &lt;li&gt;进入 &lt;strong&gt;我 → 设置 → 微信读书 Skill&lt;/strong&gt;。&lt;/li&gt; 
 &lt;li&gt;点击 &lt;strong&gt;获取 API Key&lt;/strong&gt;，确认已经生成个人官方 API Key。&lt;/li&gt; 
 &lt;li&gt;在 KOReader 打开 &lt;strong&gt;工具 → 微信读书 → 微信扫码登录&lt;/strong&gt;。&lt;/li&gt; 
 &lt;li&gt;使用微信扫码并在手机端确认；若手机显示四位验证码，请在 KOReader 中输入。&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h2&gt;功能&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;主菜单&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;书架&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;公众号&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/main_manu.png&quot; alt=&quot;主菜单&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/bookshelf.png&quot; alt=&quot;微信读书书架&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/bookshelf_wp.png&quot; alt=&quot;公众号&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;阅读时间上报&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;阅读统计&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;阅读进度同步&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/read_report.png&quot; alt=&quot;阅读时间上报&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/read_stats.png&quot; alt=&quot;阅读统计&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/read_progress.png&quot; alt=&quot;阅读进度同步&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;多选章节下载&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;章节预下载&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;下载全书&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/download_multi_chapter.png&quot; alt=&quot;多选章节下载&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/pre_download_next_chapter.png&quot; alt=&quot;章节预下载&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/download.png&quot; alt=&quot;下载全书&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;书籍详情&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;书评&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;划线和想法&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/book_detail.png&quot; alt=&quot;书籍详情&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/book_review.png&quot; alt=&quot;书评&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/thought.png&quot; alt=&quot;划线和想法&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;搜索书籍&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;快捷菜单&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;设置&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/book_search.png&quot; alt=&quot;搜索书籍&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/quick_menu.png&quot; alt=&quot;快捷菜单&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/setting.png&quot; alt=&quot;设置&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;SimpleUI / Zen_UI 集成&lt;/h2&gt; 
&lt;p&gt;插件提供统一的“微信读书书架”入口并支持集成到 SimpleUI和 ZenUI的快捷按钮中。(需要安装最新版 &lt;a href=&quot;https://github.com/doctorhetfield-cmd/simpleui.koplugin&quot;&gt;SimpleUI&lt;/a&gt; 和 &lt;a href=&quot;https://github.com/AnthonyGress/zen_ui.koplugin&quot;&gt;ZenUI&lt;/a&gt;插件)。&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;SimpleUI&lt;/strong&gt;：进入 &lt;code&gt;快捷操作&lt;/code&gt; 新建操作，类型选择 &lt;code&gt;插件 → 微信读书&lt;/code&gt;，再把该操作加入底部栏即可。如需使用本项目图标，将 &lt;code&gt;icons/weread-w-book.svg&lt;/code&gt; 或 &lt;code&gt;icons/weread-ink.png&lt;/code&gt; 复制到 SimpleUI 的自定义图标目录&lt;code&gt;koreader/setting/simpleui/sui_icons&lt;/code&gt;后，在快捷操作中选中它。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Zen_UI 底栏&lt;/strong&gt;：进入 &lt;code&gt;控件 → 按钮 → ➕ → 插件 → 微信读书&lt;/code&gt;，点击后直接打开微信读书书架。注册时会把 &lt;code&gt;weread-w-book.svg&lt;/code&gt; 同步到 KOReader 用户图标目录，供 ZenUI 自动匹配或手动选择；不会自动修改、添加或启用 Tab。&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Zen_UI 首页&lt;/strong&gt;：进入 &lt;code&gt;主页 → 小组件&lt;/code&gt;，启用“微信读书”组件。组件默认关闭，可由用户自行排序。&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;原生 KOReader 的 “工具 → 微信读书” 菜单保持不变。&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;SimpleUI&lt;/th&gt; 
   &lt;th style=&quot;text-align:center&quot;&gt;Zen_UI&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/simpleui_quick_menu.png&quot; alt=&quot;simpleui&quot; /&gt;&lt;/td&gt; 
   &lt;td style=&quot;text-align:center&quot;&gt;&lt;img src=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/screenshots/zenui_quick_menu.png&quot; alt=&quot;ZenUI&quot; /&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;菜单结构&lt;/h2&gt; 
&lt;pre&gt;&lt;code&gt;微信读书
├── 微信扫码登录 / 已经登录 · 账号名
├── 立即同步进度       （阅读微信读书缓存书籍时显示）
├── 书籍详情           （阅读微信读书缓存书籍时显示）
├── 显示划线和想法     （阅读书籍时显示，开关）
├── 划线和想法管理     （本地书与微信下载书共用；不修改 EPUB/KOReader 笔记）
│   ├── 匹配微信读书书目 / 已关联微信书籍：书名（下载书自动关联）
│   ├── 继续匹配（显示完成章节和划线条数）
│   ├── 选择章节匹配（树状目录、父子联动多选）
│   └── 清理划线和想法（再次匹配时下载最新数据）
├── 书架               书籍 / 公众号 Tab；书架内搜索、离线缓存、手动更新
├── weread收藏夹        已下载书籍（不包含单章）的本地入口
├── 搜索               搜索微信读书
├── 阅读时间上报        后台上报阅读时长
│   ├── 启用阅读时间上报
│   ├── 仅在阅读时上报
│   ├── 选择目标书籍
│   │   ├── 自动关联微信读书书籍
│   │   └── 手动设置上报书籍
│   └── 上报状态
├── 阅读统计            阅读时长/天数/排行/偏好可视化（页内 周/月/年/总 tab 切换，可翻阅历史周期）
├── 设置
│   ├── 书架视图
│   │   ├── 列表模式（默认；适合连续滚动）
│   │   └── 封面模式（按屏幕自适应行列；仅加载当前页封面）
│   ├── 分页书架（仅列表模式；默认开启，关闭后使用连续滚动）
│   ├── 缓存管理
│   │   ├── 扫描并关联本地书籍
│   │   ├── 缓存清理
│   │   └── 缓存目录
│   ├── 进度管理
│   │   ├── 打开时拉取进度（默认关闭）
│   │   └── 关闭时上传进度（默认关闭）
│   ├── 下载设置
│   │   ├── 书籍图片（默认开启）
│   │   ├── 公众号文章图片（默认关闭）
│   │   ├── 隐藏脚注文本（默认关闭；开启需同时启用 KOReader 脚注弹框；仅影响新下载书籍）
│   │   └── 章节预下载
│   │       ├── 自动预下载下一章（默认关闭，开启时会确认网络卡顿风险）
│   │       ├── 预下载划线和想法（默认关闭，总开关关闭时不可操作）
│   │       └── 显示预下载提示（默认开启，总开关关闭时不可操作）
│   ├── 划线设置
│   │   ├── 划线边缘防误触（默认开启）
│   │   ├── 边缘区域：20%（可调 10%–40%）
│   │   └── 想法弹窗设置
│   │       ├── 位置：居中（可切换为 底部）
│   │       ├── 高度：62%（可调 20%–90%）
│   │       ├── 宽度：80%（仅居中时可用，40%–100%）
│   │       ├── 字体大小（相对文档字号，默认 -2；可切换为绝对字号）
│   │       ├── 字体对比度：默认（可调 -3–+9，最大为纯黑）
│   │       └── 点击左右区域翻页（默认关闭，底部与居中弹窗均生效）
│   │   └── 想法弹窗宽度：80%（仅居中时可用，40%–100%）
│   ├── 账号管理
│   │   ├── 账号状态
│   │   ├── 立即续期 Cookie
│   │   └── 清除账号数据
│   └── 关于
│       ├── 版本 x.y.z
│       ├── 作者：finlater
│       ├── 检查更新
│       ├── 每天自动检查一次（默认关闭）
│       └── 更新时优先使用代理（默认开启；代理失败会自动回退 GitHub）
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;贡献&lt;/h2&gt; 
&lt;p&gt;欢迎提交 issue 和 PR。提交前请阅读 &lt;a href=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt;。&lt;/p&gt; 
&lt;p&gt;XPointer 外部标注层仍是实验性功能，测试步骤和限制见 &lt;a href=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/docs/xpointer-overlay-prototype.md&quot;&gt;原型说明&lt;/a&gt;。&lt;/p&gt; 
&lt;h2&gt;许可证&lt;/h2&gt; 
&lt;p&gt;本项目代码采用 &lt;a href=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/LICENSE&quot;&gt;GNU Affero General Public License v3.0&lt;/a&gt;，SPDX 标识为 &lt;code&gt;AGPL-3.0-only&lt;/code&gt;，与 KOReader 使用的许可证保持一致。&lt;/p&gt; 
&lt;p&gt;修改、整合或再分发本项目时，必须遵守 AGPL-3.0，保留版权和许可证声明，并按许可证要求将本项目代码或其衍生作品开源。&lt;/p&gt; 
&lt;p&gt;&lt;code&gt;fonts/NotoEmoji-Regular.ttf&lt;/code&gt; 是第三方字体，采用 &lt;a href=&quot;https://raw.githubusercontent.com/finlater/weread.koplugin/main/fonts/LICENSE&quot;&gt;SIL Open Font License 1.1&lt;/a&gt;，不适用本项目的 AGPL-3.0。&lt;/p&gt; 
&lt;p&gt;Copyright © 2026 finlater and contributors.&lt;/p&gt; 
&lt;h2&gt;项目推荐&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;插件&lt;/th&gt; 
   &lt;th&gt;简介&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/finlater/kindlebtcontroller.koplugin&quot;&gt;kindlebtcontroller.koplugin&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;蓝牙手柄/遥控器控制 Kindle —— 翻页、调节亮度、章节跳转等 20+ 操作，按键完全可自定义。&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://github.com/finlater/one.koplugin&quot;&gt;one.koplugin&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;在 KOReader 上离线阅读「ONE · 一个」每日更新：一图、一文、一问答。&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/c27d4c29a8ce9348dc57f7b13f334acb9ce58eea5d05249f43b2d7520aae1513/finlater/weread.koplugin" medium="image" />
      
    </item>
    
    <item>
      <title>nickjvandyke/opencode.nvim</title>
      <link>https://github.com/nickjvandyke/opencode.nvim</link>
      <description>&lt;p&gt;Neovim 🤝 OpenCode in the flow that you already know.&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;opencode.nvim&lt;/h1&gt; 
&lt;p&gt;Neovim plugin that integrates with &lt;a href=&quot;https://opencode.ai/&quot;&gt;OpenCode&lt;/a&gt; to keep you in the flow that you already know.&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/user-attachments/assets/e85e021c-fa8f-466e-830c-c667b28f611e&quot;&gt;https://github.com/user-attachments/assets/e85e021c-fa8f-466e-830c-c667b28f611e&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;⭐ Motivation&lt;/h2&gt; 
&lt;p&gt;AI works best at small, focused scopes — as a pair programmer with the human driving. You stay in control, craft the code that matters, and keep your skills sharp. opencode.nvim just provides the context and connection to make that pairing seamless.&lt;/p&gt; 
&lt;p&gt;Rather than introduce yet another interaction model, opencode.nvim leverages OpenCode&#39;s existing TUI and API via standard Neovim interfaces. You keep your environment, your config, your flow.&lt;/p&gt; 
&lt;p&gt;For me, the best tools are the ones that &quot;just work.&quot; opencode.nvim is designed to be one of them.&lt;/p&gt; 
&lt;h2&gt;✨ Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Connect to &lt;em&gt;any&lt;/em&gt; OpenCode server, or start an integrated instance&lt;/li&gt; 
 &lt;li&gt;Inject editor context (cursor, selection, buffer, etc.)&lt;/li&gt; 
 &lt;li&gt;Input prompts with completions and highlights&lt;/li&gt; 
 &lt;li&gt;Select from built-in and custom prompts&lt;/li&gt; 
 &lt;li&gt;Execute OpenCode commands&lt;/li&gt; 
 &lt;li&gt;Accept/reject and reload OpenCode edits&lt;/li&gt; 
 &lt;li&gt;Handle OpenCode events as autocmds&lt;/li&gt; 
 &lt;li&gt;Simple, sensible, Vim-y defaults and interfaces&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;📦 Setup&lt;/h2&gt; 
&lt;p&gt;&lt;a href=&quot;https://neovim.io/doc/user/pack/#vim.pack&quot;&gt;vim.pack&lt;/a&gt; (recommended)&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;vim.pack.add({
  {
    src = &quot;https://github.com/nickjvandyke/opencode.nvim&quot;,
    version = vim.version.range(&quot;*&quot;), -- Latest stable release
  },
})

---@type opencode.Opts
vim.g.opencode_opts = {
  -- Your configuration, if any; goto definition on the type for details
}

-- Recommended/example keymaps
vim.keymap.set({ &quot;n&quot;, &quot;x&quot; }, &quot;&amp;lt;C-a&amp;gt;&quot;,   function() require(&quot;opencode&quot;).ask(&quot;@this: &quot;) end,                    { desc = &quot;Ask OpenCode…&quot; })
vim.keymap.set({ &quot;n&quot;, &quot;x&quot; }, &quot;&amp;lt;C-x&amp;gt;&quot;,   function() require(&quot;opencode&quot;).select() end,                          { desc = &quot;Select OpenCode…&quot; })
vim.keymap.set({ &quot;n&quot;, &quot;x&quot; }, &quot;go&quot;,      function() return require(&quot;opencode&quot;).operator(&quot;@this &quot;) end,         { desc = &quot;Append range to OpenCode&quot;, expr = true })
vim.keymap.set({ &quot;n&quot; },      &quot;goo&quot;,     function() return require(&quot;opencode&quot;).operator(&quot;@this &quot;) .. &quot;_&quot; end,  { desc = &quot;Append line to OpenCode&quot;, expr = true })
vim.keymap.set({ &quot;n&quot; },      &quot;&amp;lt;S-C-u&amp;gt;&quot;, function() require(&quot;opencode&quot;).command(&quot;session.half.page.up&quot;) end,   { desc = &quot;Scroll OpenCode up&quot; })
vim.keymap.set({ &quot;n&quot; },      &quot;&amp;lt;S-C-d&amp;gt;&quot;, function() require(&quot;opencode&quot;).command(&quot;session.half.page.down&quot;) end, { desc = &quot;Scroll OpenCode down&quot; })
&lt;/code&gt;&lt;/pre&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;a href=&quot;https://github.com/folke/lazy.nvim&quot;&gt;lazy.nvim&lt;/a&gt;&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;{
  &quot;nickjvandyke/opencode.nvim&quot;,
  version = &quot;*&quot;, -- Latest stable release
  config = function()
    ---@type opencode.Opts
    vim.g.opencode_opts = {
      -- Your configuration, if any; goto definition on the type for details
    }

    -- Recommended/example keymaps
    vim.keymap.set({ &quot;n&quot;, &quot;x&quot; }, &quot;&amp;lt;C-a&amp;gt;&quot;,   function() require(&quot;opencode&quot;).ask(&quot;@this: &quot;) end,                    { desc = &quot;Ask OpenCode…&quot; })
    vim.keymap.set({ &quot;n&quot;, &quot;x&quot; }, &quot;&amp;lt;C-x&amp;gt;&quot;,   function() require(&quot;opencode&quot;).select() end,                          { desc = &quot;Select OpenCode…&quot; })
    vim.keymap.set({ &quot;n&quot;, &quot;x&quot; }, &quot;go&quot;,      function() return require(&quot;opencode&quot;).operator(&quot;@this &quot;) end,         { desc = &quot;Append range to OpenCode&quot;, expr = true })
    vim.keymap.set({ &quot;n&quot; },      &quot;goo&quot;,     function() return require(&quot;opencode&quot;).operator(&quot;@this &quot;) .. &quot;_&quot; end,  { desc = &quot;Append line to OpenCode&quot;, expr = true })
    vim.keymap.set({ &quot;n&quot; },      &quot;&amp;lt;S-C-u&amp;gt;&quot;, function() require(&quot;opencode&quot;).command(&quot;session.half.page.up&quot;) end,   { desc = &quot;Scroll OpenCode up&quot; })
    vim.keymap.set({ &quot;n&quot; },      &quot;&amp;lt;S-C-d&amp;gt;&quot;, function() require(&quot;opencode&quot;).command(&quot;session.half.page.down&quot;) end, { desc = &quot;Scroll OpenCode down&quot; })
  end,
}
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;a href=&quot;https://github.com/nix-community/nixvim&quot;&gt;nixvim&lt;/a&gt;&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-nix&quot;&gt;programs.nixvim = {
  extraPlugins = [
    pkgs.vimPlugins.opencode-nvim
  ];
};
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;h3&gt;Integrations&lt;/h3&gt; 
&lt;p&gt;The below examples are specific, but generalize to other plugins.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;a href=&quot;https://github.com/folke/snacks.nvim&quot;&gt;snacks.nvim&lt;/a&gt;&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;snacks&quot;).setup({
  input = {
    enabled = true, -- Enhances Ask
  },
  picker = {
    enabled = true, -- Enhances Select
    win = {
      input = {
        keys = {
          [&quot;&amp;lt;a-o&amp;gt;&quot;] = { &quot;opencode_send&quot;, mode = { &quot;n&quot;, &quot;i&quot; } },
        },
      },
    },
    actions = {
      opencode_send = function(picker) ---@param picker snacks.Picker
        local items = vim.tbl_map(function(item) ---@param item snacks.picker.Item
          return item.file
            and require(&quot;opencode&quot;).format({ path = item.file, from = item.pos, to = item.end_pos })
            or item.text
        end, picker:selected({ fallback = true }))

        require(&quot;opencode&quot;).prompt(table.concat(items, &quot;, &quot;) .. &quot; &quot;)
      end,
    },
  },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;a href=&quot;https://github.com/saghen/blink.cmp&quot;&gt;blink.cmp&lt;/a&gt;&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- Configure blink.cmp to show completions in Ask from opencode.nvim&#39;s in-process LSP.
-- Only applicable when using snacks.input.
require(&quot;blink.cmp&quot;).setup({
  sources = {
    -- Either enable LSP (and optionally buffer) source globally
    default = { &#39;lsp&#39;, &#39;buffer&#39; },
    -- Or only for Ask
    per_filetype = {
      opencode_ask = { &#39;lsp&#39;, &#39;buffer&#39; },
    },
    -- Display buffer completions (if included above) when no LSP completions are available
    providers = { lsp = { fallbacks = {} } },
  },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;details&gt; 
 &lt;summary&gt;&lt;a href=&quot;https://github.com/nvim-lualine/lualine.nvim&quot;&gt;lualine.nvim&lt;/a&gt;&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;require(&quot;lualine&quot;).setup({
  sections = {
    lualine_z = {
      {
        -- Show the currently connected server and its status
        require(&quot;opencode&quot;).statusline,
      },
    },
  },
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;Run &lt;code&gt;:checkhealth opencode&lt;/code&gt; after setup.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h2&gt;⚙️ Configuration&lt;/h2&gt; 
&lt;p&gt;opencode.nvim provides a rich and reliable default experience — see all available options and their defaults &lt;a href=&quot;https://raw.githubusercontent.com/nickjvandyke/opencode.nvim/main/lua/opencode/config.lua&quot;&gt;here&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Contexts&lt;/h3&gt; 
&lt;p&gt;opencode.nvim replaces placeholders in prompts with the corresponding context:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Placeholder&lt;/th&gt; 
   &lt;th&gt;Context&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;@this&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Range or selection if any, else cursor position&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;@buffer&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Current buffer&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;@buffers&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Open buffers&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;@diagnostics&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Diagnostics within the range or selection if any, else in the current buffer&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;@marks&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Global marks&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;@quickfix&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Quickfix list&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;@visible&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Visible text&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-tip&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-light-bulb mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M8 1.5c-2.363 0-4 1.69-4 3.75 0 .984.424 1.625.984 2.304l.214.253c.223.264.47.556.673.848.284.411.537.896.621 1.49a.75.75 0 0 1-1.484.211c-.04-.282-.163-.547-.37-.847a8.456 8.456 0 0 0-.542-.68c-.084-.1-.173-.205-.268-.32C3.201 7.75 2.5 6.766 2.5 5.25 2.5 2.31 4.863 0 8 0s5.5 2.31 5.5 5.25c0 1.516-.701 2.5-1.328 3.259-.095.115-.184.22-.268.319-.207.245-.383.453-.541.681-.208.3-.33.565-.37.847a.751.751 0 0 1-1.485-.212c.084-.593.337-1.078.621-1.489.203-.292.45-.584.673-.848.075-.088.147-.173.213-.253.561-.679.985-1.32.985-2.304 0-2.06-1.637-3.75-4-3.75ZM5.75 12h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1 0-1.5ZM6 15.25a.75.75 0 0 1 .75-.75h2.5a.75.75 0 0 1 0 1.5h-2.5a.75.75 0 0 1-.75-.75Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Tip&lt;/p&gt;
 &lt;p&gt;OpenCode reads referenced files from disk — save your changes!&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Prompts&lt;/h3&gt; 
&lt;p&gt;Select prompts to review, explain, and improve your code:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Name&lt;/th&gt; 
   &lt;th&gt;Prompt&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;diagnostics&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Explain &lt;code&gt;@diagnostics&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;document&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Add comments documenting &lt;code&gt;@this&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;explain&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Explain &lt;code&gt;@this&lt;/code&gt; and its context&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;fix&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Fix &lt;code&gt;@diagnostics&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;implement&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Implement &lt;code&gt;@this&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;optimize&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Optimize &lt;code&gt;@this&lt;/code&gt; for performance and readability&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;review&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Review &lt;code&gt;@this&lt;/code&gt; for correctness and readability&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;test&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Add tests for &lt;code&gt;@this&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Server&lt;/h3&gt; 
&lt;p&gt;Run &lt;code&gt;opencode&lt;/code&gt; locally however you like and opencode.nvim will find them! Or point &lt;code&gt;vim.g.opencode_opts.server.url&lt;/code&gt; to a specific server, including remotes.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;You &lt;em&gt;must&lt;/em&gt; run &lt;code&gt;opencode&lt;/code&gt; with the &lt;code&gt;--port&lt;/code&gt; flag to expose its server.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;If opencode.nvim can&#39;t find a running &lt;code&gt;opencode&lt;/code&gt;, it starts one via &lt;code&gt;vim.g.opencode_opts.server.start&lt;/code&gt;, defaulting to &lt;code&gt;term://opencode --port&lt;/code&gt;.&lt;/p&gt; 
&lt;details&gt; 
 &lt;summary&gt;Start via &lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/terminal.md&quot;&gt;snacks.terminal&lt;/a&gt;&lt;/summary&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;local opencode_cmd = &#39;opencode --port&#39;
---@type snacks.terminal.Opts
local snacks_terminal_opts = {
  win = {
    position = &#39;right&#39;,
    enter = false,
  },
}

---@type opencode.Opts
vim.g.opencode_opts = {
  server = {
    start = function()
      require(&#39;snacks.terminal&#39;).open(opencode_cmd, snacks_terminal_opts)
    end,
  },
}

-- Can also leverage toggle functionality.
-- If you use &amp;lt;leader&amp;gt; here, remove &#39;t&#39; — otherwise Neovim will add input delay to your &amp;lt;leader&amp;gt; when typing in the terminal to watch for the mapping.
vim.keymap.set({ &#39;n&#39;, &#39;t&#39; }, &#39;&amp;lt;C-.&amp;gt;&#39;, function()
  require(&#39;snacks.terminal&#39;).toggle(opencode_cmd, snacks_terminal_opts)
end, { desc = &#39;Toggle OpenCode&#39; })

-- Optionally show upon submitting prompt
vim.api.nvim_create_autocmd(&#39;User&#39;, {
  pattern = { &#39;OpencodeEvent:tui.command.execute&#39; },
  callback = function(args)
    ---@type opencode.server.Event
    local event = args.data.event
    if event.properties.command == &#39;prompt.submit&#39; then
      local win = require(&#39;snacks.terminal&#39;).get(opencode_cmd, { create = false })
      if win then
        win:show()
      end
    end
  end,
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;/details&gt; 
&lt;p&gt;opencode.nvim prioritizes focused pairing with a single OpenCode instance. As such, it connects to an OpenCode server before interacting with it, listening for events and targeting it for future interactions. Consider disabling &lt;code&gt;vim.g.opencode_opts.server.connect&lt;/code&gt; if you frequently jump between servers or don&#39;t care for disruptive synchronous events like permission requests.&lt;/p&gt; 
&lt;h2&gt;🚀 Usage&lt;/h2&gt; 
&lt;h3&gt;Ask — &lt;code&gt;require(&quot;opencode&quot;).ask()&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;Input a prompt for OpenCode.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Passes the text to Prompt.&lt;/li&gt; 
 &lt;li&gt;Press &lt;code&gt;&amp;lt;Up&amp;gt;&lt;/code&gt; to browse recent asks.&lt;/li&gt; 
 &lt;li&gt;Highlights and completes contexts and OpenCode subagents. 
  &lt;ul&gt; 
   &lt;li&gt;Press &lt;code&gt;&amp;lt;Tab&amp;gt;&lt;/code&gt; to trigger built-in completion.&lt;/li&gt; 
   &lt;li&gt;Provided by in-process LSP when using &lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/input.md&quot;&gt;snacks.input&lt;/a&gt;.&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Select — &lt;code&gt;require(&quot;opencode&quot;).select()&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;Select from all opencode.nvim functionality.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Prompts&lt;/li&gt; 
 &lt;li&gt;Commands&lt;/li&gt; 
 &lt;li&gt;Servers&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Highlights and previews items when using &lt;a href=&quot;https://github.com/folke/snacks.nvim/raw/main/docs/picker.md&quot;&gt;snacks.picker&lt;/a&gt;.&lt;/p&gt; 
&lt;h3&gt;Prompt — &lt;code&gt;require(&quot;opencode&quot;).prompt()&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;Prompt OpenCode.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Injects configured contexts.&lt;/li&gt; 
 &lt;li&gt;Trailing space appends; trailing &quot;...&quot; opens in Ask.&lt;/li&gt; 
 &lt;li&gt;OpenCode will interpret references to files or subagents.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Operator — &lt;code&gt;require(&quot;opencode&quot;).operator()&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;Wraps Prompt as an operator, supporting ranges and dot-repeat.&lt;/p&gt; 
&lt;h3&gt;Command — &lt;code&gt;require(&quot;opencode&quot;).command()&lt;/code&gt;&lt;/h3&gt; 
&lt;p&gt;Command OpenCode:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Command&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;agent.cycle&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Cycle selected agent&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;prompt.clear&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Clear current prompt&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;prompt.submit&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Submit current prompt&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;session.compact&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Compact current session&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;session.first&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Jump to first message in session&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;session.half.page.up&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll messages up half a page&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;session.half.page.down&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll messages down half a page&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;session.interrupt&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Interrupt current session&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;session.last&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Jump to last message in current session&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;session.new&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Start new session&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;session.page.up&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll messages up one page&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;session.page.down&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Scroll messages down one page&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;session.select&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Select session&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;session.share&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Share current session&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;session.redo&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Redo last undone action in current session&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;session.undo&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Undo last action in current session&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h2&gt;👀 Events&lt;/h2&gt; 
&lt;p&gt;opencode.nvim forwards the connected OpenCode&#39;s Server-Sent-Events as an &lt;code&gt;OpencodeEvent&lt;/code&gt; autocmd:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-lua&quot;&gt;-- Handle OpenCode events
vim.api.nvim_create_autocmd(&quot;User&quot;, {
  pattern = &quot;OpencodeEvent:*&quot;, -- Optionally filter event types
  callback = function(args)
    ---@type opencode.server.Event
    local event = args.data.event
    ---@type string
    local url = args.data.url

    -- See the available event types and their properties
    vim.notify(vim.inspect(event))
    -- Do something useful
    if event.type == &quot;session.status&quot; then
      vim.notify(&quot;OpenCode status updated: &quot; .. event.properties.status.type)
    end
  end,
})
&lt;/code&gt;&lt;/pre&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;Event payloads are passed through from the OpenCode as-is and follow its schema. They may change with OpenCode releases, so treat them as best-effort rather than a stable API contract.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h3&gt;Edits&lt;/h3&gt; 
&lt;p&gt;When the connected OpenCode edits a file, opencode.nvim reloads the corresponding buffer in real-time. &lt;code&gt;vim.o.autoread = true&lt;/code&gt; is set automatically to enable this unless you&#39;ve explicitly configured it.&lt;/p&gt; 
&lt;h3&gt;Permissions&lt;/h3&gt; 
&lt;p&gt;When the connected OpenCode requests a permission, opencode.nvim asks you to approve or deny it.&lt;/p&gt; 
&lt;h4&gt;Edits&lt;/h4&gt; 
&lt;p&gt;When the connected Opencode requests an edit, opencode.nvim opens the target file in a new tab and uses Neovim&#39;s &lt;code&gt;:diffpatch&lt;/code&gt; to display the proposed changes side-by-side. See &lt;code&gt;:h &#39;diffopt&#39;&lt;/code&gt; for customization.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Keymap&lt;/th&gt; 
   &lt;th&gt;Function&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;da&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Accept the entire edit request&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;dr&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Reject the entire edit request&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;]c/[c&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Next/prev change&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;dp&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Natively accept &lt;em&gt;only&lt;/em&gt; the hunk under the cursor, and reject the edit request&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;do&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Natively reject &lt;em&gt;only&lt;/em&gt; the hunk under the cursor, and reject the edit request&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;q&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Close the diff&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/e7a608b5f8cdd77df3ec5248648659832f4b1cf1ff31c53d29e879eb560ec87e/nickjvandyke/opencode.nvim" medium="image" />
      
    </item>
    
    <item>
      <title>lite-xl/lite-xl</title>
      <link>https://github.com/lite-xl/lite-xl</link>
      <description>&lt;p&gt;A lightweight text editor written in Lua&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://lite-xl.com&quot;&gt;https://lite-xl.com&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Lite XL&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/lite-xl/lite-xl/actions/workflows/build.yml&quot;&gt;&lt;img src=&quot;https://github.com/lite-xl/lite-xl/actions/workflows/build.yml/badge.svg?sanitize=true&quot; alt=&quot;CI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://discord.gg/UQKnzBhY5H&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/847122429742809208?label=discord&amp;amp;logo=discord&quot; alt=&quot;Discord Badge Image&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://user-images.githubusercontent.com/433545/111063905-66943980-84b1-11eb-9040-3876f1133b20.png&quot; alt=&quot;screenshot-dark&quot; /&gt;&lt;/p&gt; 
&lt;p&gt;A lightweight text editor written in Lua, adapted from &lt;a href=&quot;https://github.com/rxi/lite&quot;&gt;lite&lt;/a&gt;.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/lite-xl/lite-xl/releases/latest&quot;&gt;Get Lite XL&lt;/a&gt;&lt;/strong&gt; — Download for Windows, Linux and Mac OS.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/lite-xl/lite-xl-plugins&quot;&gt;Get plugins&lt;/a&gt;&lt;/strong&gt; — Add additional functionality, adapted for Lite XL.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/lite-xl/lite-xl-colors&quot;&gt;Get color themes&lt;/a&gt;&lt;/strong&gt; — Add additional colors themes.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Please refer to our &lt;a href=&quot;https://lite-xl.com&quot;&gt;website&lt;/a&gt; for the user and developer documentation, including &lt;a href=&quot;https://lite-xl.com/setup/building-from-source/&quot;&gt;build&lt;/a&gt; instructions details. A quick build guide is described below.&lt;/p&gt; 
&lt;p&gt;Lite XL has support for high DPI display on Windows and Linux and, since 1.16.7 release, it supports &lt;strong&gt;retina displays&lt;/strong&gt; on macOS.&lt;/p&gt; 
&lt;p&gt;Please note that Lite XL is compatible with lite for most plugins and all color themes. We provide a separate lite-xl-plugins repository for Lite XL, because in some cases some adaptations may be needed to make them work better with Lite XL. The repository with modified plugins is &lt;a href=&quot;https://github.com/lite-xl/lite-xl-plugins&quot;&gt;https://github.com/lite-xl/lite-xl-plugins&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The changes and differences between Lite XL and rxi/lite are listed in the &lt;a href=&quot;https://github.com/lite-xl/lite-xl/raw/master/changelog.md&quot;&gt;changelog&lt;/a&gt;.&lt;/p&gt; 
&lt;h2&gt;Overview&lt;/h2&gt; 
&lt;p&gt;Lite XL is derived from &lt;a href=&quot;https://github.com/rxi/lite&quot;&gt;lite&lt;/a&gt;. It is a lightweight text editor written mostly in Lua — it aims to provide something practical, pretty, &lt;em&gt;small&lt;/em&gt; and fast easy to modify and extend, or to use without doing either.&lt;/p&gt; 
&lt;p&gt;The aim of Lite XL compared to lite is to be more user friendly, improve the quality of font rendering, and reduce CPU usage.&lt;/p&gt; 
&lt;h2&gt;Customization&lt;/h2&gt; 
&lt;p&gt;Additional functionality can be added through plugins which are available in the &lt;a href=&quot;https://github.com/rxi/lite-plugins&quot;&gt;plugins repository&lt;/a&gt; or in the &lt;a href=&quot;https://github.com/lite-xl/lite-xl-plugins&quot;&gt;Lite XL plugins repository&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Additional color themes can be found in the &lt;a href=&quot;https://github.com/lite-xl/lite-xl-colors&quot;&gt;colors repository&lt;/a&gt;. These color themes are bundled with all releases of Lite XL by default.&lt;/p&gt; 
&lt;h2&gt;Quick Build Guide&lt;/h2&gt; 
&lt;p&gt;To compile Lite XL yourself, you must have the following dependencies installed via your desired package manager, or manually.&lt;/p&gt; 
&lt;h3&gt;Prerequisites&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;Meson (&amp;gt;=0.63)&lt;/li&gt; 
 &lt;li&gt;Ninja&lt;/li&gt; 
 &lt;li&gt;SDL2&lt;/li&gt; 
 &lt;li&gt;PCRE2&lt;/li&gt; 
 &lt;li&gt;FreeType2&lt;/li&gt; 
 &lt;li&gt;Lua 5.4&lt;/li&gt; 
 &lt;li&gt;A working C compiler (GCC / Clang / MSVC)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;SDL2, PCRE2, FreeType2 and Lua will be downloaded by Meson if &lt;code&gt;--wrap-mode=forcefallback&lt;/code&gt; or &lt;code&gt;--wrap-mode=default&lt;/code&gt; is specified.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;MSVC is used in the CI, but MSVC-compiled binaries are not distributed officially or tested extensively for bugs.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;On Linux, you may install the following dependencies for the SDL2 X11 and/or Wayland backend to work properly:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;libX11-devel&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;libXi-devel&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;libXcursor-devel&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;libxkbcommon-devel&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;libXrandr-devel&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;wayland-devel&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;wayland-protocols-devel&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;dbus-devel&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;ibus-devel&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The following command can be used to install the dependencies in Ubuntu:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;apt-get install python3.8 python3-pip build-essential git cmake wayland-protocols libsdl2-dev
pip3 install meson ninja
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Please refer to &lt;a href=&quot;https://github.com/lite-xl/lite-xl-build-box&quot;&gt;lite-xl-build-box&lt;/a&gt; for a working Linux build environment used to package official Lite XL releases.&lt;/p&gt; 
&lt;p&gt;On macOS, you must install bash via Brew, as the default bash version on macOS is antiquated and may not run the build script correctly.&lt;/p&gt; 
&lt;h3&gt;Building&lt;/h3&gt; 
&lt;p&gt;You can use &lt;code&gt;scripts/build.sh&lt;/code&gt; to set up Lite XL and build it.&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;$ bash build.sh --help
# Usage: scripts/build.sh &amp;lt;OPTIONS&amp;gt;
# 
# Available options:
# 
# -b --builddir DIRNAME         Sets the name of the build directory (not path).
#                               Default: &#39;build-x86_64-linux&#39;.
#    --debug                    Debug this script.
# -f --forcefallback            Force to build dependencies statically.
# -h --help                     Show this help and exit.
# -d --debug-build              Builds a debug build.
# -p --prefix PREFIX            Install directory prefix. Default: &#39;/&#39;.
# -B --bundle                   Create an App bundle (macOS only)
# -A --addons                   Add in addons
# -P --portable                 Create a portable binary package.
# -r --reconfigure              Tries to reuse the meson build directory, if possible.
#                               Default: Deletes the build directory and recreates it.
# -O --pgo                      Use profile guided optimizations (pgo).
#                               macOS: disabled when used with --bundle,
#                               Windows: Implicit being the only option.
#    --cross-platform PLATFORM  Cross compile for this platform.
#                               The script will find the appropriate
#                               cross file in &#39;resources/cross&#39;.
#    --cross-arch ARCH          Cross compile for this architecture.
#                               The script will find the appropriate
#                               cross file in &#39;resources/cross&#39;.
#    --cross-file CROSS_FILE    Cross compile with the given cross file.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Alternatively, you can use the following commands to customize the build:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;meson setup --buildtype=release --prefix &amp;lt;prefix&amp;gt; build
meson compile -C build
DESTDIR=&quot;$(pwd)/lite-xl&quot; meson install --skip-subprojects -C build
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;where &lt;code&gt;&amp;lt;prefix&amp;gt;&lt;/code&gt; might be one of &lt;code&gt;/&lt;/code&gt;, &lt;code&gt;/usr&lt;/code&gt; or &lt;code&gt;/opt&lt;/code&gt;, the default is &lt;code&gt;/&lt;/code&gt;. To build a bundle application on macOS:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;meson setup --buildtype=release --Dbundle=true --prefix / build
meson compile -C build
DESTDIR=&quot;$(pwd)/Lite XL.app&quot; meson install --skip-subprojects -C build
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Please note that the package is relocatable to any prefix and the option prefix affects only the place where the application is actually installed.&lt;/p&gt; 
&lt;h2&gt;Installing Prebuilt&lt;/h2&gt; 
&lt;p&gt;Head over to &lt;a href=&quot;https://github.com/lite-xl/lite-xl/releases&quot;&gt;releases&lt;/a&gt; and download the version for your operating system.&lt;/p&gt; 
&lt;p&gt;The prebuilt releases supports the following OSes:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Windows 7 and above&lt;/li&gt; 
 &lt;li&gt;Ubuntu 18.04 and above (glibc 2.27 and above)&lt;/li&gt; 
 &lt;li&gt;OS X El Capitan and above (version 10.11 and above)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Some distributions may provide custom binaries for their platforms.&lt;/p&gt; 
&lt;h3&gt;Windows&lt;/h3&gt; 
&lt;p&gt;Lite XL comes with installers on Windows for typical installations. Alternatively, we provide ZIP archives that you can download and extract anywhere and run directly.&lt;/p&gt; 
&lt;p&gt;To make Lite XL portable (e.g. running Lite XL from a thumb drive), simply create a &lt;code&gt;user&lt;/code&gt; folder where &lt;code&gt;lite-xl.exe&lt;/code&gt; is located. Lite XL will load and store all your configurations and plugins in the folder.&lt;/p&gt; 
&lt;h3&gt;macOS&lt;/h3&gt; 
&lt;p&gt;We provide DMG files for macOS. Simply drag the program into your Applications folder.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Important&lt;/strong&gt; Newer versions of Lite XL are signed with a self-signed certificate, so you&#39;ll have to follow these steps when running Lite XL for the first time.&lt;/p&gt; 
 &lt;ol&gt; 
  &lt;li&gt;Find Lite XL in Finder (do not open it in Launchpad).&lt;/li&gt; 
  &lt;li&gt;Control-click Lite XL, then choose &lt;code&gt;Open&lt;/code&gt; from the shortcut menu.&lt;/li&gt; 
  &lt;li&gt;Click &lt;code&gt;Open&lt;/code&gt; in the popup menu.&lt;/li&gt; 
 &lt;/ol&gt; 
 &lt;p&gt;The correct steps may vary between macOS versions, so you should refer to the &lt;a href=&quot;https://support.apple.com/en-my/guide/mac-help/mh40616/mac&quot;&gt;macOS User Guide&lt;/a&gt;.&lt;/p&gt; 
 &lt;p&gt;On an older version of Lite XL, you will need to run these commands instead:&lt;/p&gt; 
 &lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;# clears attributes from the directory
xattr -cr /Applications/Lite\ XL.app
&lt;/code&gt;&lt;/pre&gt; 
 &lt;p&gt;Otherwise, macOS will display a &lt;strong&gt;very misleading error&lt;/strong&gt; saying that the application is damaged.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h3&gt;Linux&lt;/h3&gt; 
&lt;p&gt;Unzip the file and &lt;code&gt;cd&lt;/code&gt; into the &lt;code&gt;lite-xl&lt;/code&gt; directory:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;tar -xzf &amp;lt;file&amp;gt;
cd lite-xl
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To run lite-xl without installing:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;./lite-xl
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To install lite-xl copy files over into appropriate directories:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;rm -rf  $HOME/.local/share/lite-xl $HOME/.local/bin/lite-xl
mkdir -p $HOME/.local/bin &amp;amp;&amp;amp; cp lite-xl $HOME/.local/bin/
mkdir -p $HOME/.local/share/lite-xl &amp;amp;&amp;amp; cp -r data/* $HOME/.local/share/lite-xl/
&lt;/code&gt;&lt;/pre&gt; 
&lt;h4&gt;Add Lite XL to PATH&lt;/h4&gt; 
&lt;p&gt;To run Lite XL from the command line, you must add it to PATH.&lt;/p&gt; 
&lt;p&gt;If &lt;code&gt;$HOME/.local/bin&lt;/code&gt; is not in PATH:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;echo -e &#39;export PATH=$PATH:$HOME/.local/bin&#39; &amp;gt;&amp;gt; $HOME/.bashrc
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Alternatively on recent versions of GNOME and KDE Plasma, you can add &lt;code&gt;$HOME/.local/bin&lt;/code&gt; to PATH via &lt;code&gt;~/.config/environment.d/envvars.conf&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-ini&quot;&gt;PATH=$HOME/.local/bin:$PATH
&lt;/code&gt;&lt;/pre&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;Note&lt;/strong&gt; Some systems might not load &lt;code&gt;.bashrc&lt;/code&gt; when logging in. This can cause problems with launching applications from the desktop / menu.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;h4&gt;Add Lite XL to application launchers&lt;/h4&gt; 
&lt;p&gt;To get the icon to show up in app launcher, you need to create a desktop entry and put it into &lt;code&gt;/usr/share/applications&lt;/code&gt; or &lt;code&gt;~/.local/share/applications&lt;/code&gt;.&lt;/p&gt; 
&lt;p&gt;Here is an example for a desktop entry in &lt;code&gt;~/.local/share/applications/com.lite_xl.LiteXL.desktop&lt;/code&gt;, assuming Lite XL is in PATH:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-ini&quot;&gt;[Desktop Entry]
Type=Application
Name=Lite XL
Comment=A lightweight text editor written in Lua
Exec=lite-xl %F
Icon=lite-xl
Terminal=false
StartupWMClass=lite-xl
Categories=Development;IDE;
MimeType=text/plain;inode/directory;
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;To get the icon to show up in app launcher immediately, run:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;xdg-desktop-menu forceupdate
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Alternatively, you may log out and log in again.&lt;/p&gt; 
&lt;h4&gt;Uninstall&lt;/h4&gt; 
&lt;p&gt;To uninstall Lite XL, run:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-sh&quot;&gt;rm -f $HOME/.local/bin/lite-xl
rm -rf $HOME/.local/share/icons/hicolor/scalable/apps/lite-xl.svg \
          $HOME/.local/share/applications/com.lite_xl.LiteXL.desktop \
          $HOME/.local/share/metainfo/com.lite_xl.LiteXL.appdata.xml \
          $HOME/.local/share/lite-xl
&lt;/code&gt;&lt;/pre&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Any additional functionality that can be added through a plugin should be done as a plugin, after which a pull request to the &lt;a href=&quot;https://github.com/lite-xl/lite-xl-plugins&quot;&gt;Lite XL plugins repository&lt;/a&gt; can be made.&lt;/p&gt; 
&lt;p&gt;Pull requests to improve or modify the editor itself are welcome. See &lt;a href=&quot;https://raw.githubusercontent.com/lite-xl/lite-xl/master/CONTRIBUTING.md&quot;&gt;CONTRIBUTING.md&lt;/a&gt; for more details.&lt;/p&gt; 
&lt;h2&gt;Licenses&lt;/h2&gt; 
&lt;p&gt;This project is free software; you can redistribute it and/or modify it under the terms of the MIT license. See &lt;a href=&quot;https://raw.githubusercontent.com/lite-xl/lite-xl/master/LICENSE&quot;&gt;LICENSE&lt;/a&gt; for details.&lt;/p&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/lite-xl/lite-xl/master/licenses/licenses.md&quot;&gt;licenses&lt;/a&gt; file for details on licenses used by the required dependencies.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/d9fa95054dfdb83d16947193384c9490882b074439dd749b7c01ee9ee53eea1f/lite-xl/lite-xl" medium="image" />
      
    </item>
    
    <item>
      <title>bol-van/zapret-win-bundle</title>
      <link>https://github.com/bol-van/zapret-win-bundle</link>
      <description>&lt;p&gt;zapret and blockcheck binary bundle for windows&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;zapret winws bundle for windows&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/bol-van/zapret&quot;&gt;main zapret1 repository&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://github.com/bol-van/zapret2&quot;&gt;main zapret2 repository&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;requirements :&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Windows 7 x64, Windows server 2008 R2 (ESU updates or windivert files replacement required)&lt;/li&gt; 
 &lt;li&gt;Windows 8+ x64, Windows server 2012+ (may require to disable secure boot)&lt;/li&gt; 
 &lt;li&gt;Windows 11+ ARM64, Windows server 2025+ (requires testsigning mode)&lt;/li&gt; 
 &lt;li&gt;Windows Server requires installing of wireless networking feature&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Что это&lt;/h3&gt; 
&lt;p&gt;Сборка, обьединяющая zapret1 и zapret2 под windows, включающая в себя минимальный cygwin комплект и blockcheck.&lt;/p&gt; 
&lt;p&gt;Это не однокнопочное решение, готовых стратегий и кнопки &quot;открыть сайты&quot; нет. Нужно понимать как работает zapret, иначе бесполезно.&lt;/p&gt; 
&lt;h3&gt;Краткое описание файлов&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;_CMD_ADMIN.cmd&lt;/code&gt; : открыть командную строку под администратором&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;winws.exe&lt;/code&gt; : главный компонент zapret, средство обхода DPI, версия nfqws для windows&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;winws2.exe&lt;/code&gt; : главный компонент zapret2, средство обхода DPI, версия nfqws2 для windows&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;preset1_example.cmd&lt;/code&gt; : интерактивный запуск стратегии-примера на базе winws (не является готовым лекарством)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;preset2_example.cmd&lt;/code&gt; : интерактивный запуск стратегии-примера на базе winws2 (не является готовым лекарством)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;preset2_wireguard.cmd&lt;/code&gt; : интерактивный запуск обхода блокировки wireguard протокола на любых портах&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;service*.cmd&lt;/code&gt; : установка и управление службой windows (режим неинтерактивного автозапуска). НЕ ЗАПУСКАТЬ БЕЗ РЕДАКТИРОВАНИЯ !&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;enable_timestamps.cmd&lt;/code&gt; : включить таймштампы tcp. по умолчанию отключены. требуются для ts fooling.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;windivert_delete.cmd&lt;/code&gt; : остановить и удалить драйвер windivert&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;killall.exe&lt;/code&gt; : программа из cygwin для посылки unix сигналов winws&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;elevator.exe&lt;/code&gt; : запускает программы от имени администратора&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;cygwin\cygwin.cmd&lt;/code&gt; : запуск командной строки cygwin под текущим пользователем&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;cygwin\cygwin-admin.cmd&lt;/code&gt; : запуск командной строки cygwin под администратором&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;blockcheck\blockcheck.cmd&lt;/code&gt; : анализатор способов обхода DPI. Запускать только с остановленным zapret и другими средствами обхода DPI !&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;blockcheck\blockcheck-kyber.cmd&lt;/code&gt; : то же самое, но используется CURL с многопакетным TLS Client Hello&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;blockcheck\blockcheck2.cmd&lt;/code&gt; : анализатор способов обхода DPI на базе winws2. Запускать только с остановленным zapret и другими средствами обхода DPI !&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;blockcheck\blockcheck2-kyber.cmd&lt;/code&gt; : то же самое, но используется CURL с многопакетным TLS Client Hello&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;ARM64 подготовка&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;запустите &lt;code&gt;arm64/install_arm64.cmd&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;перезагрузите систему, если режим testsigning не был включен ранее. надпись &quot;тестовый режим&quot; должна быть на рабочем столе справа внизу.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;WIN7 подготовка&lt;/h3&gt; 
&lt;p&gt;Если windivert не работает как есть запустите &lt;code&gt;win7/install_win7.cmd&lt;/code&gt;. Или накатите обновления ESU.&lt;/p&gt; 
&lt;h3&gt;АНТИВИРУСЫ&lt;/h3&gt; 
&lt;p&gt;windivert может вызвать реакцию антивируса. windivert - это инструмент для перехвата и фильтрации трафика, необходимый для работы zapret. Замена iptables и NFQUEUE в Linux, которых нет под Windows. Он может использоваться как хорошими, так и плохими программами, но сам по себе не является вирусом. Драйвер windivert64.sys подписан для возможности загрузки в 64-битное ядро windows. Любой желающий может сравнить файлы с &lt;a href=&quot;https://reqrypt.org/download&quot;&gt;оригиналами&lt;/a&gt; от автора. Но антивирусы склонны относить подобное к классам повышенного риска или хакерским инструментам. В случае проблем используйте исключения или выключайте антивирус совсем.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h3&gt;What is it ?&lt;/h3&gt; 
&lt;p&gt;Combined zapret1 and zapret2 compilation for windows with minimal cygwin and blockcheck.&lt;/p&gt; 
&lt;p&gt;This is not one-button solution to open sites. zapret understanding is required to use.&lt;/p&gt; 
&lt;h3&gt;brief files description&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;code&gt;_CMD_ADMIN.cmd&lt;/code&gt; : open command prompt as administrator&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;winws.exe&lt;/code&gt; : main zapret component, DPI bypass tool, nfqws version for windows&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;winws2.exe&lt;/code&gt; : main zapret2 component, DPI bypass tool, nfqws2 version for windows&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;preset1_example.cmd&lt;/code&gt; : run interactively example strategy using winws&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;preset2_example.cmd&lt;/code&gt; : run interactively example strategy using winws2&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;preset2_wireguard.cmd&lt;/code&gt; : run interactively wireguard protocol bypass&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;service*.cmd&lt;/code&gt; : windows service setup and control (non-interactive autostart mode)&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;enable_timestamps.cmd&lt;/code&gt; : enable tcp timestamps. they are disabled by default and required for ts fooling.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;windivert_delete.cmd&lt;/code&gt; : stop and delete windivert driver&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;killall.exe&lt;/code&gt; : cygwin tool used in reload_lists.cmd. allows to send signals to winws.&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;elevator.exe&lt;/code&gt; : simple tool to run a program as admin&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;cygwin\cygwin.cmd&lt;/code&gt; : run cygwin prompt with current user privileges&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;cygwin\cygwin-admin.cmd&lt;/code&gt; : run cygwin prompts with administrator privileges&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;blockcheck\blockcheck.cmd&lt;/code&gt; : DPI bypass analyzer tool. Run only with zapret and other DPI bypass software stopped !&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;blockcheck\blockcheck-kyber.cmd&lt;/code&gt; : use CURL with multi-segment TLS Client Hello&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;blockcheck\blockcheck2.cmd&lt;/code&gt; : DPI bypass analyzer tool, winws2 based. Run only with zapret and other DPI bypass software stopped !&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;blockcheck\blockcheck2-kyber.cmd&lt;/code&gt; : use CURL with multi-segment TLS Client Hello&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;ARM64 preparation&lt;/h3&gt; 
&lt;ol&gt; 
 &lt;li&gt;run &lt;code&gt;arm64/install_arm64.cmd&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;reboot if testsigning mode is not already enabled. &quot;test mode&quot; text should be present in the right bottom corner of the screen.&lt;/li&gt; 
&lt;/ol&gt; 
&lt;h3&gt;WIN7 preparation&lt;/h3&gt; 
&lt;p&gt;If windivert cannot start as is run &lt;code&gt;win7/install_win7.cmd&lt;/code&gt;. Or install ESU updates.&lt;/p&gt; 
&lt;h3&gt;ANTIVIRUS WARNING&lt;/h3&gt; 
&lt;p&gt;windivert may cause antivirus reaction. It&#39;s not a virus, your antivirus is insane. It can treat windivert as potential risk or hacker instrument. Use exceptions or disable AV completely if you are affected.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/5c8262e330219c94e1d8f5f29f3bfd71b9e9cdef6fbaf4aac82f26ea2a9890b3/bol-van/zapret-win-bundle" medium="image" />
      
    </item>
    
    <item>
      <title>BeamMP/BeamMP</title>
      <link>https://github.com/BeamMP/BeamMP</link>
      <description>&lt;p&gt;Bringing multiplayer to BeamNG.drive&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://beammp.com&quot;&gt;https://beammp.com&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;BeamMP&lt;/h1&gt; 
&lt;p&gt;A Lua mod bringing online multiplayer to &lt;a href=&quot;https://beamng.com&quot;&gt;BeamNG.drive&lt;/a&gt;!&lt;/p&gt; 
&lt;h1&gt;Important Links&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://beammp.github.io/BeamMP/&quot;&gt;Documentation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://discord.gg/BeamMP&quot;&gt;Discord&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://beammp.com&quot;&gt;Website&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.beammp.com&quot;&gt;Docs&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://forum.beammp.com&quot;&gt;Forum&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;code&gt;#beammp&lt;/code&gt; on &lt;code&gt;irc.libera.chat&lt;/code&gt; (&lt;a href=&quot;https://web.libera.chat/#beammp&quot;&gt;webchat link&lt;/a&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Contents&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/BeamMP/BeamMP/development/#beammp&quot;&gt;BeamMP&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/BeamMP/BeamMP/development/#important-links&quot;&gt;Important Links&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/BeamMP/BeamMP/development/#contents&quot;&gt;Contents&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/BeamMP/BeamMP/development/#installation&quot;&gt;Installation&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/BeamMP/BeamMP/development/#servers&quot;&gt;Servers&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/BeamMP/BeamMP/development/#how-does-it-work&quot;&gt;How does it work?&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/BeamMP/BeamMP/development/#roadmap&quot;&gt;Roadmap&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/BeamMP/BeamMP/development/#troubleshooting&quot;&gt;Troubleshooting&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/BeamMP/BeamMP/development/#support&quot;&gt;Support&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/BeamMP/BeamMP/development/#translations&quot;&gt;Translations&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Installation&lt;/h1&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://docs.beammp.com/game/getting-started/&quot;&gt;Click here for a step-by-step guide&lt;/a&gt; on how to install the mod on Windows.&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;The BeamMP mod has been made as simple as it gets. Just head over to &lt;a href=&quot;https://beammp.com&quot;&gt;our website (BeamMP.com)&lt;/a&gt; and click download. This will download a zip file which contains the installer exe. Just run that exe and follow the instructions. Once this completes all you need to do is double click the shortcut on your desktop.&lt;/p&gt; 
&lt;p&gt;Now you can play by clicking &quot;Play&quot; and then &quot;Multiplayer&quot;, logging in with either a guest account or a &lt;a href=&quot;https://forum.beammp.com&quot;&gt;BeamMP Forum&lt;/a&gt; account. Then just select a server to play on! That&#39;s it! 😃&lt;/p&gt; 
&lt;p&gt;If you need help at any point, see the &lt;a href=&quot;https://raw.githubusercontent.com/BeamMP/BeamMP/development/#troubleshooting&quot;&gt;troubleshooting&lt;/a&gt; section. There are instructions there on how to get support from our dedicated support team.&lt;/p&gt; 
&lt;h1&gt;Servers&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://docs.beammp.com/server/create-a-server/&quot;&gt;Click here for a step-by-step guide&lt;/a&gt; on how to set up and run a server for you &amp;amp; your friends.&lt;/p&gt; 
&lt;p&gt;The server is usable free of charge for non-commercial use, and the source code is available on &lt;a href=&quot;https://github.com/BeamMP/BeamMP-Server&quot;&gt;GitHub&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;Please check out &lt;a href=&quot;https://docs.beammp.com&quot;&gt;docs.beammp.com&lt;/a&gt; for a guide on how to setup your own server. If you run into issues, join the official &lt;a href=&quot;https://discord.gg/BeamMP&quot;&gt;Discord&lt;/a&gt; or join us via IRC in &lt;code&gt;#beammp&lt;/code&gt; on &lt;code&gt;irc.libera.chat&lt;/code&gt; (&lt;a href=&quot;https://web.libera.chat/#beammp&quot;&gt;webchat link&lt;/a&gt;).&lt;/p&gt; 
&lt;h1&gt;How does it work?&lt;/h1&gt; 
&lt;p&gt;&lt;em&gt;This section is a technical explanation of the inner workings of the project and is not relevant for most players.&lt;/em&gt;&lt;/p&gt; 
&lt;p&gt;The Launcher is a separate program which starts the game and connects to the Lua mod right away. The launcher then connects to a remote server of your choice, and these two communicate. The launcher then forwards some packets to the game, like car positions, rotations, chat messages, etc.&lt;/p&gt; 
&lt;p&gt;For more information on how the launcher and server operate, you can read the source code (C++) in their respective repositories:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/BeamMP/BeamMP-Launcher&quot;&gt;Launcher&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/BeamMP/BeamMP-Server&quot;&gt;Server&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Roadmap&lt;/h1&gt; 
&lt;p&gt;You can see and keep track of development, planned features, etc. &lt;a href=&quot;https://github.com/orgs/BeamMP/projects/4&quot;&gt;Here&lt;/a&gt; or on the GitHub Issues section of each repository.&lt;/p&gt; 
&lt;p&gt;Additionally, you can join the &lt;a href=&quot;https://discord.gg/BeamMP&quot;&gt;Discord&lt;/a&gt;, where regular updates are posted! Also there is our community &lt;a href=&quot;https://forum.beammp.com/&quot;&gt;Forum&lt;/a&gt;, where we post additional details.&lt;/p&gt; 
&lt;h1&gt;Troubleshooting&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://forum.beammp.com/c/faq/35&quot;&gt;Frequently Asked Questions/Common Issues&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://docs.beammp.com/server/error-codes/&quot;&gt;Error Codes&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.beammp.com/keymaster&quot;&gt;Server Auth Key&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If none of these fix your issue, we have a dedicated support team on our &lt;a href=&quot;https://discord.gg/BeamMP&quot;&gt;Discord&lt;/a&gt;, and our &lt;a href=&quot;https://forum.beammp.com/c/support/33&quot;&gt;Forum&lt;/a&gt;&lt;/p&gt; 
&lt;h1&gt;Support&lt;/h1&gt; 
&lt;p&gt;The BeamMP project is supported by community donations via our &lt;a href=&quot;https://www.patreon.com/BeamMP&quot;&gt;Patreon&lt;/a&gt; This brings perks such as Patreon-only channels on our Discord, Early access to new updates, and more server keys.&lt;/p&gt; 
&lt;h1&gt;Translations&lt;/h1&gt; 
&lt;p&gt;BeamMP makes an effort to be maintained for multiple languages. The current progress of this sits at: &lt;a href=&quot;https://gitlocalize.com/repo/9181?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/whole_project/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt; We use &lt;a href=&quot;https://gitlocalize.com/&quot;&gt;GitLocalize&lt;/a&gt; for managing this. You can contribute if you wish here: &lt;a href=&quot;https://gitlocalize.com/repo/9181&quot;&gt;https://gitlocalize.com/repo/9181&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The individual language progress is as follows:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Language&lt;/th&gt; 
   &lt;th&gt;Badge&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Catalan&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlocalize.com/repo/9181/ca?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/ca/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Chinese&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlocalize.com/repo/9181/zh?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/zh/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Czech&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlocalize.com/repo/9181/cs?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/cs/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;French&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlocalize.com/repo/9181/fr-FR?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/fr-FR/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;German&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlocalize.com/repo/9181/de-DE?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/de-DE/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Japanese&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlocalize.com/repo/9181/ja-JP?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/ja-JP/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Korean (South Korea)&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlocalize.com/repo/9181/ko-KR?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/ko-KR/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Polish&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlocalize.com/repo/9181/pl?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/pl/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Portuguese (Brazil)&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlocalize.com/repo/9181/pt_BR?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/pt_BR/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Portuguese (Portugal)&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlocalize.com/repo/9181/pt-PT?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/pt-PT/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Russian&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlocalize.com/repo/9181/ru?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/ru/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Slovak&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlocalize.com/repo/9181/sk?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/sk/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Spanish&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlocalize.com/repo/9181/es-ES?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/es-ES/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Turkish&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://gitlocalize.com/repo/9181/tr?utm_source=badge&quot;&gt;&lt;img src=&quot;https://gitlocalize.com/repo/9181/tr/badge.svg?sanitize=true&quot; alt=&quot;gitlocalized &quot; /&gt;&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt;</description>
      
      <media:content url="https://repository-images.githubusercontent.com/186818344/057e5f3b-e0f3-4e20-80a2-66549b67fdf6" medium="image" />
      
    </item>
    
    <item>
      <title>rittermod/FS25_RealisticLivestockRM</title>
      <link>https://github.com/rittermod/FS25_RealisticLivestockRM</link>
      <description>&lt;p&gt;FS25_RealisticLivestock - Ritter version&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://discord.gg/KXFevNjknB&quot;&gt;https://discord.gg/KXFevNjknB&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;p&gt;&lt;a href=&quot;https://rittermod.github.io/FS25_RealisticLivestockRM/&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Read-User_Guide-blue?style=for-the-badge&amp;amp;logo=materialformkdocs&amp;amp;logoColor=white&quot; alt=&quot;Read User Guide&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/rittermod/FS25_RealisticLivestockRM/releases/latest/download/FS25_RealisticLivestockRM.zip&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/Download-Latest_Release-orange?style=for-the-badge&amp;amp;logo=github&quot; alt=&quot;Download Latest Release&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;My version of the awesome &lt;a href=&quot;https://github.com/Arrow-kb/FS25_RealisticLivestock&quot;&gt;FS25 Realistic Livestock&lt;/a&gt; mod by &lt;a href=&quot;https://github.com/Arrow-kb&quot;&gt;Arrow-kb&lt;/a&gt;.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h1&gt;FS25 Realistic Livestock - Ritter version&lt;/h1&gt; 
&lt;p&gt;Replaces FS25&#39;s simple animal clusters with individually tracked animals - each with unique genetics, breeding, diseases, and production traits. A maintained version of Arrow-kb&#39;s &lt;a href=&quot;https://github.com/Arrow-kb/FS25_RealisticLivestock&quot;&gt;Realistic Livestock&lt;/a&gt; mod.&lt;/p&gt; 
&lt;p&gt;Every animal is tracked separately with its own identity, genetic makeup, health status, and production output. Genetics are inherited through breeding, diseases can spread and require treatment, and production is driven by each animal&#39;s individual traits. Everything is managed from the RL Menu - a dedicated tabbed interface for browsing, trading, moving, filtering, and automating your herds.&lt;/p&gt; 
&lt;p&gt;This is a maintained version of the original mod by Arrow-kb, who has discontinued development. The goal is to keep the mod working, fix bugs, and make improvements where needed. While less ambitious in scope than the original roadmap, this version focuses on stability and reliability.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://rittermod.github.io/FS25_RealisticLivestockRM/&quot;&gt;User Documentation&lt;/a&gt;&lt;/strong&gt; - Guides and per-species factsheets covering genetics, breeding, diseases, production, and settings.&lt;/p&gt; 
&lt;h2&gt;Features&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Individual animal tracking with unique identity (farm ID, unique ID, birthday)&lt;/li&gt; 
 &lt;li&gt;Genetics system with heritable traits that affect production output&lt;/li&gt; 
 &lt;li&gt;Genetics display in animal names with configurable detail level (average score or full trait breakdown)&lt;/li&gt; 
 &lt;li&gt;Breeding and reproduction with pregnancy mechanics and genetic inheritance&lt;/li&gt; 
 &lt;li&gt;AI insemination system with semen dewars&lt;/li&gt; 
 &lt;li&gt;Disease simulation with infection, immunity, and treatment charged as a monthly fee&lt;/li&gt; 
 &lt;li&gt;Animal monitoring to track individual animals over time&lt;/li&gt; 
 &lt;li&gt;Weight system tied to genetics and feeding&lt;/li&gt; 
 &lt;li&gt;Animal marking and castration&lt;/li&gt; 
 &lt;li&gt;RL Menu: a standalone tabbed menu (default Right Shift + O, also opened from pens, dealers, and trailers) covering all animal management - animal browsing with pedigree/genetics/disease detail, moving, selling, buying, AI straw purchases, messages, and trailer loading/unloading&lt;/li&gt; 
 &lt;li&gt;Saveable animal filters: build reusable filters in-game (age, gender, pregnancy, genetics, weight, health, and more) and cycle them with F across the menu tabs&lt;/li&gt; 
 &lt;li&gt;Herdsman automation: named daily tasks (sell, buy, castrate, naming, AI insemination, move, horse care) driven by saved filters, with per-task caps, budgets, and a herdsman wage&lt;/li&gt; 
 &lt;li&gt;Animal Country of Origin setting: choose the country new animals are registered in (ear tags, identifiers)&lt;/li&gt; 
 &lt;li&gt;Dealer controls: choose which animals and age groups the dealer offers, and whether it stocks Budget, Standard or Premium quality animals&lt;/li&gt; 
 &lt;li&gt;Daily summary mode for message log&lt;/li&gt; 
 &lt;li&gt;In-game help pages covering monitors, pregnancy, production, weight, and genetics&lt;/li&gt; 
 &lt;li&gt;Highland cattle bull support&lt;/li&gt; 
 &lt;li&gt;Animal pack system: third-party mods can add new breeds or adjust animal balance&lt;/li&gt; 
 &lt;li&gt;Map support: Hof Bergmann (ducks, geese, cats, rabbits, alpacas, quail) with automatic version-aware compatibility&lt;/li&gt; 
 &lt;li&gt;Map support: Witcombe (UK breeds - Jersey, Gloucestershire Old Spot, Texel, Suffolk, Blue Faced Leicester, plus Hereford heritage profile) with automatic version-aware compatibility&lt;/li&gt; 
 &lt;li&gt;Map support: Le Mechet (French breeds - Charolaise, Montbeliarde, Simmental, Vosgienne) with automatic version-aware compatibility&lt;/li&gt; 
 &lt;li&gt;Simple support for butchers using Extended Production Point (EPP) mod&lt;/li&gt; 
 &lt;li&gt;Mod compatibility checks at startup: hard-block dialog for incompatible mods, plus a dismissible warning tier for mods known to degrade gameplay&lt;/li&gt; 
 &lt;li&gt;In-game warning when two map bridges or animal packs replace the same animal type&#39;s husbandry config (last-loaded wins; first one&#39;s animals can render as ghosts)&lt;/li&gt; 
 &lt;li&gt;Mod compatibility bridges for foreign mods that overlap RLRM&#39;s hooks - currently coexists with Seasonal Wool Production (Argsy Gaming) without double wool output&lt;/li&gt; 
 &lt;li&gt;Multiplayer support (server-authoritative)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Supported Maps &amp;amp; Packs&lt;/h2&gt; 
&lt;p&gt;RLRM works on virtually any map out of the box. It does not need to be on a list. The maps below are special only because they add their own custom animal types or breeds, which need built-in support for those extras to get the full RLRM treatment (genetics, breeding, reproduction). On any other map, the standard animals just work.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Maps:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.lsfarming-mods.com/&quot;&gt;Hof Bergmann&lt;/a&gt; - ducks, geese, cats, rabbits, alpacas, quail with full breeding support&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://oxygendavid.itch.io/witcombe-park-farm&quot;&gt;Witcombe&lt;/a&gt; - UK breeds (Jersey, Gloucestershire Old Spot, Texel, Suffolk, Blue Faced Leicester) with full breeding support; Hereford heritage profile&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://farming-simulator.com/mod.php?mod_id=357964&quot;&gt;Le Mechet&lt;/a&gt; - French breeds (Charolaise, Montbeliarde, Simmental, Vosgienne) with full breeding support (NOT compatible with Cow Breeds Pack unless you use the latest development version - both replace the cow husbandry config)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Animal Packs:&lt;/strong&gt;&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ConGan98/FS25_CowBreedsRLRM&quot;&gt;Cow Breeds Pack for RLRM&lt;/a&gt; by ConGan98 - additional cattle breeds&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/ConGan98/FS25_SheepBreedsRLRM&quot;&gt;Sheep Breeds Pack for RLRM&lt;/a&gt; by ConGan98 - additional sheep breeds&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Notes&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Based on Arrow-kb&#39;s Realistic Livestock mod (v1.2.0.5), released under GPL-3 license&lt;/li&gt; 
 &lt;li&gt;Savegame data from Arrow-kb&#39;s original version is automatically migrated on first load&lt;/li&gt; 
 &lt;li&gt;Font Library mod is no longer required (functionality has been inlined)&lt;/li&gt; 
 &lt;li&gt;Incompatible with FS25_EnhancedLivestock, FS25_MoreVisualAnimals, and FS25_EnhancedAnimalSystem (use FS25_MoreVisualAnimalsRM instead of FS25_MoreVisualAnimals)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Installation&lt;/h2&gt; 
&lt;p&gt;Place &lt;code&gt;FS25_RealisticLivestockRM.zip&lt;/code&gt; in your mods folder.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Migrating from Arrow-kb&#39;s version:&lt;/strong&gt; Remove &lt;code&gt;FS25_RealisticLivestock.zip&lt;/code&gt; and &lt;code&gt;FS25_FontLibrary.zip&lt;/code&gt;. Back up your savegame first, then load it - data migrates automatically.&lt;/p&gt; 
&lt;h2&gt;Changelog&lt;/h2&gt; 
&lt;p&gt;See the &lt;a href=&quot;https://raw.githubusercontent.com/rittermod/FS25_RealisticLivestockRM/main/CHANGELOG.md&quot;&gt;CHANGELOG&lt;/a&gt; for a detailed list of changes, fixes, and improvements in this version.&lt;/p&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;This mod is released under GPL-3 license. See the &lt;a href=&quot;https://raw.githubusercontent.com/rittermod/FS25_RealisticLivestockRM/main/LICENSE&quot;&gt;LICENSE&lt;/a&gt; file for details.&lt;/p&gt; 
&lt;h1&gt;About reuse, modification and building upon the original Realistic Livestock mod by Arrow-kb&lt;/h1&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;TL;DR: The original Realistic Livestock mod by Arrow-kb is open source GPL-3 licensed. Anyone can freely use, modify, and redistribute it as long as they: give credit, keep the same GPL-3 license, and share their changes openly. No one can restrict reuse.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;The original Realistic Livestock mod by Arrow-kb is released under GPL-3 license. This means that anyone are free to reuse and modify the mod (the work) as long as they comply with the terms of the GPL-3 license, which in short terms means, to the best of my understanding:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;You are free to use, reuse, and modify the code/mod for any purpose.&lt;/li&gt; 
 &lt;li&gt;You must provide attribution to the author(s) when you distribute reused/modified/built upon code.&lt;/li&gt; 
 &lt;li&gt;You must release your own modified code/mod under the same GPL-3 license so others can build upon it too.&lt;/li&gt; 
 &lt;li&gt;You must include a copy of the GPL-3 license with the mod.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This means that &lt;strong&gt;anyone can use, and build upon, any modification I make&lt;/strong&gt; in this Ritter version of the Realistic Livestock mod &lt;strong&gt;without any prior consent&lt;/strong&gt; or similar &lt;strong&gt;from me, as long as they too comply with the GPL-3 license terms&lt;/strong&gt;, attibute me for the changes I have made AND release their modified code/mod under the same GPL-3 license for any changes/additions they have made.&lt;/p&gt; 
&lt;p&gt;It &lt;strong&gt;also means&lt;/strong&gt; that &lt;strong&gt;anyone, including me, can reuse and build opon any changes made by others&lt;/strong&gt; to the mod &lt;strong&gt;without any prior consent&lt;/strong&gt; or similar &lt;strong&gt;from the authors of those modifications&lt;/strong&gt; since their changes to the mod are also licensed under the same GPL-3.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Nobody can say, &quot;No, this is my code, you can not reuse it&quot;.&lt;/strong&gt; The GPL-3 license ensures that the code/mod and any mod built on it will always remain free and open for anyone to use, modify, and distribute under the same GPL-3 license terms. There might at some point a discussion about when is a mod no longer a &quot;mod built on the original mod&quot; but that is way over my paygrade.&lt;/p&gt; 
&lt;p&gt;And &lt;strong&gt;remember&lt;/strong&gt;: Any vioation of this might not be intentional or malicious. People might simply not understand the implications of what they agreed to when they started building upon the mod with this license.&lt;/p&gt; 
&lt;p&gt;(I am not a OSS licensing lawyer, but most likeley neither are you. This is my understanding of the GPL-3 license as it applies to this mod. If you have &lt;strong&gt;QUALIFIED&lt;/strong&gt; legal knowledge, and not armchair legal knowledge, that contradicts what I say here, please let me know.)&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/e4ce7f484d823fa8d99c3cbb4d0a5f28b119f4aa4d41661c86f672658ba61b5e/rittermod/FS25_RealisticLivestockRM" medium="image" />
      
    </item>
    
    <item>
      <title>forest0xia/dota2bot-OpenHyperAI</title>
      <link>https://github.com/forest0xia/dota2bot-OpenHyperAI</link>
      <description>&lt;p&gt;A beta Dota2 Bot Script aims to provide better bot game experience&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=3246316298&quot;&gt;https://steamcommunity.com/sharedfiles/filedetails/?id=3246316298&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Open Hyper AI (OHA) - Dota 2 Bot Scripts&lt;/h1&gt; 
&lt;p&gt;&lt;strong&gt;The most feature-rich custom bot script for Dota 2.&lt;/strong&gt; Play against bots that actually fight, farm, push, and use items intelligently.&lt;/p&gt; 
&lt;blockquote&gt; 
 &lt;p&gt;&lt;strong&gt;To play:&lt;/strong&gt; Create a &lt;strong&gt;Custom Lobby&lt;/strong&gt; and select &lt;strong&gt;Local Host&lt;/strong&gt; as the server location. Bots should have names ending with &lt;strong&gt;&quot;.OHA&quot;&lt;/strong&gt; when installed correctly.&lt;/p&gt; 
&lt;/blockquote&gt; 
&lt;p&gt;&lt;a href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=3246316298&quot;&gt;Steam Workshop&lt;/a&gt; | &lt;a href=&quot;https://github.com/forest0xia/dota2bot-OpenHyperAI&quot;&gt;GitHub&lt;/a&gt; | &lt;a href=&quot;https://github.com/forest0xia/dota2bot-OpenHyperAI/issues?q=is%3Aissue+is%3Aopen+%5BFeature+request%5D&quot;&gt;Feature Requests&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;img src=&quot;https://raw.githubusercontent.com/forest0xia/dota2bot-OpenHyperAI/main/asset/images/steam-profile-screenshot.jpg&quot; alt=&quot;Screenshot&quot; /&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;What Makes This Different&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;127 heroes supported&lt;/strong&gt; on Patch 7.41/7.41a - including Largo, Kez, Ringmaster, Invoker, Techies, Meepo, Lone Druid, and more&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Bots actually play the game&lt;/strong&gt; - they lane, gank, push towers, defend, farm jungle, take Roshan, and use active items&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Dynamic difficulty (FretBots mode)&lt;/strong&gt; - bots get unfair bonuses that scale with difficulty for a real challenge&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Bots communicate&lt;/strong&gt; - they announce pushes, defends, Roshan, and respond to your pings with &quot;On my way!&quot; (in 4 languages)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;10+ Game modes supported&lt;/strong&gt; - All pick, Turbo, All random, Captain mode, 1v1 mid, All Random Deathmatch, etc.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Customizable everything&lt;/strong&gt; - bot names, roles, hero picks, bans, item builds, skill builds, and more&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;AI Chatbot&lt;/strong&gt; - bots chat like real (toxic) players (requires FretBots mode)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;All roles supported&lt;/strong&gt; - deterministic position 1-5 lane assignment&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Quick Start&lt;/h2&gt; 
&lt;ol&gt; 
 &lt;li&gt;Subscribe on &lt;a href=&quot;https://steamcommunity.com/sharedfiles/filedetails/?id=3246316298&quot;&gt;Steam Workshop&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Create a &lt;strong&gt;Custom Lobby&lt;/strong&gt; with &lt;strong&gt;Local Host&lt;/strong&gt; server&lt;/li&gt; 
 &lt;li&gt;Start the game - bots auto-pick and play&lt;/li&gt; 
&lt;/ol&gt; 
&lt;p&gt;For &lt;strong&gt;FretBots mode&lt;/strong&gt; (harder bots, neutral items, chatbot): &lt;a href=&quot;https://github.com/forest0xia/dota2bot-OpenHyperAI/discussions/68&quot;&gt;Manual installation guide&lt;/a&gt;&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;In-Game Commands&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Command&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;!pos X&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Swap your role with a bot (e.g., &lt;code&gt;!pos 2&lt;/code&gt; for mid)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;!Xpos Y&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Reassign bot positions (e.g., &lt;code&gt;!3pos 5&lt;/code&gt; = 3rd bot plays pos 5)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;!pick HERO&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Pick a hero (&lt;code&gt;!pick sniper&lt;/code&gt;, or &lt;code&gt;/all !pick sniper&lt;/code&gt; for enemy)&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;!ban HERO&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Ban a hero from being picked&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;code&gt;!sp XX&lt;/code&gt;&lt;/td&gt; 
   &lt;td&gt;Set bot language (&lt;code&gt;en&lt;/code&gt;, &lt;code&gt;zh&lt;/code&gt;, &lt;code&gt;ru&lt;/code&gt;, &lt;code&gt;ja&lt;/code&gt;)&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Use &lt;a href=&quot;https://github.com/forest0xia/dota2bot-OpenHyperAI/discussions/71&quot;&gt;internal hero names&lt;/a&gt; if short names overlap (e.g., &lt;code&gt;!pick npc_dota_hero_keeper_of_the_light&lt;/code&gt;). Batch commands work too: &lt;code&gt;!pick io; !ban sniper&lt;/code&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Bot Roles &amp;amp; Positioning&lt;/h2&gt; 
&lt;p&gt;Lobby slot order = position assignment (1-5):&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Position&lt;/th&gt; 
   &lt;th&gt;Lane&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Pos 1 (Carry) + Pos 5 (Hard Support)&lt;/td&gt; 
   &lt;td&gt;Safe Lane&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Pos 2 (Mid)&lt;/td&gt; 
   &lt;td&gt;Mid Lane&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Pos 3 (Offlane) + Pos 4 (Soft Support)&lt;/td&gt; 
   &lt;td&gt;Offlane&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;Customize picks, bans, and roles in &lt;a href=&quot;https://raw.githubusercontent.com/forest0xia/dota2bot-OpenHyperAI/main/bots/Customize/general.lua&quot;&gt;Customize/general.lua&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Customization&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;What&lt;/th&gt; 
   &lt;th&gt;Where&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;General settings (picks, bans, names, roles)&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/forest0xia/dota2bot-OpenHyperAI/main/bots/Customize/general.lua&quot;&gt;Customize/general.lua&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;Per-hero settings (items, skills)&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/forest0xia/dota2bot-OpenHyperAI/main/bots/Customize/hero/viper.lua&quot;&gt;Customize/hero/viper.lua&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;FretBots difficulty tuning&lt;/td&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/forest0xia/dota2bot-OpenHyperAI/main/bots/FretBots/SettingsDefault.lua&quot;&gt;FretBots/SettingsDefault.lua&lt;/a&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;p&gt;&lt;strong&gt;Permanent customization&lt;/strong&gt; (survives Workshop updates): Copy the &lt;code&gt;Customize&lt;/code&gt; folder to &lt;code&gt;&amp;lt;Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts/game/Customize&amp;gt;&lt;/code&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Game Modes&lt;/h2&gt; 
&lt;p&gt;Supports most game modes (10+) . See &lt;a href=&quot;https://github.com/forest0xia/dota2bot-OpenHyperAI/discussions/72&quot;&gt;full compatibility discussion&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Offline / LAN Play&lt;/h2&gt; 
&lt;p&gt;You can start a bot game directly from the console without network or clicking UI buttons — useful for offline play, LAN parties, or quick testing. See &lt;a href=&quot;https://github.com/forest0xia/dota2bot-OpenHyperAI/discussions/135&quot;&gt;play offline setup guide&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Developer Documentation&lt;/h2&gt; 
&lt;p&gt;This project uses &lt;a href=&quot;https://claude.ai/claude-code&quot;&gt;Claude Code&lt;/a&gt; for AI-assisted development. The &lt;a href=&quot;https://raw.githubusercontent.com/forest0xia/dota2bot-OpenHyperAI/main/CLAUDE.md&quot;&gt;CLAUDE.md&lt;/a&gt; file provides task-specific instructions for common operations like patch updates, hero fixes, and adding new heroes.&lt;/p&gt; 
&lt;h3&gt;Key Docs&lt;/h3&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Document&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/forest0xia/dota2bot-OpenHyperAI/main/docs/ARCHITECTURE.md&quot;&gt;docs/ARCHITECTURE.md&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Complete codebase architecture, file map, naming conventions, all systems explained&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/forest0xia/dota2bot-OpenHyperAI/main/docs/PATCH_UPDATE_GUIDE.md&quot;&gt;docs/PATCH_UPDATE_GUIDE.md&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Step-by-step runbook for updating when a new Dota 2 patch drops&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/forest0xia/dota2bot-OpenHyperAI/main/docs/BOT_API_REFERENCE.md&quot;&gt;docs/BOT_API_REFERENCE.md&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Comprehensive Valve bot scripting API reference with examples&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/forest0xia/dota2bot-OpenHyperAI/main/CLAUDE.md&quot;&gt;CLAUDE.md&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;AI coding assistant guide - common tasks, rules, and workflows&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Internal Name References&lt;/h3&gt; 
&lt;p&gt;Dota 2 bot scripts use internal code names for heroes, items, and abilities. These are different from the display names you see in-game. When updating builds or fixing bugs, always verify against authoritative sources:&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Resource&lt;/th&gt; 
   &lt;th&gt;What It Contains&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://liquipedia.net/dota2/Cheats&quot;&gt;Liquipedia Cheats Page (Item Names)&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Authoritative list of &lt;code&gt;item_*&lt;/code&gt; internal names for all items including neutral items&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dotabuff/d2vpk/master/dota_pak01/scripts/npc/npc_abilities.txt&quot;&gt;d2vpkr npc_abilities.txt&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;All ability internal names and KV data&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.dota2.com/datafeed/patchnoteslist?language=english&quot;&gt;Dota 2 Patch Data API&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Official patch notes in machine-readable format&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Built-In_Modifier_Names&quot;&gt;Modifier Names (Valve Wiki)&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;modifier_*&lt;/code&gt; names for buff/debuff detection&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h3&gt;Project Structure&lt;/h3&gt; 
&lt;pre&gt;&lt;code&gt;root: &amp;lt;Steam/steamapps/common/dota 2 beta/game/dota/scripts/vscripts&amp;gt;
|
+-- bots/                  All bot Lua scripts
|   +-- hero_selection.lua     Hero picking/banning
|   +-- bot_generic.lua        Per-bot entry point
|   +-- ability_item_usage_generic.lua   Ability/item usage for all heroes
|   +-- item_purchase_generic.lua        Item purchase state machine
|   +-- mode_*_generic.lua     Mode scripts (farm, push, defend, roam, etc.)
|   +-- mode_assemble_generic.lua        Human ping response
|   |
|   +-- BotLib/            Per-hero builds (items, skills, ability logic)
|   |   +-- hero_axe.lua, hero_crystal_maiden.lua, ...
|   |
|   +-- FunLib/            Core libraries and utilities
|   |   +-- jmz_func.lua      Main utility library
|   |   +-- aba_item.lua      Item system
|   |   +-- aba_skill.lua     Skill/ability system
|   |   +-- aba_push.lua      Push logic
|   |   +-- aba_defend.lua    Defend logic
|   |   +-- localization.lua  Chat translations (en/zh/ru/ja)
|   |
|   +-- FretBots/          Enhanced difficulty mode
|   |   +-- SettingsDefault.lua    Difficulty tuning
|   |   +-- SettingsNeutralItemTable.lua   Neutral items + enchantments
|   |
|   +-- Customize/         User-editable settings
|       +-- general.lua    Team-level settings
|       +-- hero/          Per-hero overrides
|
+-- typescript/            TypeScript source for TS-generated Lua files
|   +-- bots/              TS versions (compiled to bots/ via tstl)
|   +-- post-process/      Post-compilation scripts
|
+-- game/                  Valve defaults + permanent customization location
|   +-- Customize/         Copy your Customize/ here to survive updates
|
+-- docs/                  Developer documentation
    +-- ARCHITECTURE.md
    +-- PATCH_UPDATE_GUIDE.md
    +-- BOT_API_REFERENCE.md
&lt;/code&gt;&lt;/pre&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Contribute&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Contributions welcome on &lt;a href=&quot;https://github.com/forest0xia/dota2bot-OpenHyperAI&quot;&gt;GitHub&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Custom item/skill builds don&#39;t need PRs - just tweak locally&lt;/li&gt; 
 &lt;li&gt;Future development is in &lt;strong&gt;TypeScript&lt;/strong&gt; for better maintainability&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/forest0xia/dota2bot-OpenHyperAI/issues?q=is%3Aissue+is%3Aopen+%5BFeature+request%5D&quot;&gt;Open feature requests&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;What&#39;s Next&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Current bot playstyle is limited by Valve&#39;s API. &lt;strong&gt;We need ML/LLM bots like OpenAI Five!&lt;/strong&gt;&lt;/li&gt; 
 &lt;li&gt;Planned improvements: 
  &lt;ul&gt; 
   &lt;li&gt;Smarter laning, pushing, ganking&lt;/li&gt; 
   &lt;li&gt;Stronger spell casting (Invoker, Rubick, Morphling, etc.)&lt;/li&gt; 
   &lt;li&gt;Better support for bugged heroes (Dark Willow, IO, Lone Druid, Muerta, etc.)&lt;/li&gt; 
   &lt;li&gt;Full game mode support + ongoing patch fixes&lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://www.reddit.com/r/DotA2/comments/1ezxpav/&quot;&gt;Feedback to Valve Dota2 bot team&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Useful Resources&lt;/h2&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Resource&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://www.adamqqq.com/ai/dota2-ai-devlopment-tutorial.html&quot;&gt;Dota2 AI Development Tutorial&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Comprehensive guide by adamqqq&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://developer.valvesoftware.com/wiki/Dota_Bot_Scripting&quot;&gt;Valve Bot Scripting Intro&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Official Valve documentation&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://docs.moddota.com/lua_bots/&quot;&gt;Lua Bot APIs (moddota)&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Community API docs&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://liquipedia.net/dota2/Cheats&quot;&gt;Liquipedia Cheats (Internal Names)&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Item/hero/ability code names&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://raw.githubusercontent.com/dotabuff/d2vpk/master/dota_pak01/scripts/npc/npc_abilities.txt&quot;&gt;npc_abilities.txt&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Ability metadata&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://moddota.com/api/#!/vscripts/dotaunitorder_t&quot;&gt;Enums &amp;amp; APIs (moddota)&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Enum reference&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;a href=&quot;https://developer.valvesoftware.com/wiki/Dota_2_Workshop_Tools/Scripting/Built-In_Modifier_Names&quot;&gt;Modifier Names&lt;/a&gt;&lt;/td&gt; 
   &lt;td&gt;Buff/debuff modifier names&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Support&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Contribute on GitHub&lt;/li&gt; 
 &lt;li&gt;Or &lt;a href=&quot;https://github.com/forest0xia/dota2bot-OpenHyperAI/discussions/74&quot;&gt;buy me a coffee&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Credits&lt;/h2&gt; 
&lt;p&gt;Built on top of Valve&#39;s default bots + contributions from many talented authors:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;New Beginner AI (&lt;a href=&quot;mailto:dota2jmz@163.com&quot;&gt;dota2jmz@163.com&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;Tinkering About (&lt;a href=&quot;https://github.com/ryndrb/dota2bot&quot;&gt;ryndrb&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;Ranked Matchmaking AI (&lt;a href=&quot;https://github.com/adamqqqplay/dota2ai&quot;&gt;adamqqq&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;fretbots (&lt;a href=&quot;https://github.com/fretmute/fretbots&quot;&gt;fretmute&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;BOT Experiment (Furiospuppy)&lt;/li&gt; 
 &lt;li&gt;ExtremePush (&lt;a href=&quot;https://github.com/insraq/dota2bots&quot;&gt;insraq&lt;/a&gt;)&lt;/li&gt; 
 &lt;li&gt;And all other contributors who made bot games better&lt;/li&gt; 
&lt;/ul&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/2778f87ae5e807f4ee3bd502f8bf74ea4cdfcce240c77b7f6816116b6d943a2e/forest0xia/dota2bot-OpenHyperAI" medium="image" />
      
    </item>
    
    <item>
      <title>FrSkyRC/ETHOS-Feedback-Community</title>
      <link>https://github.com/FrSkyRC/ETHOS-Feedback-Community</link>
      <description>&lt;p&gt;Feedback &amp; suggestions are welcomed here for ETHOS by FrSky&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Feedback about FrSky Ethos&lt;/h1&gt; 
&lt;p&gt;Thank you for helping FrSky Ethos to be better! Here FrSky could collect input and suggestion from all the end users on the system operation. The goal of this program is to find issues/bugs that can be corrected in further software updates.&lt;/p&gt; 
&lt;p&gt;Please keep the GitHub section focused on reporting issues/bugs. We will add a priority label on each issue and we may not reply on every issue in the first time but we are sure to take care of them. When the problem is resolved, we ask of you to double check and close the issue. Always check if the issue has already existed on GitHub, in order to prevent double posting. Well described bug description is very important for us to try to reproduce it and fix well.&lt;/p&gt; 
&lt;p&gt;Thanks a lot for your participation in advance.&lt;/p&gt; 
&lt;p&gt;Below are some notes to help you report issues/bugs or improvement suggestions.&lt;/p&gt; 
&lt;h2&gt;Issue guides&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Please make sure that you have upgraded to latest software version before you post an issue.&lt;/li&gt; 
 &lt;li&gt;If you find a new bug, first please look at opened and closed issues to see if the issue is already listed.&lt;/li&gt; 
 &lt;li&gt;If it does exist you can comment if you have more information.&lt;/li&gt; 
 &lt;li&gt;If does not exist, then create a new issue.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;New issue should contain:&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;Firmware version where issue was found, name the topic to describe the bug as the best as possible&lt;/li&gt; 
 &lt;li&gt;Description of the issue&lt;/li&gt; 
 &lt;li&gt;Description of the expected behavior&lt;/li&gt; 
 &lt;li&gt;Description how to reproduce the bug&lt;/li&gt; 
 &lt;li&gt;If possible a screenshot or video, it is worth 1000 words 😃&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Thanks again for your interest and help on this new system, we hope it becomes better and better to fulfill all your demands!&lt;/p&gt; 
&lt;h2&gt;Ethos Wiki&lt;/h2&gt; 
&lt;p&gt;Ethos Wiki is there: &lt;a href=&quot;https://github.com/FrSkyRC/ETHOS-Feedback-Community/wiki&quot;&gt;https://github.com/FrSkyRC/ETHOS-Feedback-Community/wiki&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Here are some direct links to the main pages:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/FrSkyRC/ETHOS-Feedback-Community/wiki/ETHOS-File-Storage-and-Firmware-Flashing&quot;&gt;Ethos File Storage, ETHOS flashing and TD ISRM updating&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/FrSkyRC/ETHOS-Feedback-Community/wiki/Ethos-1.5-firmware-localization&quot;&gt;Ethos Localization&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;Ethos Simulators&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Ethos Manuals&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/FrSkyRC/ETHOS-Feedback-Community/raw/1.5/doc/%5BCN%5D%20X20%20and%20Ethos%20User%20Manual_1.0.10_rev16.pdf&quot;&gt;Chinese Manual&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/FrSkyRC/ETHOS-Feedback-Community/raw/1.6/doc/%5BEN%5D%20Ethos%20User%20Manual%201.6.2.pdf&quot;&gt;English Manual&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/FrSkyRC/ETHOS-Feedback-Community/raw/1.5/doc/%5BFR%5D%20Ethos%20User%20Manual%201.5.10.pdf&quot;&gt;French Manual&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/FrSkyRC/ETHOS-Feedback-Community/raw/1.6/doc/%5BIT%5D%20Ethos%20User%20Manual%201.6.2.pdf&quot;&gt;Italian Manual&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/FrSkyRC/ETHOS-Feedback-Community/raw/1.5/doc/%5BPB%5D%20Ethos%20User%20Manual%201.0.x.pdf&quot;&gt;Brazilian Portuguese Manual&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/FrSkyRC/ETHOS-Feedback-Community/raw/1.6/doc/%5BES%5D%20Ethos%20User%20Manual%201.6.6.pdf&quot;&gt;Spanish Manual&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/FrSkyRC/ETHOS-Feedback-Community/raw/1.6/doc/%5BDE%5D%20Ethos%20User%20Manual%201.6.2.pdf&quot;&gt;German Manual&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;If there are any mistakes, please feel free to tell us!&lt;/p&gt; 
&lt;p&gt;Thanks.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/bc466d87a22f69aa300d70f2c23ed1eba12a2663a2966aab87b1a3b987f155d4/FrSkyRC/ETHOS-Feedback-Community" medium="image" />
      
    </item>
    
    <item>
      <title>opentibiabr/canary</title>
      <link>https://github.com/opentibiabr/canary</link>
      <description>&lt;p&gt;Canary Server 15.25 for OpenTibia community.&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://mshibanami.github.io/GitHubTrendingRSS/assets/icons/link.png&quot; width=&quot;20&quot; height=&quot;20&quot; alt=&quot;link&quot; style=&quot;margin: 0 8px 0 0; padding: 0; display: inline-block; vertical-align: middle;&quot; /&gt;&lt;a href=&quot;https://docs.opentibiabr.com/&quot;&gt;https://docs.opentibiabr.com/&lt;/a&gt;&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Canary&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://discord.gg/gvTj5sh9Mp&quot;&gt;&lt;img src=&quot;https://img.shields.io/discord/528117503952551936.svg?style=flat-square&amp;amp;logo=discord&quot; alt=&quot;Discord&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/opentibiabr/canary/actions/workflows/ci.yml&quot;&gt;&lt;img src=&quot;https://github.com/opentibiabr/canary/actions/workflows/ci.yml/badge.svg?sanitize=true&quot; alt=&quot;CI&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://sonarcloud.io/dashboard?id=opentibiabr_canary&quot;&gt;&lt;img src=&quot;https://sonarcloud.io/api/project_badges/measure?project=opentibiabr_canary&amp;amp;metric=alert_status&quot; alt=&quot;Quality Gate Status&quot; /&gt;&lt;/a&gt; &lt;img src=&quot;https://img.shields.io/github/repo-size/opentibiabr/canary&quot; alt=&quot;Repository size&quot; /&gt; &lt;a href=&quot;https://github.com/opentibiabr/canary/raw/main/LICENSE&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/license/opentibiabr/canary.svg?sanitize=true&quot; alt=&quot;License&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Canary is a free and open-source MMORPG server emulator for the OpenTibia community, written in C++20 and Lua. It is a fork of the &lt;a href=&quot;https://github.com/opentibiabr/otservbr-global&quot;&gt;OTServBR-Global&lt;/a&gt; project. The repository includes the server core, datapacks, Lua scripts, database schema, build presets, automated tests and development tooling used by the project.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Getting Started&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/opentibiabr/canary/wiki&quot;&gt;Wiki&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Docker Quickstart&lt;/h2&gt; 
&lt;p&gt;Canary includes a lightweight Docker quickstart for running a local test server without compiling Canary locally. The stack starts MariaDB, the published Canary runtime image, MyAAC as the website/admin AAC, and &lt;code&gt;opentibiabr/login-server&lt;/code&gt; as the client login webservice.&lt;/p&gt; 
&lt;p&gt;This quickstart is for local development, testing, and LAN demos. Do not expose it directly to the public Internet with the default test accounts and passwords.&lt;/p&gt; 
&lt;p&gt;Run from the &lt;code&gt;docker&lt;/code&gt; directory:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;cp .env.dist .env
docker compose up -d --build
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;The &lt;code&gt;docker&lt;/code&gt; directory also provides guarded start scripts that start the stack and clean safe Docker leftovers without removing database volumes:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-powershell&quot;&gt;.\up.ps1
&lt;/code&gt;&lt;/pre&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;sh ./up.sh
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;Default local endpoints:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Website/admin: &lt;code&gt;http://localhost:8080&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Client login webservice: &lt;code&gt;http://localhost:8088/login&lt;/code&gt;&lt;/li&gt; 
 &lt;li&gt;Game port: &lt;code&gt;7172&lt;/code&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;MyAAC&#39;s &lt;code&gt;login.php&lt;/code&gt; is intentionally removed from the quickstart image. Clients should use &lt;code&gt;login-server&lt;/code&gt; only. See &lt;a href=&quot;https://raw.githubusercontent.com/opentibiabr/canary/main/docs/docker/quickstart-for-beginners.md&quot;&gt;docs/docker/quickstart-for-beginners.md&lt;/a&gt; for a beginner guide and &lt;a href=&quot;https://raw.githubusercontent.com/opentibiabr/canary/main/docker/DOCKER.md&quot;&gt;docker/DOCKER.md&lt;/a&gt; for the full setup, environment variables, test account, and troubleshooting guide.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Documentation&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/opentibiabr/canary/main/docs/building/recompile.md&quot;&gt;Recompile on Linux with executable backups&lt;/a&gt;. Covers seven-day retention, crash analysis, optional restart and WSL tests.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/opentibiabr/canary/main/docs/hardware-sizing.md&quot;&gt;Hardware sizing and capacity planning&lt;/a&gt;. Measure RAM and CPU, compare training and hunting workloads, and review capacity.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/opentibiabr/canary/main/docs/development/shared-build-cache.md&quot;&gt;Shared build cache for worktrees and forks&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/opentibiabr/canary/main/docs/docker/quickstart-for-beginners.md&quot;&gt;Docker beginner quickstart&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/opentibiabr/canary/main/docs/systems/multiprotocol.md&quot;&gt;Multiprotocol runtime profiles&lt;/a&gt;. Covers the current, 11.00, and 8.60 runtime contracts, port layout, client preparation, and validation checklist.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/opentibiabr/canary/main/docs/systems/README.md&quot;&gt;System documentation&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://raw.githubusercontent.com/opentibiabr/canary/main/docs/lua-api/lua_api.md&quot;&gt;Lua API reference and VSCode IntelliSense stubs&lt;/a&gt;. Canary generates these files from the C++ Lua bindings during startup when &lt;code&gt;generateLuaApiDocs&lt;/code&gt; is enabled. The repository &lt;code&gt;.luarc.json&lt;/code&gt; already adds &lt;code&gt;docs/lua-api&lt;/code&gt; to the Lua Language Server workspace library; for VSCode workspace settings, run &lt;code&gt;tools/setup_vscode_lua_api.ps1&lt;/code&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Recommended Tools and Clients&lt;/h2&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/Arch-Mina/Assets-Editor&quot;&gt;Assets Editor&lt;/a&gt;. Use this as the single asset source of truth, then export legacy-compatible &lt;code&gt;.dat&lt;/code&gt;/&lt;code&gt;.spr&lt;/code&gt; packages for 8.60 clients from the same current asset set.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/opentibiabr/remeres-map-editor/&quot;&gt;Remere&#39;s Map Editor&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/opentibiabr/otclient&quot;&gt;OTClient Redemption&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dudantas/Tibia-Extended-Client-Library&quot;&gt;Tibia Extended Client Library&lt;/a&gt;. Use this to prepare compatible 8.60/11.00 CipSoft clients with extended limits, config-driven login redirect, and per-client local state.&lt;/li&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/dudantas/tibia-client/releases/latest&quot;&gt;Game Client&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Nightly Packages&lt;/h2&gt; 
&lt;p&gt;Development builds can be downloaded from GitHub Actions artifacts. They are useful for testing recent changes from the &lt;code&gt;main&lt;/code&gt; branch, but may include behavior that is not present in stable releases yet.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;a href=&quot;https://github.com/opentibiabr/canary/actions/workflows/ci.yml?query=branch%3Amain&quot;&gt;Github Actions&lt;/a&gt;.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Running Tests&lt;/h2&gt; 
&lt;p&gt;Tests can be run from the repository root using the tool versions and tasks pinned in &lt;code&gt;.mise.toml&lt;/code&gt;:&lt;/p&gt; 
&lt;pre&gt;&lt;code class=&quot;language-bash&quot;&gt;mise install
mise run configure linux-debug
mise run build linux-debug
mise run test linux-debug

# Replace linux-debug with macos-debug or windows-debug as needed.
&lt;/code&gt;&lt;/pre&gt; 
&lt;p&gt;For detailed testing information including adding tests and framework usage, see &lt;a href=&quot;https://raw.githubusercontent.com/opentibiabr/canary/main/tests/README.md&quot;&gt;tests/README.md&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Support &amp;amp; Community&lt;/h2&gt; 
&lt;p&gt;For real-time support, join the &lt;a href=&quot;https://discord.gg/gvTj5sh9Mp&quot;&gt;OpenTibiaBR Discord&lt;/a&gt;.&lt;/p&gt; 
&lt;p&gt;The GitHub issue tracker should be used for bugs, improvements and technical project tasks. It is not a support forum.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Contributing&lt;/h2&gt; 
&lt;p&gt;Contributions are welcome. You can help in several ways:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;Report bugs through the &lt;a href=&quot;https://github.com/opentibiabr/canary/issues/new/choose&quot;&gt;Issue Tracker&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Submit improvements through &lt;a href=&quot;https://github.com/opentibiabr/canary/pulls&quot;&gt;Pull Requests&lt;/a&gt;.&lt;/li&gt; 
 &lt;li&gt;Improve tests, documentation, scripts, datapacks, or C++ code.&lt;/li&gt; 
 &lt;li&gt;Validate releases, nightly builds and recent changes.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Before contributing, read the &lt;a href=&quot;https://github.com/opentibiabr/canary/raw/main/CODE_OF_CONDUCT.md&quot;&gt;Code of Conduct&lt;/a&gt; and the project &lt;a href=&quot;https://github.com/opentibiabr/canary/raw/main/CONTRIBUTING.md&quot;&gt;Contributing&lt;/a&gt; guide.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Sponsorship&lt;/h2&gt; 
&lt;p&gt;Canary is maintained by community contributors. To support development, visit the &lt;a href=&quot;https://github.com/sponsors/opentibiabr&quot;&gt;OpenTibiaBR sponsors page&lt;/a&gt;.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;Acknowledgements&lt;/h2&gt; 
&lt;p&gt;Thanks to all contributors of &lt;a href=&quot;https://github.com/opentibiabr/canary/graphs/contributors&quot;&gt;Canary&lt;/a&gt;, &lt;a href=&quot;https://github.com/opentibiabr/otservbr-global/graphs/contributors&quot;&gt;OTServBR-Global&lt;/a&gt; and the OpenTibia community.&lt;/p&gt; 
&lt;hr /&gt; 
&lt;h2&gt;License&lt;/h2&gt; 
&lt;p&gt;This project is distributed under the &lt;a href=&quot;https://github.com/opentibiabr/canary/raw/main/LICENSE&quot;&gt;GPL-2.0 license&lt;/a&gt;.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/e5275639729396485e2d5b66a184a2829ed74901a9d5e3b4fbb982c1aca0e13a/opentibiabr/canary" medium="image" />
      
    </item>
    
    <item>
      <title>Stephan-S/FS25_AutoDrive</title>
      <link>https://github.com/Stephan-S/FS25_AutoDrive</link>
      <description>&lt;p&gt;FS25 version of the AutoDrive mod&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;FS25_AutoDrive&lt;/h1&gt; 
&lt;p&gt;FS25 version of the AutoDrive mod&lt;/p&gt; 
&lt;h3&gt;Latest Release: 3.0.1.2&lt;/h3&gt; 
&lt;p&gt;Direct Download: &lt;a href=&quot;https://github.com/Stephan-S/FS25_AutoDrive/releases/latest/download/FS25_AutoDrive.zip&quot;&gt;https://github.com/Stephan-S/FS25_AutoDrive/releases/latest/download/FS25_AutoDrive.zip&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Discord Server:&lt;/h2&gt; 
&lt;p&gt;For help &amp;amp; support, feel free to join us on Discord: &lt;a href=&quot;https://discord.gg/2XfnM59DFy&quot;&gt;https://discord.gg/2XfnM59DFy&lt;/a&gt;&lt;/p&gt; 
&lt;h3&gt;For a little thank you&lt;/h3&gt; 
&lt;p&gt;If you like our work, feel free to buy us a coffee (of which we drink quite a lot 😄 )&lt;br /&gt; For now, there is no general link for the team, so each contributer can post his/her preferred donation link here 😃&lt;br /&gt; But remember, this is absolutely not required. We value any issues and feature requests the same!&lt;br /&gt; And to all who do donate: Thank you very much 😃&lt;/p&gt; 
&lt;h4&gt;Stephan (Founder):&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.paypal.me/StephanSchlosser&quot;&gt;https://www.paypal.me/StephanSchlosser&lt;/a&gt;&lt;/p&gt; 
&lt;h4&gt;Iwan1803 (Community Manager, Supporter &amp;amp; Tester):&lt;/h4&gt; 
&lt;p&gt;&lt;a href=&quot;https://iwan1803.de/urls/tip&quot;&gt;https://iwan1803.de/urls/tip&lt;/a&gt;&lt;/p&gt; 
&lt;h4&gt;Axel &amp;amp; Tommo (Modder)&lt;/h4&gt; 
&lt;h4&gt;Willi (Supporter &amp;amp; Tester)&lt;/h4&gt; 
&lt;h2&gt;Placeable Crossings and Reversing (separate mods)&lt;/h2&gt; 
&lt;p&gt;Direct Download: &lt;a href=&quot;https://github.com/Williwillswisse/AD_XandT-intersections/releases/latest/download/FS25_AutoDrive_XT_Intersection.zip&quot;&gt;https://github.com/Williwillswisse/AD_XandT-intersections/releases/latest/download/FS25_AutoDrive_XT_Intersection.zip&lt;/a&gt; &lt;br /&gt; Direct Download: &lt;a href=&quot;https://github.com/Williwillswisse/AD_xCrossing/releases/latest/download/FS25_AutoDrive_xCrossing.zip&quot;&gt;https://github.com/Williwillswisse/AD_xCrossing/releases/latest/download/FS25_AutoDrive_xCrossing.zip&lt;/a&gt; &lt;br /&gt; Direct Download: &lt;a href=&quot;https://github.com/Williwillswisse/AD_T_intersection/releases/latest/download/FS25_AutoDrive_T_intersection.zip&quot;&gt;https://github.com/Williwillswisse/AD_T_intersection/releases/latest/download/FS25_AutoDrive_T_intersection.zip&lt;/a&gt; &lt;br /&gt; Direct Download: &lt;a href=&quot;https://github.com/Williwillswisse/AD_reverseToMarker/releases/latest/download/FS25_AutoDrive_reverseToMarker.zip&quot;&gt;https://github.com/Williwillswisse/AD_reverseToMarker/releases/latest/download/FS25_AutoDrive_reverseToMarker.zip&lt;/a&gt; &lt;br /&gt; Repository: &lt;a href=&quot;https://github.com/Williwillswisse&quot;&gt;https://github.com/Williwillswisse&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Placeables with already prepared AD routes (separate mods)&lt;/h2&gt; 
&lt;p&gt;A growing number of ingame placeables, e.g. buildings, silos, productions and so on with integrated AD routes. &lt;br /&gt; Download: &lt;a href=&quot;https://hof-hirschfeld.de/category/autodrive/&quot;&gt;https://hof-hirschfeld.de/category/autodrive/&lt;/a&gt;&lt;/p&gt; 
&lt;h2&gt;Course Editor&lt;/h2&gt; 
&lt;p&gt;The course editor is now maintained by @KillBait and can be found here: &lt;a href=&quot;https://github.com/KillBait/AutoDrive_Course_Editor&quot;&gt;https://github.com/KillBait/AutoDrive_Course_Editor&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/0fa3ceb6cacb88470fd5d7090ef07034a86340ba42277088e55ece64581684d3/Stephan-S/FS25_AutoDrive" medium="image" />
      
    </item>
    
    <item>
      <title>Courseplay/Courseplay_FS25</title>
      <link>https://github.com/Courseplay/Courseplay_FS25</link>
      <description>&lt;p&gt;Courseplay for Farming Simulator 2025&lt;/p&gt;&lt;hr&gt;&lt;h1&gt;Courseplay Beta for Farming Simulator 25&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.farming-simulator.com/mod.php?mod_id=331515&amp;amp;title=fs2025&quot;&gt;&lt;img src=&quot;https://img.shields.io/badge/dynamic/xml?color=blue&amp;amp;style=flat-square&amp;amp;label=Modhub+Release&amp;amp;prefix=v&amp;amp;query=%2F%2Fdiv%5B%40class%3D&#39;table-row&#39;%5D%5Bdiv%5B%40class%3D&#39;table-cell&#39;%5D%2Fb%5Btext()%3D&#39;Version&#39;%5D%5D%2Fdiv%5B%40class%3D&#39;table-cell&#39;%5D%5B2%5D&amp;amp;url=https%3A%2F%2Fwww.farming-simulator.com%2Fmod.php%3Flang%3Dde%26country%3Dde%26mod_id%3D331515%26title%3Dfs2025&quot; alt=&quot;ModHub Release&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/Courseplay/Courseplay_FS25/releases/latest&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/v/release/Courseplay/Courseplay_FS25?include_prereleases&amp;amp;style=flat-square&amp;amp;label=GitHub+Release&quot; alt=&quot;GitHub Release (latest by date including pre-releases)&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/Courseplay/Courseplay_FS25/releases/latest/download/FS25_Courseplay.zip&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/downloads-pre/Courseplay/Courseplay_FS25/latest/FS25_Courseplay.zip?style=flat-square&quot; alt=&quot;GitHub Release Downloads (by Asset)&quot; /&gt;&lt;/a&gt; &lt;a href=&quot;https://github.com/Courseplay/Courseplay_FS25/issues&quot;&gt;&lt;img src=&quot;https://img.shields.io/github/issues/Courseplay/Courseplay_FS25?style=flat-square&quot; alt=&quot;GitHub Issues&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://github.com/Courseplay/Courseplay_FS25/releases/latest&quot;&gt;Download the latest developer version&lt;/a&gt;&lt;/strong&gt; (the file FS25_Courseplay.zip).&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;&lt;a href=&quot;https://courseplay.github.io/CourseplayHelpFS25/&quot;&gt;Courseplay Website&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt; 
&lt;p&gt;This and the Giants ModHub is the &lt;strong&gt;only official source for Courseplay&lt;/strong&gt;, if you see it anywhere else, it&#39;s a scam.&lt;/p&gt; 
&lt;h2&gt;Tutorials&lt;/h2&gt; 
&lt;p&gt;German Tutorial by Mario Hirschfeld: &lt;a href=&quot;https://www.youtube.com/playlist?list=PL-UvOFIL55_jXAy6UkVJuLOD5DWKLuzIm&quot;&gt;https://www.youtube.com/playlist?list=PL-UvOFIL55_jXAy6UkVJuLOD5DWKLuzIm&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;English Tutorial by Argsy Gaming: &lt;a href=&quot;https://www.youtube.com/playlist?list=PLFh-GZbaG02w9uLl_qroCi6uVI0LDXrD1&quot;&gt;https://www.youtube.com/playlist?list=PLFh-GZbaG02w9uLl_qroCi6uVI0LDXrD1&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Courseplay functions are also documented on our &lt;a href=&quot;https://courseplay.github.io/CourseplayHelpFS25/&quot;&gt;website&lt;/a&gt; and in the in-game Courseplay menu.&lt;/p&gt; 
&lt;img width=&quot;1920&quot; height=&quot;1200&quot; alt=&quot;Courseplay Website&quot; src=&quot;https://github.com/user-attachments/assets/52a82a7e-ca9d-40ae-9443-f60c7cbeebe4&quot; /&gt; 
&lt;h2&gt;Developer version&lt;/h2&gt; 
&lt;p&gt;Please be aware you&#39;re using a developer version, which may and will contain errors, bugs, mistakes and unfinished code. Chances are you computer will explode when using it. Twice. If you have no idea what &quot;beta&quot;, &quot;alpha&quot;, or &quot;developer&quot; means and entails, steer clear. The Courseplay team will not take any responsibility for crop destroyed, savegames deleted or baby pandas killed.&lt;/p&gt; 
&lt;p&gt;You have been warned.&lt;/p&gt; 
&lt;p&gt;If you&#39;re still ok with this, please remember to post possible issues that you find in the developer version. That&#39;s the only way we can find sources of error and fix them. Be as specific as possible:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;tell us the version number&lt;/li&gt; 
 &lt;li&gt;only use the vehicles necessary, not 10 other ones at a time&lt;/li&gt; 
 &lt;li&gt;which vehicles are involved, what is the intended action?&lt;/li&gt; 
 &lt;li&gt;Post! The! Log! to &lt;a href=&quot;https://gist.github.com/&quot;&gt;Gist&lt;/a&gt; or &lt;a href=&quot;http://pastebin.com/&quot;&gt;PasteBin&lt;/a&gt;&lt;/li&gt; 
 &lt;li&gt;For more details on how to post a proper bug report, visit our &lt;a href=&quot;https://github.com/Courseplay/Courseplay_FS25/wiki&quot;&gt;Wiki&lt;/a&gt;&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;Help Us Out&lt;/h2&gt; 
&lt;p&gt;We work long, hard, in our own free time at developing and improving Courseplay. If you like the project, show us your undying love:&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.paypal.com/cgi-bin/webscr?cmd=_donations&amp;amp;business=7PDM2P6HQ5D56&amp;amp;item_name=Promote+the+development+of+Courseplay&amp;amp;currency_code=EUR&amp;amp;source=url&quot;&gt;&lt;img src=&quot;https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif&quot; alt=&quot;paypal&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.buymeacoffee.com/courseplay&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;https://cdn.buymeacoffee.com/buttons/v2/default-yellow.png&quot; alt=&quot;Buy Me A Coffee&quot; style=&quot;height: 60px !important;width: 217px !important;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/44c2d933345300f92ad2aa30a7939cddeb78fab19f03045cd47ae19e2661f456/Courseplay/Courseplay_FS25" medium="image" />
      
    </item>
    
    <item>
      <title>id577/FS25_AdvancedDamageSystem</title>
      <link>https://github.com/id577/FS25_AdvancedDamageSystem</link>
      <description>&lt;p&gt;Advanced Damage System mod for Farming Simulator 25&lt;/p&gt;&lt;hr&gt;&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;h3&gt;Support the Project&lt;/h3&gt; 
 &lt;p&gt;Advanced Damage System is a passion project, and I’m doing my best to make it more realistic, stable, and enjoyable for the FS25 community.&lt;/p&gt; 
 &lt;p&gt;If you like the mod and want to support its development, your donation would mean a lot. Continued development depends heavily on the time I can afford to dedicate to the project, and your support helps me choose development over extra paid work.&lt;/p&gt; 
 &lt;p&gt;Every donation helps me keep working on new features, fixes, and improvements.&lt;/p&gt; 
 &lt;p&gt;Thank you for helping keep ADS alive and growing.&lt;/p&gt; 
 &lt;p&gt;&lt;a href=&quot;https://dalink.to/id577&quot;&gt;Donate via DonationAlerts&lt;/a&gt; · &lt;a href=&quot;https://coindrop.to/id577&quot;&gt;Donate via Coindrop&lt;/a&gt; · &lt;a href=&quot;https://ko-fi.com/themodworkshop&quot;&gt;Donate via Ko-fi&lt;/a&gt; - please include &#39;ADS&#39; in the donation message.&lt;/p&gt; 
&lt;/div&gt; 
&lt;h1&gt;FS25_AdvancedDamageSystem&lt;/h1&gt; 
&lt;p&gt;&lt;a href=&quot;https://www.youtube.com/watch?v=HV9-DvFaPSM&quot;&gt;&lt;img src=&quot;https://img.youtube.com/vi/HV9-DvFaPSM/maxresdefault.jpg&quot; alt=&quot;Advanced Damage System Feature Showcase&quot; /&gt;&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;▶️ &lt;a href=&quot;https://www.youtube.com/watch?v=HV9-DvFaPSM&quot;&gt;Watch ADS Feature Showcase on YouTube&lt;/a&gt;&lt;/p&gt; 
&lt;p&gt;Advanced Damage System is a mod that completely reworks the standard vehicle damage and maintenance system in Farming Simulator 25. A machine&#39;s reliability now depends directly on how carefully and efficiently you use it: the harder you push your equipment and the worse you maintain it, the more often it will break down.&lt;/p&gt; 
&lt;p&gt;Forget about one-click repairs. Maintenance now takes time, resources, and proper planning. You will need to manage wear, schedule repairs in advance, and organize your fleet so that breakdowns do not ruin the season.&lt;/p&gt; 
&lt;table&gt; 
 &lt;tbody&gt;
  &lt;tr&gt; 
   &lt;td width=&quot;65%&quot; valign=&quot;top&quot;&gt; 
    &lt;div class=&quot;markdown-alert markdown-alert-warning&quot;&gt;
     &lt;p class=&quot;markdown-alert-title&quot;&gt;
      &lt;svg class=&quot;octicon octicon-alert mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
       &lt;path d=&quot;M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
      &lt;/svg&gt;Warning&lt;/p&gt;
     &lt;p&gt;&lt;strong&gt;IMPORTANT WARNING&lt;/strong&gt;&lt;/p&gt; 
     &lt;ul&gt; 
      &lt;li&gt;This mod is a work in progress (WIP). Features are subject to change, and bugs are to be expected.&lt;/li&gt; 
      &lt;li&gt;Use at your own risk. The author is not responsible for any potential issues with your savegame or game. It is strongly recommended to back up your saves.&lt;/li&gt; 
     &lt;/ul&gt; 
    &lt;/div&gt; &lt;/td&gt; 
   &lt;td width=&quot;35%&quot; align=&quot;center&quot; valign=&quot;top&quot;&gt; &lt;img width=&quot;256&quot; height=&quot;256&quot; alt=&quot;icon_ads&quot; src=&quot;https://github.com/user-attachments/assets/ac09c1b1-daa3-4026-b312-b09156d9a03e&quot; /&gt; &lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt;
&lt;/table&gt; 
&lt;h1&gt;Acknowledgements&lt;/h1&gt; 
&lt;p&gt;A huge thank you to &lt;strong&gt;Frvetz&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Frvetz&quot;&gt;https://github.com/Frvetz&lt;/a&gt;), creator of the Realistic Damage System mod for FS22, for the permission to use ideas from his mod and for the support during the early stages of development.&lt;/p&gt; 
&lt;p&gt;Special thanks to &lt;a href=&quot;https://github.com/Saibotsu&quot;&gt;Saibotsu&lt;/a&gt; (&lt;a href=&quot;https://www.youtube.com/@TheModWorkshop&quot;&gt;The Mod Workshop&lt;/a&gt;) for extensive balance testing, helpful feedback, and ongoing support throughout development.&lt;/p&gt; 
&lt;p&gt;A huge special thanks to &lt;strong&gt;Squallqt&lt;/strong&gt; (&lt;a href=&quot;https://github.com/Squallqt&quot;&gt;https://github.com/Squallqt&lt;/a&gt;) for his direct contributions to the project. He implemented multiplayer support and provided invaluable help with testing and technical advice.&lt;/p&gt; 
&lt;p&gt;Also, a big thank you to &lt;strong&gt;Derwen Modding&lt;/strong&gt; for testing the early builds.&lt;/p&gt; 
&lt;h1&gt;Quick Start&lt;/h1&gt; 
&lt;p&gt;If you do not want to read the full guide at the bottom of this page but still want to play with ADS without constant breakdowns and unnecessary frustration, just follow these three rules:&lt;/p&gt; 
&lt;ol&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Always follow the service interval.&lt;/strong&gt;&lt;br /&gt; By default, the recommended interval is about &lt;code&gt;5 operating hours&lt;/code&gt; on average. You can check it:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt;in the workshop,&lt;/li&gt; 
   &lt;li&gt;in the vehicle info panel when looking at the machine,&lt;/li&gt; 
   &lt;li&gt;in the ADS fleet management menu opened with the &lt;code&gt;P&lt;/code&gt; key.&lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;Once the interval is reached, perform the &lt;code&gt;Maintenance&lt;/code&gt; procedure in the workshop.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Inspect and prepare your machines every day.&lt;/strong&gt;&lt;br /&gt; Perform a daily inspection (hold &lt;code&gt;R&lt;/code&gt; key) and basic pre-shift maintenance. Clean the vehicle with the &lt;code&gt;Air Blower&lt;/code&gt; and lubricate machines that require it with the &lt;code&gt;Grease Gun&lt;/code&gt;. These simple routine actions greatly reduce the risk of avoidable failures.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Do not abuse your equipment.&lt;/strong&gt;&lt;br /&gt; Avoid overloading, overheating, using implements that are too heavy or too demanding for the machine, excessive wheel slip in mud, hard work on a cold engine, and high-speed driving over rough terrain.&lt;br /&gt; As a general rule: if something would be harmful to the machine in real life, it is harmful in ADS too.&lt;/p&gt; &lt;/li&gt; 
&lt;/ol&gt; 
&lt;h1&gt;Key Features&lt;/h1&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Complete Replacement of the Vanilla Damage System:&lt;/strong&gt; Every vehicle in the game is now divided into multiple individual systems: engine, transmission, hydraulics, cooling system, fuel system, working systems, electrical system, and chassis. Each system tracks how the machine is actually being used. For example, chassis wear increases faster if you drive quickly over rough terrain. The harsher the operating conditions, the faster wear builds up and the more often breakdowns occur.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Regular Maintenance Becomes Essential:&lt;/strong&gt; Scheduled service is now required to prevent accelerated wear and avoid costly failures.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Dynamic Breakdowns:&lt;/strong&gt; Dozens of different failures tied to specific systems, each with its own gameplay effects and consequences.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Fully Reworked Workshop Menu and Logic:&lt;/strong&gt; The workshop now supports inspection, repair, maintenance, and overhaul. Each procedure has configurable options and takes time to complete, so there is no one-click repair.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Realistic Thermal Simulation:&lt;/strong&gt; Engines need proper warm-up, and they can overheat under heavy load in hot conditions. Ignoring temperature can lead to serious consequences.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Realistic Battery and Alternator Simulation:&lt;/strong&gt; The battery can now discharge, and the alternator can fail, leading to difficult engine starts. However, you can always jump-start a vehicle from another machine.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Vehicle-Specific Characteristics:&lt;/strong&gt; Vehicles differ by brand and production year in Reliability (affecting wear rate, breakdown probability, and service intervals) and Maintainability (affecting service cost and service time). Premium brands are generally more reliable than budget alternatives, while older machines are often mechanically simpler and therefore more maintainable.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Pre-Operation Inspection:&lt;/strong&gt; Before heading to the field, vehicles need to be inspected and serviced at the start of each shift: greasing components, blowing out the radiator and air intakes, and carrying out other essential routine procedures.&lt;/p&gt; &lt;p&gt;... More information below in the guide&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h1&gt;Console Commands&lt;/h1&gt; 
&lt;p&gt;For testing and debugging, ADS includes console commands. Most commands require you to be inside a vehicle that supports this mod.&lt;/p&gt; 
&lt;table&gt; 
 &lt;thead&gt; 
  &lt;tr&gt; 
   &lt;th&gt;Command&lt;/th&gt; 
   &lt;th&gt;Description&lt;/th&gt; 
   &lt;th&gt;Usage Example&lt;/th&gt; 
  &lt;/tr&gt; 
 &lt;/thead&gt; 
 &lt;tbody&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_debug&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Toggles ADS debug mode on/off.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_debug&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_listBreakdowns&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Lists all available breakdown IDs from the registry.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_listBreakdowns&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_addBreakdown&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Adds a breakdown to the current vehicle. Optional arguments: breakdown ID and stage.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_addBreakdown ECU_MALFUNCTION 2&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_removeBreakdown&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Removes a specific breakdown from the current vehicle. If no ID is provided, all active breakdowns are removed.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_removeBreakdown ECU_MALFUNCTION&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_advanceBreakdown&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Advances a specific active breakdown to the next stage. If no ID is provided, all active breakdowns are advanced where possible.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_advanceBreakdown ECU_MALFUNCTION&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_setCondition&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Sets the Condition value for all enabled systems on the current vehicle (&lt;code&gt;0.0&lt;/code&gt;-&lt;code&gt;1.0&lt;/code&gt;).&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_setCondition 0.5&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_setSystemCondition&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Sets Condition for one specific system on the current vehicle (&lt;code&gt;0.0&lt;/code&gt;-&lt;code&gt;1.0&lt;/code&gt;).&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_setSystemCondition engine 0.75&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_setSystemStress&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Sets Stress for one specific system on the current vehicle (&lt;code&gt;&amp;gt;= 0.0&lt;/code&gt;).&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_setSystemStress electrical 0.25&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_setSystemStressMultiplier&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Sets the stress accumulation multiplier for one system, or for all systems if no system is specified.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_setSystemStressMultiplier 12 electrical&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_setService&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Sets the current vehicle&#39;s Service level (&lt;code&gt;0.0&lt;/code&gt;-&lt;code&gt;1.0&lt;/code&gt;).&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_setService 0.2&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_resetVehicle&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Fully resets the current vehicle state: condition, service, and active breakdowns.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_resetVehicle&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_startService&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Starts service on the current vehicle. Types: &lt;code&gt;inspection&lt;/code&gt;, &lt;code&gt;maintenance&lt;/code&gt;, &lt;code&gt;repair&lt;/code&gt;, &lt;code&gt;overhaul&lt;/code&gt;. With &lt;code&gt;repair&lt;/code&gt;, optional &lt;code&gt;[count]&lt;/code&gt; selects how many visible breakdowns to repair.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_startService repair 2&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_finishService&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Instantly finishes the currently active service on the current vehicle.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_finishService&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_getServiceState&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Prints the current workshop and service state variables for the current vehicle.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_getServiceState&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_showServiceLog&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Prints the vehicle&#39;s service log. Optional &lt;code&gt;[index]&lt;/code&gt; shows one entry in detailed form.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_showServiceLog 1&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_getDebugVehicleInfo&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Prints detailed debug information about the current vehicle. Optional argument also lists attached specializations.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_getDebugVehicleInfo 1&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_setDirtAmount&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Sets the current vehicle&#39;s dirt level (&lt;code&gt;0.0&lt;/code&gt;-&lt;code&gt;1.0&lt;/code&gt;).&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_setDirtAmount 0.8&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_setFuelLevel&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Sets the current vehicle&#39;s fuel level using either a &lt;code&gt;0.0&lt;/code&gt;-&lt;code&gt;1.0&lt;/code&gt; value or &lt;code&gt;0&lt;/code&gt;-&lt;code&gt;100&lt;/code&gt; percent.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_setFuelLevel 25&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_resetFactorStats&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Resets the accumulated factor statistics for the current vehicle.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_resetFactorStats&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_toggleHudDebugView&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Switches the ADS HUD debug view between normal and factor stats modes.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_toggleHudDebugView stats&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_setConfigVar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Changes a value inside &lt;code&gt;ADS_Config&lt;/code&gt; at runtime. Intended for testing and debugging.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_setConfigVar CORE.BASE_SYSTEMS_WEAR 0.02&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
  &lt;tr&gt; 
   &lt;td&gt;&lt;strong&gt;ads_setSpecVar&lt;/strong&gt;&lt;/td&gt; 
   &lt;td&gt;Changes a value inside &lt;code&gt;spec_AdvancedDamageSystem&lt;/code&gt; on the current vehicle. Intended for testing and debugging.&lt;/td&gt; 
   &lt;td&gt;&lt;code&gt;ads_setSpecVar systems.engine.condition 0.85&lt;/code&gt;&lt;/td&gt; 
  &lt;/tr&gt; 
 &lt;/tbody&gt; 
&lt;/table&gt; 
&lt;h1&gt;Screenshots&lt;/h1&gt; 
&lt;img width=&quot;2560&quot; height=&quot;1440&quot; alt=&quot;444&quot; src=&quot;https://github.com/user-attachments/assets/4286276b-d204-4166-886f-4eebe964fba9&quot; /&gt; 
&lt;img width=&quot;1280&quot; height=&quot;719&quot; alt=&quot;Снимок экрана 2026-04-24 170740&quot; src=&quot;https://github.com/user-attachments/assets/d98b3fa3-8a50-4322-9a0d-8678519b10b5&quot; /&gt; 
&lt;img width=&quot;1907&quot; height=&quot;1308&quot; alt=&quot;666&quot; src=&quot;https://github.com/user-attachments/assets/aaa4f359-e4cb-4c77-857a-6e3af5a00304&quot; /&gt; 
&lt;img width=&quot;1314&quot; height=&quot;839&quot; alt=&quot;111&quot; src=&quot;https://github.com/user-attachments/assets/66e7e049-59e6-4f26-937a-a74f1e19a247&quot; /&gt; 
&lt;img width=&quot;1280&quot; height=&quot;719&quot; alt=&quot;Снимок экрана 2026-04-24 174821&quot; src=&quot;https://github.com/user-attachments/assets/771f6fce-5b96-462c-aae5-b45887b01366&quot; /&gt; 
&lt;img width=&quot;1253&quot; height=&quot;763&quot; alt=&quot;image&quot; src=&quot;https://github.com/user-attachments/assets/18fe2f51-44f8-46fe-a1ac-8b892d25852c&quot; /&gt; 
&lt;img width=&quot;1233&quot; height=&quot;832&quot; alt=&quot;222&quot; src=&quot;https://github.com/user-attachments/assets/64748b85-6e3c-43d6-b19a-d7027e66df49&quot; /&gt; 
&lt;img width=&quot;1334&quot; height=&quot;788&quot; alt=&quot;Снимок экрана 2026-03-29 224955&quot; src=&quot;https://github.com/user-attachments/assets/77ca8ae3-a531-4934-96d0-b53c941e5095&quot; /&gt; 
&lt;h1&gt;Mod Guide&lt;/h1&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-important&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-report mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v9.5A1.75 1.75 0 0 1 14.25 13H8.06l-2.573 2.573A1.458 1.458 0 0 1 3 14.543V13H1.75A1.75 1.75 0 0 1 0 11.25Zm1.75-.25a.25.25 0 0 0-.25.25v9.5c0 .138.112.25.25.25h2a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h6.5a.25.25 0 0 0 .25-.25v-9.5a.25.25 0 0 0-.25-.25Zm7 2.25v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 9a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Important&lt;/p&gt;
 &lt;p&gt;The mod is actively being developed: some mechanics are constantly being expanded, changed, and reworked, so the guide may contain some inaccuracies.&lt;/p&gt; 
&lt;/div&gt; 
&lt;p&gt;The Advanced Damage System (ADS) mod completely replaces the standard damage system, offering a deep and detailed simulation of wear, breakdowns, and technical service. This guide will help you understand all aspects of the mod.&lt;/p&gt; 
&lt;h2&gt;1. Core Mechanics: Condition, Stress and Service&lt;/h2&gt; 
&lt;p&gt;Each vehicle can contain all or only some of the following systems: engine, transmission, hydraulics, cooling system, fuel system, working systems, electrical system, and chassis. Every system has two key parameters: &lt;code&gt;Condition&lt;/code&gt; and &lt;code&gt;Stress&lt;/code&gt;.&lt;/p&gt; 
&lt;h3&gt;⚙️ Condition&lt;/h3&gt; 
&lt;p&gt;This is the main indicator of a system&#39;s health and remaining service life.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;What does Condition affect?&lt;/strong&gt; Condition determines how resistant a system is to breakdowns. As Stress builds up through poor or demanding operation, the Condition value defines the threshold at which breakdown risk becomes critical. In simple terms: the lower the Condition, the less abuse the system can take before it starts to fail.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;How does it decrease?&lt;/strong&gt; Condition decreases as the vehicle is used. With the default settings, this is roughly &lt;code&gt;1%&lt;/code&gt; per hour under normal operation. However, harsh or improper use increases wear significantly, and each system has its own factors that accelerate deterioration. Condition also decreases very slowly over time if the vehicle is stored outdoors instead of under cover.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;How to restore Condition?&lt;/strong&gt; Condition can be partially restored through the &lt;code&gt;Overhaul&lt;/code&gt; procedure in the workshop. You can restore individual systems or rebuild several systems at once.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;⚠️ Stress&lt;/h3&gt; 
&lt;p&gt;This is the accumulated result of misuse, overload, and operating mistakes that a system suffers during vehicle use.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;What does Stress affect?&lt;/strong&gt; Stress directly affects the probability of failures appearing in a specific system. The higher the Stress, the higher the breakdown risk. The upper limit of Stress, where the probability becomes critical, is the current &lt;code&gt;Condition&lt;/code&gt; value of that system.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;How does it increase?&lt;/strong&gt; Stress does not build up during normal operation. It increases only through improper use: overload, overheating, running a cold machine under load, wheel slip, harsh working conditions, and other mistakes specific to each system.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;How to reduce Stress?&lt;/strong&gt; Stress can be reduced through preventive maintenance in the workshop. In addition, Stress is automatically lowered after a breakdown occurs. Repairs also give you options: a standard repair significantly reduces Stress, while a full repair with replacement of adjacent components removes all Stress from the system.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;💧 Service&lt;/h3&gt; 
&lt;p&gt;This parameter reflects the state of consumables: oil, filters, technical fluids, etc.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;What does Service affect?&lt;/strong&gt; This is a critically important parameter. A low Service level significantly accelerates the decline of Condition in every system, but not all systems are affected equally. For example, the engine suffers much more from overdue service than the cooling system. Timely maintenance is the best way to save money on expensive repairs in the future.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;How does it decrease?&lt;/strong&gt; It decreases with engine operating hours, simulating the natural wear of consumables.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;How to restore it?&lt;/strong&gt; It is restored to 100% through the Maintenance procedure in the workshop (depending on the selected maintenance scope, this value can be lower or higher).&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;A Note on Player Knowledge: Hidden Values&lt;/h3&gt; 
&lt;p&gt;You can check overall &lt;code&gt;Condition&lt;/code&gt;, system &lt;code&gt;Condition&lt;/code&gt;, system &lt;code&gt;Stress&lt;/code&gt;, and &lt;code&gt;Service&lt;/code&gt; in the workshop by running an Inspection. In most cases, the result is an approximate status (for example: Service is &lt;code&gt;OPTIMAL&lt;/code&gt;, &lt;code&gt;NOT REQUIRED&lt;/code&gt;, &lt;code&gt;REQUIRED&lt;/code&gt;, or &lt;code&gt;OVERDUE&lt;/code&gt;).&lt;/p&gt; 
&lt;p&gt;Exact percentage values are available only through a full diagnostic (defectoscopy) procedure, which is expensive and time-consuming.&lt;/p&gt; 
&lt;p&gt;In practice, this level of precision is usually unnecessary. A responsible farmer follows the manufacturer-recommended service interval for each machine, performs maintenance on schedule, and when the time comes, either carries out an overhaul or replaces the vehicle.&lt;/p&gt; 
&lt;h2&gt;2. Wear Factors&lt;/h2&gt; 
&lt;p&gt;Each system has its own set of wear factors that accelerate &lt;code&gt;Condition&lt;/code&gt; loss and increase &lt;code&gt;Stress&lt;/code&gt;. At the same time, there are several global factors that can affect multiple systems at once:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Service Factor:&lt;/strong&gt; The effect of overdue maintenance. The longer the service interval is overdue, the stronger this factor becomes.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Breakdown Presence Factor:&lt;/strong&gt; An active breakdown in a system accelerates the wear of its remaining components.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Idle Factor:&lt;/strong&gt; If a system is not being actively used, its wear rate is significantly reduced. For example, the transmission experiences very little wear while the vehicle is not moving.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Downtime Factor:&lt;/strong&gt; A small passive wear effect that applies when the vehicle is not running and is stored outdoors.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Engine&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Motor Overload Factor:&lt;/strong&gt; Triggers when engine load exceeds &lt;code&gt;90%&lt;/code&gt;. The effect becomes stronger as load gets closer to &lt;code&gt;100%&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Air Intake Clogging Factor:&lt;/strong&gt; Triggers when air intake clogging exceeds &lt;code&gt;50%&lt;/code&gt;. The effect becomes stronger as clogging increases.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Cold Engine Factor:&lt;/strong&gt; Triggers when engine temperature is below &lt;code&gt;50C&lt;/code&gt; and RPM load is above &lt;code&gt;75%&lt;/code&gt;. This factor does not apply to AI vehicles.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Overheated Engine Factor:&lt;/strong&gt; Triggers when engine temperature is above &lt;code&gt;95C&lt;/code&gt; and engine load is above &lt;code&gt;30%&lt;/code&gt;. The effect becomes stronger as temperature and load increase.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Transmission&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Pull Overload Factor:&lt;/strong&gt; Triggers when engine load is above &lt;code&gt;82%&lt;/code&gt; and the vehicle is moving faster than &lt;code&gt;0.5 km/h&lt;/code&gt;. The effect builds up over time and reaches its maximum after &lt;code&gt;30&lt;/code&gt; seconds of continuous overload.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Lugging Factor:&lt;/strong&gt; Triggers when engine load is above &lt;code&gt;80%&lt;/code&gt;, RPM load is below &lt;code&gt;80%&lt;/code&gt;, and the vehicle is moving faster than &lt;code&gt;0.5 km/h&lt;/code&gt;. The effect becomes stronger as the gap between load and RPM increases.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Wheel Slip Factor:&lt;/strong&gt; Triggers when wheel slip exceeds &lt;code&gt;30%&lt;/code&gt;. The effect becomes stronger as slip increases.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Cold Transmission Factor:&lt;/strong&gt; Applies only to CVT transmissions. Triggers when transmission temperature is below &lt;code&gt;50C&lt;/code&gt; and RPM load is above &lt;code&gt;75%&lt;/code&gt;. This factor does not apply to AI vehicles.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Overheated Transmission Factor:&lt;/strong&gt; Applies only to CVT transmissions. Triggers when transmission temperature is above &lt;code&gt;95C&lt;/code&gt; and engine load is above &lt;code&gt;30%&lt;/code&gt;. The effect becomes stronger as temperature increases.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Heavy Trailer Factor:&lt;/strong&gt; Activates when the mass of the towed trailer exceeds the tractor&#39;s own mass by more than &lt;code&gt;1.2x&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Hydraulics&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Operating Factor:&lt;/strong&gt; Triggers during active hydraulic work. The effect becomes stronger as the working mass ratio increases.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Heavy Lift Factor:&lt;/strong&gt; Triggers when lifted mass exceeds &lt;code&gt;30%&lt;/code&gt; of the vehicle&#39;s mass. The effect becomes stronger as lifted mass increases.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Cold Oil Factor:&lt;/strong&gt; Triggers during active hydraulic work when engine temperature is below &lt;code&gt;30C&lt;/code&gt;. The effect becomes stronger as temperature gets lower.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;PTO Operation Factor:&lt;/strong&gt; Triggers when the PTO is active. In the current config, this factor is set to &lt;code&gt;0&lt;/code&gt;, so it currently has no effect.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Sharp PTO Angle Factor:&lt;/strong&gt; Triggers when the connected PTO angle exceeds &lt;code&gt;20&lt;/code&gt; degrees. The effect becomes stronger as the angle increases.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Cooling&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;High Cooling Load Factor:&lt;/strong&gt; Triggers when thermostat state exceeds &lt;code&gt;90%&lt;/code&gt;. The effect becomes stronger as cooling effort increases.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Overheat Factor:&lt;/strong&gt; Triggers when engine temperature exceeds &lt;code&gt;95C&lt;/code&gt;. The effect becomes stronger as temperature increases.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Cold Shock Factor:&lt;/strong&gt; Triggers when engine temperature is below &lt;code&gt;50C&lt;/code&gt; and RPM load is above &lt;code&gt;75%&lt;/code&gt;. This factor does not apply to AI vehicles.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Electrical&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Lights Usage Factor:&lt;/strong&gt; Triggers when the main lights are on.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Weather Exposure Factor:&lt;/strong&gt; Triggers when the vehicle is outdoors during rain, snow, or hail.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Cranking Stress Factor:&lt;/strong&gt; Triggers while the starter is engaged.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Overheat Factor:&lt;/strong&gt; Triggers when engine temperature exceeds &lt;code&gt;95C&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Chassis&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Vibration Factor:&lt;/strong&gt; Triggers when the vibration signal exceeds its threshold. The effect becomes stronger at higher speed and on rougher surfaces.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Steering Load Factor:&lt;/strong&gt; Triggers at speeds up to &lt;code&gt;4 km/h&lt;/code&gt; when the steering input is active and changing while the wheels have ground contact. The effect becomes stronger with sharper steering input.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Brake Mass Factor:&lt;/strong&gt; Triggers during braking above &lt;code&gt;2 km/h&lt;/code&gt; when total vehicle mass is greater than its own mass. The effect becomes stronger with heavier mass and stronger braking input.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Fuel&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Low Fuel Starvation Factor:&lt;/strong&gt; Triggers when fuel level drops below &lt;code&gt;20%&lt;/code&gt;. The effect becomes stronger as fuel level gets lower and engine load increases.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Cold Fuel Factor:&lt;/strong&gt; Triggers when fuel temperature is below &lt;code&gt;20C&lt;/code&gt; and engine load is above &lt;code&gt;50%&lt;/code&gt;. The effect becomes stronger as temperature gets lower.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Idle Deposit Factor:&lt;/strong&gt; Triggers after &lt;code&gt;60&lt;/code&gt; seconds of idling. The effect continues to grow up to &lt;code&gt;600&lt;/code&gt; seconds of idling.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;High Pressure Factor:&lt;/strong&gt; Triggers when engine load exceeds &lt;code&gt;90%&lt;/code&gt;. The effect becomes stronger as load gets closer to &lt;code&gt;100%&lt;/code&gt;.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h3&gt;Work Process&lt;/h3&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Wet Crop Factor:&lt;/strong&gt; Triggers when the machine is turned on, harvesting is in progress, and the weather is wet.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Lubrication Factor:&lt;/strong&gt; Triggers when the machine requires lubrication and lubrication level is below &lt;code&gt;100%&lt;/code&gt;. The effect becomes stronger as lubrication level drops.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;3. Breakdowns&lt;/h2&gt; 
&lt;p&gt;In ADS, your vehicles can suffer real breakdowns. Some failures are minor and only reduce performance, while others can make the machine completely inoperable.&lt;/p&gt; 
&lt;div class=&quot;markdown-alert markdown-alert-note&quot;&gt;
 &lt;p class=&quot;markdown-alert-title&quot;&gt;
  &lt;svg class=&quot;octicon octicon-info mr-2&quot; viewbox=&quot;0 0 16 16&quot; version=&quot;1.1&quot; width=&quot;16&quot; height=&quot;16&quot; aria-hidden=&quot;true&quot;&gt;
   &lt;path d=&quot;M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8Zm8-6.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13ZM6.5 7.75A.75.75 0 0 1 7.25 7h1a.75.75 0 0 1 .75.75v2.75h.25a.75.75 0 0 1 0 1.5h-2a.75.75 0 0 1 0-1.5h.25v-2h-.25a.75.75 0 0 1-.75-.75ZM8 6a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z&quot;&gt;&lt;/path&gt;
  &lt;/svg&gt;Note&lt;/p&gt;
 &lt;p&gt;&lt;/p&gt; 
 &lt;details&gt; 
  &lt;summary&gt;&lt;strong&gt;📋 Click here for a full list of breakdowns and their effects&lt;/strong&gt;&lt;/summary&gt; 
  &lt;p&gt;This is a comprehensive list of all selectable (random) breakdowns in the mod. Each breakdown has several stages, with the effects becoming more severe over time. The &quot;Critical Effect&quot; listed is the final stage of the malfunction.&lt;/p&gt; 
  &lt;hr /&gt; 
  &lt;h3&gt;⚡ Electrical Systems&lt;/h3&gt; 
  &lt;h4&gt;ECU Malfunction&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Modern non-electric vehicles (&lt;code&gt;Year 2000+&lt;/code&gt;).&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; ECU errors cause reduced engine power, increased fuel consumption, dark exhaust smoke, and at advanced stages can lead to stalls and difficult starting.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Complete ECU failure.&lt;/strong&gt; The engine can no longer be controlled and will not start.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Corroded Wiring&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Modern vehicles (&lt;code&gt;Year 2000+&lt;/code&gt;) equipped with lights.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Flickering or failed lights, unstable voltage supply, hard starting, occasional stalls, and loss of power in critical circuits.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Starter control circuit failure.&lt;/strong&gt; Lighting is inoperative and engine start is impossible.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Battery Sulfation&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; All vehicles.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Reduced effective battery capacity, weak electrical reserve under load, unstable cranking, and progressively harder engine starts.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Battery capacity is almost gone.&lt;/strong&gt; Cranking performance becomes too weak for reliable starting.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Alternator Regulator Failure&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; All vehicles.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Reduced or unstable charging output, poor battery charging, voltage losses, and a steadily weakening electrical system.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;No battery charging.&lt;/strong&gt; The vehicle runs only on the remaining battery reserve.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;hr /&gt; 
  &lt;h3&gt;⚙️ Engine Systems&lt;/h3&gt; 
  &lt;h4&gt;Turbocharger Wear&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Currently only enabled for the &lt;code&gt;Fiat 160-90 DT&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Turbo whistle, noticeable power loss at high RPM, rising fuel consumption, and possible engine stalls under heavy load.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Catastrophic turbo failure.&lt;/strong&gt; The engine loses most of its power and is at serious risk of further damage.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Oil Pump Malfunction&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; All non-electric vehicles.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Low oil pressure, reduced engine torque, rising engine temperature, mechanical knocking, and possible stalling as the failure worsens.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Critical oil circulation failure.&lt;/strong&gt; Safe engine operation and reliable starting are no longer possible.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Valve Train Malfunction&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; All non-electric vehicles.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Reduced engine torque, increased fuel consumption, abnormal valve train noise, hesitation under load, and possible stalls.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Valve train failure.&lt;/strong&gt; The engine can no longer operate correctly and may not start at all.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;hr /&gt; 
  &lt;h3&gt;⚙️ Transmission Systems&lt;/h3&gt; 
  &lt;h4&gt;Manual Transmission Clutch Wear&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Vehicles with manual transmissions.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Transmission slip under load, weak power delivery to the wheels, and increasing fuel consumption as clutch wear progresses.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Clutch burnout.&lt;/strong&gt; The vehicle is unable to move.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Transmission Synchronizer Malfunction&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Vehicles with manual or synchro-shift transmissions, excluding Powershift.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Grinding noises, difficult shifts, failed gear changes, and gear rejection under load.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Synchronizer failure.&lt;/strong&gt; Shifting gears becomes impossible.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Powershift Hydraulic Pump Malfunction&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Vehicles with Powershift transmissions.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Delays, harsh engagement, and violent shocks during gear changes as hydraulic pressure drops.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Hydraulic pump failure.&lt;/strong&gt; The transmission is stuck in neutral.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;CVT Chain Wear&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Vehicles with CVT transmissions.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Variator slip, higher fuel consumption, rising transmission temperature, and worsening torque transfer.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Critical CVT chain wear.&lt;/strong&gt; Reliable vehicle movement can no longer be guaranteed.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;CVT Hydraulic Control Valve Malfunction&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Vehicles with CVT transmissions.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Hydraulic pressure drops, reduced engine torque, restricted ratio range, rising transmission heat, and unstable CVT operation.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Control valve failure.&lt;/strong&gt; The transmission falls into a severely restricted emergency mode.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;hr /&gt; 
  &lt;h3&gt;🛠️ Hydraulic Systems&lt;/h3&gt; 
  &lt;h4&gt;Hydraulic Pump Malfunction&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Most non-truck, non-passenger hydraulic vehicles from &lt;code&gt;1960+&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Hydraulic implements become progressively slower, weaker, and less responsive.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Hydraulic pump failure.&lt;/strong&gt; The hydraulic system becomes inoperable.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Hydraulic Cylinder Internal Leak&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Most non-truck, non-passenger hydraulic vehicles from &lt;code&gt;1960+&lt;/code&gt;.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Slower hydraulic movement, weak actuation, and attached implements drifting or failing to hold position under load.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Critical internal leakage.&lt;/strong&gt; Hydraulic movement is almost lost and load holding is no longer possible.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;PTO Clutch Slip&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Vehicles with PTO capability.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Reduced PTO torque transfer and frequent automatic PTO disengagement under load.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;PTO clutch failure.&lt;/strong&gt; PTO operation is no longer possible.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;hr /&gt; 
  &lt;h3&gt;🚜 Chassis Systems&lt;/h3&gt; 
  &lt;h4&gt;Brake Malfunction&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Wheeled vehicles.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Reduced braking force, longer stopping distances, weak braking response, and dangerous loss of braking effectiveness.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Brake system failure.&lt;/strong&gt; Braking becomes impossible.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Bearing Wear&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Wheeled vehicles.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Bearing noise, vibration, increased rolling resistance, lower maximum speed, and rising drivetrain load.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Wheel bearing seizure.&lt;/strong&gt; Wheel rotation is blocked.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Steering Linkage Wear&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Wheeled vehicles without tracks.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Steering pull, reduced steering response, poor directional stability, and increasingly unreliable control.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Steering linkage failure.&lt;/strong&gt; Safe directional control can no longer be ensured.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Track Tensioner Malfunction&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Tracked vehicles only.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Directional pull, vibration, drag noise, extra drivetrain load, reduced speed, and unstable track running.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Track tensioner failure.&lt;/strong&gt; The running gear can seize.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;hr /&gt; 
  &lt;h3&gt;🌡️ Cooling Systems&lt;/h3&gt; 
  &lt;h4&gt;Thermostat Malfunction&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; All non-electric vehicles.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Slow warm-up or unstable temperature regulation at first, followed by persistent overheating under load.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Thermostat failure.&lt;/strong&gt; Coolant circulation is disrupted and severe overheating becomes unavoidable.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Coolant Leak&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; All non-electric vehicles.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Reduced cooling efficiency, faster temperature rise under load, and an increasing likelihood of overheating.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Critical coolant loss.&lt;/strong&gt; Safe engine temperature can no longer be maintained.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Fan Clutch Failure&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; All non-electric vehicles.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Reduced fan efficiency, abnormal fan clutch noise, weak airflow through the cooling pack, and a high overheating risk.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Fan clutch failure.&lt;/strong&gt; Adequate cooling airflow is no longer possible.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;hr /&gt; 
  &lt;h3&gt;⛽ Fuel Systems&lt;/h3&gt; 
  &lt;h4&gt;Fuel Pump Malfunction&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; All non-electric vehicles.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Rough idle, reduced power, higher fuel consumption, hesitation, difficult starting, and frequent stalls as fuel pressure drops.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Fuel pump failure.&lt;/strong&gt; Fuel is no longer supplied to the engine.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Fuel Injector Malfunction&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; All non-electric vehicles.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Rough running, hesitation under load, reduced power, higher fuel consumption, and increasingly unreliable starting.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Injector failure.&lt;/strong&gt; The engine will not run correctly and may not start at all.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Fuel Filter Clogging&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; All non-electric vehicles.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Restricted fuel flow, hesitation under load, lower engine torque, and possible engine stalls.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Critical filter blockage.&lt;/strong&gt; Fuel flow becomes insufficient for engine operation.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Fuel Line Air Leak&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; All non-electric vehicles.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Unstable fuel supply, difficult starting, hesitation, and engine stalls caused by air entering the system.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Critical air leak.&lt;/strong&gt; The engine cannot maintain fuel supply and will not run reliably.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;hr /&gt; 
  &lt;h3&gt;🌾 Work Process Systems&lt;/h3&gt; 
  &lt;h4&gt;Harvest Processing System Wear&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Combines, cotton harvesters, rice harvesters, vine harvesters, and related harvesting machines.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Reduced crop processing efficiency and progressively increasing yield loss during harvesting.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Critical processing wear.&lt;/strong&gt; Yield loss becomes extreme during operation.&lt;/li&gt; 
  &lt;/ul&gt; 
  &lt;h4&gt;Unloading Auger Malfunction&lt;/h4&gt; 
  &lt;ul&gt; 
   &lt;li&gt;&lt;em&gt;Applicable to:&lt;/em&gt; Combines with unloading auger systems.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Symptoms:&lt;/em&gt; Progressive unloading slowdown caused by belt, pulley, or gearbox wear in the auger drive.&lt;/li&gt; 
   &lt;li&gt;&lt;em&gt;Critical Effect:&lt;/em&gt; &lt;strong&gt;Unloading auger failure.&lt;/strong&gt; Grain unloading becomes unavailable until repaired.&lt;/li&gt; 
  &lt;/ul&gt; 
 &lt;/details&gt; 
&lt;/div&gt; 
&lt;h4&gt;Chance and Severity of Breakdowns&lt;/h4&gt; 
&lt;p&gt;The probability of a breakdown depends entirely on the &lt;code&gt;Stress&lt;/code&gt; level in a specific system. The closer the current &lt;code&gt;Stress&lt;/code&gt; is to that system&#39;s current &lt;code&gt;Condition&lt;/code&gt;, the higher the chance of a failure occurring.&lt;/p&gt; 
&lt;p&gt;In addition, the &lt;code&gt;Condition&lt;/code&gt; level determines the probability of a critical breakdown. A critical breakdown is a failure that appears immediately at &lt;code&gt;Stage 4&lt;/code&gt;, skipping the earlier stages. The lower a system&#39;s &lt;code&gt;Condition&lt;/code&gt;, the higher the chance that a breakdown will be critical from the start.&lt;/p&gt; 
&lt;p&gt;The type of breakdown is not entirely random. First, it will always belong to the damaged system. Second, ADS keeps track of which wear factors have been active most often and uses that history to determine which failure is most likely to occur.&lt;/p&gt; 
&lt;h4&gt;Stages and Progression&lt;/h4&gt; 
&lt;p&gt;Most breakdowns go through several stages, gradually getting worse:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Minor:&lt;/strong&gt; A slight decrease in performance that might go unnoticed.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Moderate:&lt;/strong&gt; Problems become more obvious. Indicators on the dashboard may light up.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Major:&lt;/strong&gt; Significant operational problems that make using the vehicle difficult.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Critical:&lt;/strong&gt; Complete failure of a component. The engine stalls, brakes fail, etc.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;The stage at which a breakdown first appears depends on the system&#39;s &lt;code&gt;Condition&lt;/code&gt;. The lower the &lt;code&gt;Condition&lt;/code&gt;, the higher the starting stage is likely to be.&lt;/p&gt; 
&lt;p&gt;If not addressed, a breakdown will progress over time and can advance to a more severe stage. Progression is context-dependent: each breakdown has its own progression conditions. For example, unloading-system faults on combines progress only while the machine is unloading crop, which is intentionally modeled this way for realism.&lt;/p&gt; 
&lt;h4&gt;Cost and Detection&lt;/h4&gt; 
&lt;p&gt;With each new stage, the cost of repair increases. A critical breakdown can be very costly. For modern vehicles, the mod adds dashboard indicators that usually report a problem starting from the second stage.&lt;/p&gt; 
&lt;h4&gt;It Pays to Be Attentive!&lt;/h4&gt; 
&lt;p&gt;The cheapest repair is a preventive one. Keep an eye on—and an ear out for—your equipment. The initial stages of a breakdown are accompanied by various visual and audio cues that serve as early warning signs. This might manifest as fluctuating engine RPMs, dark exhaust smoke, or other unusual noises like knocking or squeaking during operation. If you catch these symptoms during the first, hidden stage and promptly take your vehicle for an Inspection, you can fix the problem for a minimal price.&lt;/p&gt; 
&lt;h4&gt;General Wear and Tear&lt;/h4&gt; 
&lt;p&gt;In addition to having a higher chance of breakdowns, older vehicles also suffer from gradual degradation of their core performance. As wear accumulates, engine power may drop, the transmission may begin to slip, battery performance may weaken, cooling efficiency may decline, and other important characteristics may deteriorate.&lt;/p&gt; 
&lt;p&gt;The closer a vehicle gets to the end of its service life, the more noticeable these degradation effects become. Even without a specific breakdown, a worn machine will already perform worse, less consistently, and less efficiently. Beyond random failures, low condition can trigger a permanent &quot;General Wear and Tear&quot; effect, simulating the sluggishness and aging behavior of worn machinery.&lt;/p&gt; 
&lt;h2&gt;4. Workshop Repairs and Service&lt;/h2&gt; 
&lt;p&gt;The workshop system has been fully reworked. You now choose between four core procedures: &lt;strong&gt;Inspection&lt;/strong&gt;, &lt;strong&gt;Maintenance&lt;/strong&gt;, &lt;strong&gt;Repair&lt;/strong&gt;, and &lt;strong&gt;Overhaul&lt;/strong&gt;.&lt;/p&gt; 
&lt;p&gt;You can also configure additional service parameters. For example, you can choose part quality (&lt;strong&gt;Used&lt;/strong&gt;, &lt;strong&gt;Aftermarket&lt;/strong&gt;, &lt;strong&gt;OEM&lt;/strong&gt;, &lt;strong&gt;Premium&lt;/strong&gt;) or set the desired maintenance scope.&lt;/p&gt; 
&lt;p&gt;These options directly affect service &lt;strong&gt;duration&lt;/strong&gt;, &lt;strong&gt;cost&lt;/strong&gt;, and &lt;strong&gt;quality&lt;/strong&gt;. All procedures now take meaningful time, so maintenance planning is an important part of fleet management.&lt;/p&gt; 
&lt;h4&gt;Inspection&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Helps you detect faults and understand the current condition of the vehicle. The quality of fault detection and the level of detail in the report depend on the selected inspection type:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt; &lt;p&gt;&lt;strong&gt;Visual Inspection:&lt;/strong&gt; A quick external check for when time is short. It can detect breakdowns, but because of the limited scope, there is a small chance that something important will be missed.&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;&lt;strong&gt;Standard Inspection:&lt;/strong&gt; A standard full inspection procedure. It detects faults and generates a standard condition report for the vehicle.&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;&lt;strong&gt;Complete Defectoscopy:&lt;/strong&gt; A complete technical defectoscopy of the vehicle. It can detect even hidden and potential breakdowns, identify defective parts, and generates a comprehensive report with exact condition values for vehicle systems.&lt;/p&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; Use it when you suspect a problem, when warning indicators appear, before expensive repairs, or when you want a clear picture of the vehicle&#39;s condition.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Maintenance&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Replaces all oils, filters, and fluids, restores your vehicle&#39;s &lt;code&gt;Service&lt;/code&gt; level, and also performs a standard inspection. The result depends on the selected maintenance scope:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt; &lt;p&gt;&lt;strong&gt;Minimal:&lt;/strong&gt; Basic service. Significantly cheaper and faster, but does not fully restore the &lt;code&gt;Service&lt;/code&gt; level. A great choice when time is short and you just need to finish the season.&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;&lt;strong&gt;Standard:&lt;/strong&gt; Routine maintenance according to manufacturer specifications. Restores &lt;code&gt;Service&lt;/code&gt; to a normal level.&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;&lt;strong&gt;Extended:&lt;/strong&gt; Comprehensive service. Takes longer and costs more, but restores &lt;code&gt;Service&lt;/code&gt; above the standard level. An ideal choice for long campaigns.&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;&lt;strong&gt;Preventive:&lt;/strong&gt; Preventive maintenance beyond the standard manufacturer service. Restores &lt;code&gt;Service&lt;/code&gt; to a normal level and reduces &lt;code&gt;Stress&lt;/code&gt; in the most problematic systems. It is expensive and time-consuming, but it significantly lowers the risk of breakdowns. An ideal choice for players who do not like unpleasant surprises in the middle of the season.&lt;/p&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; Regularly. Depending on its quality, each vehicle has its own service interval recommended by the manufacturer, and it should be followed closely. Small delays will not lead to immediate disaster, but if you ignore maintenance for too long, breakdowns will start to appear and the overall condition of the vehicle will decline rapidly. Also keep in mind that the cost of this procedure is &lt;strong&gt;fixed&lt;/strong&gt; and does not depend on the actual &lt;code&gt;Service&lt;/code&gt; level. This means servicing a vehicle at &lt;code&gt;90%&lt;/code&gt; costs the same as servicing it at &lt;code&gt;10%&lt;/code&gt;, so finding the right balance is key to managing your budget.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Repair&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; As the name suggests, repair removes detected breakdowns or makes them temporarily inactive. In addition, repair can also reduce the &lt;code&gt;Stress&lt;/code&gt; level in the affected system.&lt;/p&gt; &lt;p&gt;Repair is available in three types:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt; &lt;p&gt;&lt;strong&gt;Quick Fix:&lt;/strong&gt; A fast and almost free procedure that removes the negative effects of a breakdown on the vehicle, but does not eliminate the fault itself. The fault will return after some time. A service for specific situations when time is extremely limited.&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;&lt;strong&gt;Standard:&lt;/strong&gt; Standard repair with replacement of the failed part. Fully removes the fault and significantly reduces &lt;code&gt;Stress&lt;/code&gt; in the system.&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;&lt;strong&gt;Advanced:&lt;/strong&gt; Comprehensive repair with replacement of all related parts around the failed component. Fully removes all consequences of the breakdown and reduces system &lt;code&gt;Stress&lt;/code&gt; to zero.&lt;/p&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; Always when something has broken.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Overhaul&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; The most expensive and time-consuming type of work, capable of bringing old machinery back to life. Overhaul can:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt; &lt;p&gt;restore the &lt;code&gt;Condition&lt;/code&gt; of one system or all systems;&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;reduce &lt;code&gt;Stress&lt;/code&gt; to zero in one or several systems;&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;repair all breakdowns in one system or in the whole vehicle;&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;perform maintenance as part of the procedure, unless it is a partial overhaul.&lt;/p&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;p&gt;For an additional fee, you can also renew the vehicle&#39;s paintwork at a much lower cost than a normal repaint.&lt;/p&gt; &lt;p&gt;Overhaul comes in three variants:&lt;/p&gt; 
  &lt;ul&gt; 
   &lt;li&gt; &lt;p&gt;&lt;strong&gt;Partial:&lt;/strong&gt; A partial overhaul that works on one selected system. Restores that system&#39;s &lt;code&gt;Condition&lt;/code&gt; to a good level.&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;&lt;strong&gt;Standard:&lt;/strong&gt; A standard overhaul for the whole vehicle. Restores all systems to a good level.&lt;/p&gt; &lt;/li&gt; 
   &lt;li&gt; &lt;p&gt;&lt;strong&gt;Full&lt;/strong&gt; or &lt;strong&gt;Factory Restoration:&lt;/strong&gt; A very long and expensive procedure, comparable in cost to buying another machine. Brings the vehicle back to an almost like-new state and restores system &lt;code&gt;Condition&lt;/code&gt; to an excellent level.&lt;/p&gt; &lt;/li&gt; 
  &lt;/ul&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; For old, heavily worn-out vehicles with low Condition to bring them back to life.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; This procedure is expensive and does not restore &lt;code&gt;Condition&lt;/code&gt; to a fixed &lt;code&gt;100%&lt;/code&gt;. The final restoration level depends on vehicle maintainability, the number of previous overhauls, and a random restoration factor.&lt;/p&gt; 
&lt;h4&gt;Parts Quality Options&lt;/h4&gt; 
&lt;p&gt;For &lt;strong&gt;Maintenance&lt;/strong&gt; and &lt;strong&gt;Repair&lt;/strong&gt;, you can choose between four part qualities:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Used&lt;/strong&gt; (&lt;code&gt;Used&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Budget analogs&lt;/strong&gt; (&lt;code&gt;Aftermarket&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Original parts&lt;/strong&gt; (&lt;code&gt;OEM&lt;/code&gt;)&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Premium parts&lt;/strong&gt; (&lt;code&gt;Premium&lt;/code&gt;)&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;These options differ by cost and defect probability. The cheaper the parts, the higher the chance that they will be defective.&lt;/p&gt; 
&lt;p&gt;Depending on the procedure, defective parts have different negative effects. During &lt;strong&gt;Maintenance&lt;/strong&gt;, defective or low-quality consumables significantly shorten the service interval and increase &lt;code&gt;Condition&lt;/code&gt; wear across vehicle systems. During &lt;strong&gt;Repair&lt;/strong&gt;, low-quality parts may fail again after some time and bring the same fault back.&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Complete Defectoscopy&lt;/strong&gt; can detect defective parts and poor-quality consumables.&lt;/p&gt; 
&lt;h4&gt;⏱️ Time and Planning&lt;/h4&gt; 
&lt;p&gt;Beyond money, all workshop procedures require time. The duration of a service or repair depends on the vehicle&#39;s Maintainability (simpler machines are fixed faster).&lt;/p&gt; 
&lt;p&gt;&lt;strong&gt;Important:&lt;/strong&gt; The workshop has operating hours. All work is paused overnight and resumes only when the workshop opens the next day.&lt;/p&gt; 
&lt;p&gt;This adds a new layer of strategy: you now need to plan when to take your vehicles in for service. An urgent repair on a combine during the harvest season might extend into the next day, leading to downtime and financial loss.&lt;/p&gt; 
&lt;h2&gt;5. Pre-Shift Inspection and Maintenance&lt;/h2&gt; 
&lt;p&gt;ADS encourages you to spend a little time with your machines at the beginning of each working day. A quick pre-shift inspection and a few routine maintenance actions can help you detect problems early and avoid expensive breakdowns later in the field.&lt;/p&gt; 
&lt;h4&gt;Pre-Shift Inspection&lt;/h4&gt; 
&lt;p&gt;You can start a pre-shift inspection by holding the &lt;code&gt;R&lt;/code&gt; key near the vehicle you want to inspect.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; This quick routine check allows you to assess the level of technical fluids, the condition of radiator and air intake contamination, and potentially reveal active breakdowns that can realistically be identified through a visual inspection.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Low fluid levels may indicate an active fault. Dirt buildup in the radiator or air intake can lead to overheating and reduced engine performance. Some breakdowns can be spotted before they become serious if you make inspection part of your daily routine.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; Ideally before the start of each working day, especially before heavy field work, harvesting, or transport under load. The procedure takes very little time and can be performed anywhere.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Blowing Out the Cooling System&lt;/h4&gt; 
&lt;p&gt;You can buy an &lt;code&gt;Air Blower&lt;/code&gt; in the shop and use it to clean the radiator and air intake.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Removes accumulated dust and debris from the cooling system and engine air supply.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; A clean radiator reduces the risk of overheating, and a clean air intake helps the engine breathe properly under load. Just a few seconds of cleaning at the start of the day can prevent unnecessary wear and performance loss.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; Regularly, especially during dusty field work, harvesting, and hot weather.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Lubrication&lt;/h4&gt; 
&lt;p&gt;Complex machines with many moving parts, especially harvesters, require regular lubrication.&lt;/p&gt; 
&lt;p&gt;You can buy a &lt;code&gt;Grease Gun&lt;/code&gt; in the shop and use it to lubricate the vehicle before work.&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;What it does:&lt;/strong&gt; Restores lubrication for machines that require it as part of their daily preparation.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;Why it matters:&lt;/strong&gt; Poor lubrication increases wear and can eventually lead to lubrication-related failures. This is particularly important for high-complexity harvesting machines that operate under sustained load for long periods.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;When to use:&lt;/strong&gt; Before a working day or before demanding seasonal operations. Properly lubricating a combine before harvest is one of the easiest ways to avoid an inconvenient breakdown in the middle of the field.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;h2&gt;6. Reliability and Maintainability&lt;/h2&gt; 
&lt;p&gt;Each brand of vehicle in the game now has two parameters based on its real-world reputation:&lt;/p&gt; 
&lt;h4&gt;✅ Reliability&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;What it is&lt;/strong&gt;: Shows how well-made the vehicle is. Displayed with a checkmark icon in the shop menu.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;What it affects:&lt;/strong&gt; A vehicle with high reliability loses Condition more slowly, has a lower base probability of random breakdowns and has longer service intervals&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Examples: Premium European and American brands are generally more reliable than budget or older Eastern European counterparts.&lt;/p&gt; 
&lt;h4&gt;🔧 Maintainability&lt;/h4&gt; 
&lt;ul&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;What it is:&lt;/strong&gt; Shows how easily and cheaply the vehicle can be serviced and repaired.&lt;/p&gt; &lt;/li&gt; 
 &lt;li&gt; &lt;p&gt;&lt;strong&gt;What it affects:&lt;/strong&gt; A vehicle with high maintainability requires less money and time for all workshop operations and restores its Condition better after an overhaul.&lt;/p&gt; &lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Examples: Simple, older vehicles are often more maintainable than modern machines packed with electronics.&lt;/p&gt; 
&lt;h2&gt;7. Thermal Dynamics&lt;/h2&gt; 
&lt;p&gt;The mod simulates full engine heating/cooling behavior with thermostat operation. Temperature is not just visual data: it directly affects wear and failure risk.&lt;/p&gt; 
&lt;h4&gt;Engine Thermal Model&lt;/h4&gt; 
&lt;p&gt;Engine operating temperature is calculated from multiple factors:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;engine load (heat generation),&lt;/li&gt; 
 &lt;li&gt;ambient temperature,&lt;/li&gt; 
 &lt;li&gt;vehicle dirt level (radiator efficiency loss),&lt;/li&gt; 
 &lt;li&gt;airflow from speed (extra cooling while moving),&lt;/li&gt; 
 &lt;li&gt;thermostat opening state.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;h4&gt;Thermostat Behavior by Vehicle Age&lt;/h4&gt; 
&lt;p&gt;Thermostat control differs by production year:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;&lt;strong&gt;Older machines (mechanical thermostat):&lt;/strong&gt; More inert behavior, slower response to changing conditions, and higher stiction.&lt;/li&gt; 
 &lt;li&gt;&lt;strong&gt;Modern machines (electronic control):&lt;/strong&gt; Faster, PID-based thermostat response, allowing cooling efficiency to adapt much more quickly to load and temperature changes.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;This is why older equipment is generally more temperature-sensitive under variable workload.&lt;/p&gt; 
&lt;h4&gt;Overheating Protection (Limp Mode)&lt;/h4&gt; 
&lt;p&gt;Modern vehicles (&lt;code&gt;year &amp;gt;= 2000&lt;/code&gt;) use staged overheat protection:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;power is progressively limited as temperatures rise,&lt;/li&gt; 
 &lt;li&gt;at critical temperature, engine shutdown can occur.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;Older vehicles do not use this staged protection logic; severe overheating can lead to a hard engine failure.&lt;/p&gt; 
&lt;h4&gt;Warm-Up Is Required&lt;/h4&gt; 
&lt;p&gt;Cold operation under load is heavily penalized. Before hard work, especially in cold weather, let the machine warm up first to reduce accelerated wear.&lt;/p&gt; 
&lt;h4&gt;CVT Temperature Model&lt;/h4&gt; 
&lt;p&gt;CVT vehicles use a dedicated transmission thermal model. Unlike the engine model (which is mainly load-driven), CVT temperature is strongly affected by:&lt;/p&gt; 
&lt;ul&gt; 
 &lt;li&gt;transmission load factor,&lt;/li&gt; 
 &lt;li&gt;slip factor (especially when actual speed is much lower than implement-limited target speed),&lt;/li&gt; 
 &lt;li&gt;acceleration dynamics (frequent acceleration/deceleration and aggressive ratio changes),&lt;/li&gt; 
 &lt;li&gt;ambient temperature, vehicle dirt, and speed-based cooling.&lt;/li&gt; 
&lt;/ul&gt; 
&lt;p&gt;In practice, low-speed high-stress work and jerky driving can overheat CVT components even when engine temperature is still acceptable.&lt;/p&gt; 
&lt;h2&gt;8. Alternator &amp;amp; Battery&lt;/h2&gt; 
&lt;p&gt;ADS simulates the vehicle electrical system as a real working model rather than a simple on/off mechanic. The mod tracks battery charge, alternator output, onboard electrical loads, battery temperature, internal resistance, and voltage behavior under charging and discharge.&lt;/p&gt; 
&lt;p&gt;Battery behavior depends on several factors at once. Its available capacity drops in cold weather, internal resistance rises as the battery gets colder and more worn, and charge acceptance is reduced not only by low temperature, but also by high state of charge and poor battery health. In practice, this means a weak or cold battery does not just &quot;have less charge&quot; - it also charges worse, sags harder under load, and performs noticeably worse during starting.&lt;/p&gt; 
&lt;p&gt;The alternator is also modeled dynamically. Its output depends on engine RPM, current electrical load, and alternator health. If the onboard consumers demand more current than the alternator can provide, system voltage starts to sag and the battery begins to discharge. If there is charging headroom, the battery recharges gradually rather than instantly, and the charging process is limited by its real acceptance capability.&lt;/p&gt; 
&lt;p&gt;Battery temperature is simulated separately. It is influenced by ambient temperature, engine bay heat, and self-heating from current flowing through the battery&#39;s internal resistance. Because of that, the same battery can behave very differently in winter, after a cold start, or after long operation under heavy electrical load.&lt;/p&gt; 
&lt;p&gt;This system also interacts with breakdowns. A failed alternator can leave the machine running only on battery reserve, while battery failure can lead to weak cranking, hard starting, or a complete no-start situation. Depending on the condition of the electrical system, the vehicle may suffer from unstable voltage, poor charging, or total loss of starting ability.&lt;/p&gt; 
&lt;p&gt;If the battery is too weak to start the engine, you can use jumper cables and get power from another vehicle. ADS models this as an actual external power connection: both batteries are linked into a shared circuit, current flows between them, and the donor vehicle can support the receiver during cranking or temporary charging.&lt;/p&gt;</description>
      
      <media:content url="https://opengraph.githubassets.com/acd1c610825f6bbcdde2000c57420d7ac4d1a09add5ad4cbc6050c3817f136e5/id577/FS25_AdvancedDamageSystem" medium="image" />
      
    </item>
    
  </channel>
</rss>
