KOReader 2026.07 “Sailing Walrus”
It’s been about four months since the previous release, so it’s about time, isn’t it? One very interesting addition is background cleanup for PDFs with Mask and SMask, which is technobabble for backgrounds (particularly in Archive.org PDFs, #15401). It means you might not need preprocessing to be able to open them on your ereader without having to be fairly patient when turning pages, though the usual warnings apply: backgrounds are not just the yellowish color of paper, but they might also contain most of the non-textual content, if any.
Kobo v5 support was finally merged (#12401), and will also reach the nightly builds server soon. There’s also new or improved support for the PocketBook Era Lite, reMarkable Paper Pure, newer Onyx Android devices, and some Kindle models.
The hotkeys plugin now supports single-key shortcuts (#14867), and speaking of plugins, there is now built-in support to delete them (#15240).
SyncService is replaced by the new Cloud storage plugin (#15210). It supports uploading, downloading, and deleting selected files, configurable servers and upload folders, natural sorting, and improved WebDAV handling.
And last but not least, there’s now OPDS 2.0 basic support (#15696).
This month’s logo was contributed by @thunder_clud.
We’d like to thank all contributors for their efforts. Some highlights since the previous release include:
-
[doc] Add DataStorage developer docs (#15121) @TechnoCode44
-
linux: fix metadata to match our flatpak package (#15126) @benoit-pierre
-
otamanager: honor http proxy (#15131) @benoit-pierre
-
[Kindle] fix setting absolute warmth without breaking incremental settings (#13344) @mergen3107
-
tools: fix update-metadata (#15132) @benoit-pierre
-
Footnote popup: add option to justify (or not) text (#15129) @poire-z
-
[HtmlBoxWidget, DictQuickLookup] add capability to search within dictionary definitions (#15001) @Commodore64user
-
bump base (#15153) @benoit-pierre
- libarchive: ensure FFI cdecls are the same on all platforms (koreader/koreader-base#2305)
-
pocketbook: inkview handling rework (#15087) @benoit-pierre
-
bump crengine: support ::first-line, COLRv0 fonts, CHM and CSS fixes (#15155) @poire-z
Includes:- koreader/crengine#656
- CHM: improve Chinese encoding handling
Closes #15079.
- CHM: improve Chinese encoding handling
- koreader/crengine#653
renderFinalBlock(): fix background color propagation among inlines- first-letter: resets some CSS, ignore invisible, stop on
<br/> - CSS: support for pseudo element
::first-line
Closes #14391. - CSS: add support for
float/clear:inline-start/inline-end
- koreader/crengine#654
- lvfntman, lvdrawbuf: add COLR v0 color font rendering support
Also add style tweaks to disable first-letter and first-line.
- koreader/crengine#656
-
css_tweaks: fix typo in Disable first-line tweak name (#15161) @poire-z
-
bump base (#15172) @benoit-pierre
- pocketbook: rework the inkview handling rework… (koreader/koreader-base#2307, close #15156)
- fi/util: prevent util.runInSubProcess children from running atexit handlers (koreader/koreader-base#2308, close #15167)
-
ReaderStatus: fix End of Document status change (#15159) @hius07
-
coverimage: only update on rotation if rotate image enabled (#15179) @liskin
-
[DictQuickLookup] detection and key-event injection for SDL devices (#15158) @Commodore64user
-
File browser: fix “Folders and files mixed” menu item (#15202) @hius07
-
bugfix: check for current directory in webdav listing (#15192) @rolurq
-
SyncService is replaced by Cloud storage plugin (#15210) @hius07
-
pocketbook: drop redundant trace (#15222) @benoit-pierre
-
Status bars: fix showing additional content (#15218) @hius07
-
PluginLoader: use directory name for enabled/disabled, deprecate metadata name (#15096) @Frenzie
-
Feature: Implement the ability to delete plugins (#15240) @Saterz
-
[MultiInputDialog] split password field and checkbox (#15234) @Commodore64user
-
[Android] Bump luajit-launcher (#15251) @Frenzie
- EventReceiver: use Unix domain sockets instead of mkfifo() koreader/android-luajit-launcher#580
- Fix Crema Soundup menu flickering due to unsupported GLR16 waveform koreader/android-luajit-launcher#582
- Add support for ONYX_GO7 device ID koreader/android-luajit-launcher#584
- Add ONYX_PALMA2_PRO to color device IDs koreader/android-luajit-launcher#588
-
ReaderBookmark, BookmarkBrowser: unified bookmark details window (#15250) @hius07
-
InputText: delete selection; undo last deletion (#15238) @hius07
-
fix(pocketbook): Networking and DNS resolution during early boot (#15244) @ananyatimalsina
-
macos: tweak release 7z name (#15284) @benoit-pierre
-
Minor Wikipedia & highlighting fixes, add “Toggle hanging punctuation” to dispatcher (#15285) @poire-z
-
Cloud storage: keep settings in the base class (#15274) @hius07
-
Add python to shell.nix (#15296) @RoadRoller01
-
vocabbuilder.koplugin: Add ‘forgot’ button in “Vocabulary exists” popup window (#15297) @weijiuqiao
-
UI: Capitalize Bulgarian language name in language menu (#15303) @d0nizam
-
[KeyValuePage] Fix keyboard hold events targeting wrong item (#15305) @Commodore64user
-
MoveToArchive: load settings when needed only (#15302) @hius07
-
bump base (#15308) @benoit-pierre
- feat: Kindle: add uevent listener for input device hotplug (koreader/koreader-base#2327)
- ffi/util,SDL3: stop SDL3 gamepad thread around fork() to fix Linux UI freeze (koreader/koreader-base#2332)
-
bump crengine: MOBI and CSS fixes ; add getNearestWordFromPosition() (#15310) @poire-z
bump crengine: MOBI and CSS fixes
Includes:
- koreader/crengine#661
- pdbfmt: don’t overwrite extracted metadata
- pdbfmt: extract more metadata from MOBI EXTH
- pdbfmt: extract MOBI non-EXTH title if necessary
- koreader/crengine#662
- CSS first-line: fix possible crash
- CSS width: fit-content: account for the element padding
- getNodeByPoint(): improve fallback check
cre.cpp: add getNearestWordFromPosition()
Useful for improve text selection using DPAD/arrow keys.
Requested along koreader/crengine#659. - koreader/crengine#661
-
[PocketBook] Respect input_ignore_gsensor setting (#15304) @jannickfahlbusch
-
[doc] Add IconWidget developer docs (#15253) (#15276) @TechnoCode44
-
Feature: Add a two different submenus for built-in and user plugins (#15245) @Saterz
-
plugins: avoid legacy use of double quoted sqlite strings (#15318) @benoit-pierre
-
BookStatusWidget: improve note gesture handling (#15311) @Frenzie
-
[Hotkeys] add single-key shortcuts (#14867) @Commodore64user
-
DocSettings: fix moving doc setting to ‘hash’ location (#15319) @hius07
-
KOSync: optionally send document metadata with progress sync (#15306) @nperez0111
-
Feat: KS3 & KSC support (#15256) @ThatHackerDudeFromCyberspace
-
Book metadata archive: ‘restore from archive’ wording (#15326) @hius07
-
feat: ExternalKeyboard: allow plugin to load on Kindle (#15248) @zampierilucas
-
[DictQuickLookup] add custom button layout (#15184) @Commodore64user
-
Bug fix: ensure default_layout is up to date when generating menu (#15340) @Commodore64user
-
ci/macos: add workflow dispatch (#15346) @benoit-pierre
-
feat: add Lemma Greek-English dictionary (#15357) @ciscoriordan
-
fix: bump Lemma Greek-English Dictionary URL to v1.3.3 (#15359) @ciscoriordan
-
Tweak document settings: open settings file when needed only (#15355) @hius07
-
kindle: add SSH server support to KUAL extension (#15352) @benoit-pierre
-
datetime: add gettext context to abbreviated months (#15369) @ichnilatis-gr
-
VocabBuilder: sync action; enable deleting settings (#15372) @hius07
-
HttpInspector: enable deleting plugin settings (#15373) @hius07
-
QR from clipboard: enable highlight button on devices without clipboard (#15363) @hius07
-
BatteryStat: enable deleting plugin settings (#15378) @hius07
-
NewsDownloader: enable deleting plugin settings (#15382) @hius07
-
kobo: Fix detection of ‘Kobo mode’ of Tolino devices (#15389) @AlexanderS
-
plugins/calibre: preserve author_sort in slim metadata (#15398) @AndyHazz
-
TouchMenu: allow mousewheel scrolling; fix possible crash when highlighting (#15402) @poire-z
-
Increase viewport for PB743K3 (#15410) @SilverGreen93
-
- Support SDL3 pen events (koreader/koreader-base#2351)
- Isolate PDF SMask (koreader/koreader-base#2361)
-
fix: wikipedia enforced image step sizes (#15399) @oscargolding
-
Add support for Pocketbook Era Lite (#15415) @Kulllerkeks
-
Statistics: fix pic documents; enable deleting settings (#15387) @hius07
-
ReaderHighlight: clear selection after showing OCR infomessage (#15213) @Frenzie
-
bump base (#15418) @benoit-pierre
- KOPTContext: add white threshold (koreader/koreader-base#2363)
-
[DictQuickLookUp] bug_fix: don’t mutate default_layout (#15422) @Commodore64user
-
bump base & crengine: support for initial-letter, and other fixes (#15429) @poire-z
Includes:- fix GCC 16 warnings (-Wunused-but-set-variable) koreader/crengine#663
- koreader/crengine#666 :
- ldomXRange::getRangeText(): newline on
- createXPointer(pt)/getRect(): use formatter src->t.text
- getRect(): unify one-char-long word width handling
- CSS ::first-letter: use non-letter char if no letter in first text node
- CSS ::first-line: properly handle inline-block
- createXPointer(pt): return source text node on pseudoElem[FirstLetter]
- getSegmentRects(): compare .bottom additionally to .top
- lvfntman: add getCapHeight()
- CSS initial-letter: add CSS parsing and style slot
- CSS initial-letter: render ::first-letter via inline-box
- ldomXRange::getRangeText(): newline on
Also includes:
- MuPDF: check if page has smask before applying it koreader/koreader-base#2364
credocument: fix call cache statistics (not updated after the bit time.lua refactor years ago – #15377 (comment)).
-
QRClipboard: fix extending highlight to sentence (#15431) @hius07
-
doc: update build requirements (#15437) @benoit-pierre
-
sdl: better init trace (#15438) @benoit-pierre
-
Profiles: auto-executing list; path patterns (#15439) @hius07
-
drop remains of non-functional Ubuntu Touch target (#15442) @benoit-pierre
-
feat: saturation control (#15381) @NoaHimesaka1873
-
mxcfb: fix kobo FFI cdecls (#15446) @benoit-pierre
-
ReadCollection: fix per-collection write filter typo on removeItem (#15454) @AndyHazz
-
fix: missing saturation in copyPageState (#15455) @NoaHimesaka1873
-
feat: add turkish reader.dict monolingual dictionary (#15457) @BoboTiG
-
feat: QTFB input/framebuffer support (#15461) @NoaHimesaka1873
-
feat: reMarkable Paper Pure support (#15463) @NoaHimesaka1873
-
[ReaderKeySelection] NT: improved text selection with cursor keys (#15377) @Commodore64user
-
ReaderDictionary: prettify dict download list (#15452) @hius07
-
fix
common/koreader.sharguments handling on restart (#15312) @benoit-pierre -
make: change android targets to
android-xxx(#15351) @benoit-pierre -
generate new ota packages (#15236) @benoit-pierre
-
Screensaver: don’t load the module on unsupported devices (#15465) @hius07
-
fix: appload quirk workaround (#15475) @NoaHimesaka1873
-
[TextBoxWidget] Find in definition (wiki edition) (#15356) @Commodore64user
-
SDL: shell-escape openLink and external dict lookup args (#15491) @Booyaka101
-
[DictQuick, Paging, Rolling] Eclectic fixes for ‘find In Definition’ and key Events (#15498) @Commodore64user
-
[TextViewer] NT: add page turn events for easier navigation (#15504) @Commodore64user
-
[SDL,plugin/hotkeys] Process gamepad events (#15449) @Frenzie
-
Screen rotation: always show rotation mode options (#15505) @chofuhoyu
-
Cloud storage: download/delete selected files (#15522) @hius07
-
fix(cloudstorage): webdav not listing folders (#15532) @Skittyblock
-
fix(cloudstorage): choose folder not showing for empty dirs (#15533) @Skittyblock
-
vocabbuilder.koplugin: Add “got it” button in “Vocabulary exists” popup window (#15534) @weijiuqiao
-
[reMarkable] fix: native QTFB OTA update (#15538) @NoaHimesaka1873
-
fix(vocabbuilder): leaked db conn breaking sync (#15531) @Skittyblock
-
bump base & crengine, enhanced search on CreDocuments (#15543) @poire-z
bump base: ffi-cdecl and ffi tweaks and updates
Also:
- ffi/loadlib: fix loading SSL library in monolibtic mode
- ci/circle: bump docker images (new ffi-cdecl version)
- ffi/zstd: allow setting compression level
- ffi/hashoir: new module for hashing memory
- ffi/util: add bidirectional support to
runInSubProcess - utils: improve
inkview_hgenerator script
(Too many PRs to add links to each of them :/ :))
bump crengine: enhanced findText(); Malayalam hypnehation
Includes:
- TextLang, hyphenation: add Malayalam (ml) koreader/crengine#672
- koreader/crengine#673
findText(): return list of ldomXRange instead of ldomWordfindText(): implement tweakable enhanced search
- koreader/koreader-base#2411
- cre.cpp findText() and findAllText():
Updated to handle returned ldomXRange instead of ldomWord,
and added optional searchFlags params.
- cre.cpp findText() and findAllText():
ReaderTypography: add Malayalam to the list of supported languages.
ReaderSearch: enhanced search on CreDocuments
See #10366 (comment) (flags re-ordered since this post – don’t trust them there).
2 others commented out would give:

-- For CreDocuments, different search features are available: -- Enhanced search flags: -- MATCH_ACROSS_TEXT_NODES = 0x0001 -- COLLAPSE_CONSECUTIVE_SPACES = 0x0002 -- NORMALIZE_CANONICAL = 0x0004 -- NORMALIZE_COMPATIBILITY = 0x0008 -- IGNORE_FORMAT_CONTROL_CHARS = 0x0010 -- FOLD_SPACES = 0x0020 -- FOLD_APOSTROPHES = 0x0040 -- FOLD_HYPHENS = 0x0080 -- IGNORE_DIACRITICS = 0x0100 -- Make a few types of search available as radion buttons -- (These are available to be updated/extended by user-patches) search_types = { -- Title of the radio button , search_flags, use_regex { _("Ignore accents / stress marks"), 0x01FF, false }, -- { _("As typed"), 0x0017, false }, -- { _("Legacy search"), 0x0000, false }, { _("Regular expression (long-press for help)"), 0x0001, true }, }, default_search_type = { "", 0x00FF, false }, -- Most except IGNORE_DIACRITICS
These Radio buttons (each setting a set of flags) are mutually exclusive, but they can also be all unchecked (in which case, we use the defaults we seem to have all agreed on).
Case insensitiveis an independant one that works with all others (and the default of none).
Should they be squared checkboxes ? -
bump crengine: refactor Font Manager, support for variable fonts (#15553) @poire-z
Includes koreader/crengine#669:- lvfntman: Refactor Font Manager; Add variable fonts
- CSS font-optical-sizing
- lvfntman: Docs and tests for refactor
Thanks to @spfenwick .
Closes #12800 (might have been about the UI fonts, but well, it’s more valuable in crengine, and we got it there, so closing).
-
fix(language): remove duplicate Vietnamese language entry (#15552) @gaunh0
-
Page overlap: no indicator; actions for gestures/profiles (#15541) @hius07
-
Enable ‘Saturation’ option if ‘Color rendering’ is on (#15542) @kerivin
-
Malayalam Keyboard (FUTO layout) (#15560) @NalrTynhe
-
[ReaderKeySelection] NT: add indicator overlay (#15547) @Commodore64user
-
kindle: fix possible crash when not connected to a network but wifi is on (#15519) @benoit-pierre
-
[ReaderKeySelection] flash word when starting indicator (#15571) @Commodore64user
-
Reworked the Wallabag plugin to recursively scan the download directory (#15558) @evmcl
-
Collections: fix removing book from collections via file popup dialog (#15577) @hius07
-
screensaver: add option for extra refreshes to avoid sleep screen ghosting (#15568) @ahmadadam96
-
minor wording and button corrections (#15582) @Commodore64user
-
bump base & crengine: Font Manager enhancements and fixes (#15587) @poire-z
Includes:- lvfntman:
SetAliascleanup koreader/crengine#678 - lvfntman: synthetic small caps koreader/crengine#680
Closes #13563. - lvfntman: fix duplicated
@font-facehandling koreader/crengine#682 - lvfntman: resurrect
getFontFileNameAndFaceIndex()koreader/crengine#683
Closes #15574.
Closes #15581. - CSS: allow arbitrary
font-weights koreader/crengine#681
Closes #4174. - DrawBuf: allow drawing colors inverted koreader/crengine#677
Closes #15544.
Also:
cre.cpp:drawCurrentPage()set invert_colors when invert_images provided.Also:
feat(ffi): invert screenshots in night mode koreader/koreader-base#2401 - lvfntman:
-
kindle: fix issues when running from nonstandard location (#15579) @ThatHackerDudeFromCyberspace
-
feat: add dutch reader.dict monolingual dictionary (#15589) @BoboTiG
-
CloudStorage: fix servers order when adding new server (#15580) @hius07
-
NewsDownloader: check relative urls using socket.url.parse() (#15595) @zikasak
-
ffi/posix_hrework + useffi/netinfo(#15556) @benoit-pierre -
move kosync plugin settings into a separate file (#15591) @zikasak
-
kindle: More non-standard installation fixes and default NO_EIPS_SLEEP when not launched from KUAL (#15601) @ThatHackerDudeFromCyberspace
-
kindle: Stop awesome regardless whether KOReader was launched from KUAL or not (#15608) @ThatHackerDudeFromCyberspace
-
[InputDialog] NT: remove separator from widget’s layout (#15602) @Commodore64user
-
[ReaderLink, Back] clear page links with Back key (#15613) @Commodore64user
-
kindle: Fix launch script path detection issues on older firmwares (#15625) @ThatHackerDudeFromCyberspace
-
NetworkMgr: re-DHCP after Wi-Fi network switch on Kobo (#14790) (#15618) @Warlium
-
readerdictionary: fix & improve downloading dictionaries (#15642) @benoit-pierre
-
dictionaries: fix / update some dictionaries (#15641) @benoit-pierre
-
document: fix crash when opening single images (#15644) @benoit-pierre
-
document: fix another
background_cleanupcheck (#15648) @benoit-pierre -
Add hall_file support to KindleTouch and KindleBasic4 (#15654) @evankrummel
-
NetworkListener: guard against auto_disable_wifi enabled by user on unsupported devices (#15655) @Frenzie
-
OPDSParser: handle self-closing content tags (#15515) @Booyaka101
-
SSH.koplugin: add force‑close toggle for stop (#15338) @d0nizam
-
fix: locale C or en_US has its own plural manipulation, the default one. (#15375) @picospuch
-
DjVu: preserve text-layer reading order in selection (#15298) @anaxonda
-
KOSync: queue failed progress updates for retry on reconnect (#15324) @collaed
-
feat(reMarkable): Oxide/libblight support (#15611) @NoaHimesaka1873
-
Support SDL stylus input (#15344) @HackingGate
-
[InputText] Toggle on-screen keyboard with a lone Sym/ScreenKB tap (#15669) @iav
-
Fix crash when opening KOReader with connected BT keyboard (#15681) @mergen3107
-
add id Indonesian translation to UI (#15693) @cloned-doy
-
[ReaderKeySelection] rework addToMainMenu (#15685) @Commodore64user
-
pdfdocument: rename deleteMarkupAnnotation call to deleteAnnotation (#15672) @tomasAlabes
-
screensaver: improve extra flash option to fix banding (#15703) @ahmadadam96
-
bump base (#15709) @benoit-pierre
- libjpeg-turbo: minor cleanup (koreader/koreader-base#2451)
- MuPDF: enable Background Cleanup for PDFs with Mask (not SMask) (koreader/koreader-base#2452, close #15694)
- jpeg: re-enable bmp writing support + miscellaenous improvements (koreader/koreader-base#2453, close #15699)
-
screensaver: add default values to anti-ghosting redraws spinner (#15710) @ahmadadam96
-
Kobo v5 support (#12401) @NerdyProjects
-
BookList: safeguard series index for sorting (#15705) @hius07
-
NetworkSetting: guard against missing scan result flags (#15714) @SAY-5
-
Quickstart: teach about menu search (#15712) @gilgulgamesh
-
device/kobo: add Kobo:otaModel() like on Kindle for uniformity (#15713) @Frenzie
-
WebDAV sync: fix infinite 412 loop on weak ETags (#15715) @Lorite
-
pocketbook: fix startup crash after 6.11.1480 firmware update (#15730) @9783e6
-
Device:ping4: keep the native ICMP path on kernels < 2.6.27 (fix legacy Kindle UI freeze) (#15663) @iav
-
[DictQuickLookup] K4: use modifier to call lookupinputword widget (#15723) @Commodore64user
-
Flash when displaying covers to reduce ghosting (#15724) @dmalinovsky
-
android: set FONTDIR so MuPDF can find its fallback fonts (#15738) @jperon
-
fix(reMarkable): PowerD fixes for frontlight and HE sensor (#15690) @NoaHimesaka1873
New Contributors
- @TechnoCode44 made their first contribution in #15121
- @j-v made their first contribution in #15142
- @rolurq made their first contribution in #15192
- @legokol made their first contribution in #15231
- @Saterz made their first contribution in #15240
- @PauLuke made their first contribution in #15267
- @ananyatimalsina made their first contribution in #15244
- @RoadRoller01 made their first contribution in #15296
- @d0nizam made their first contribution in #15303
- @nperez0111 made their first contribution in #15306
- @ThatHackerDudeFromCyberspace made their first contribution in #15256
- @zampierilucas made their first contribution in #15248
- @vandot made their first contribution in #15322
- @ciscoriordan made their first contribution in #15357
- @AlexanderS made their first contribution in #15389
- @AndyHazz made their first contribution in #15398
- @kerivin made their first contribution in #15401
- @Kulllerkeks made their first contribution in #15415
- @karlb made their first contribution in #15456
- @xxyzz made their first contribution in #15451
- @Booyaka101 made their first contribution in #15491
- @chofuhoyu made their first contribution in #15505
- @Skittyblock made their first contribution in #15532
- @gaunh0 made their first contribution in #15552
- @NalrTynhe made their first contribution in #15560
- @lyluqo made their first contribution in #15578
- @evmcl made their first contribution in #15558
- @ahmadadam96 made their first contribution in #15568
- @Warlium made their first contribution in #15618
- @evankrummel made their first contribution in #15654
- @picospuch made their first contribution in #15375
- @anaxonda made their first contribution in #15298
- @collaed made their first contribution in #15324
- @hugo1120 made their first contribution in #15659
- @HackingGate made their first contribution in #15344
- @iav made their first contribution in #15669
- @cloned-doy made their first contribution in #15693
- @tomasAlabes made their first contribution in #15672
- @NerdyProjects made their first contribution in #12401
- @SAY-5 made their first contribution in #15714
- @gilgulgamesh made their first contribution in #15712
- @Lorite made their first contribution in #15715
- @9783e6 made their first contribution in #15730
Full Changelog: v2026.03...v2026.07 — closed milestone issues
Installation instructions: Android • Cervantes • ChromeOS • Kindle • Kobo • PocketBook • ReMarkable • Desktop Linux • MacOS

