Summary
This is one of the biggest updates we've shipped: new hardware support, faster loading on big books, offline dictionary lookups, and a UI overhaul.
Seeed reTerminal Sticky support
For the first time, CrossPoint is expanding beyond its original ESP32-C3 roots (XTeink X3/X4). We are officially introducing support for ESP32-S3 devices!
- First Supported Device: The upcoming Seeed reTerminal Sticky
- A huge shoutout to Seeed Studio for reaching out, sending test hardware, and being incredible partners throughout the process.
- Get Yours: You can order a Sticky (Launching July 30th) at crosspointreader.com/devices using our affiliate link to support the project.
Note
The XTeink X4 Pro isn't supported in this build yet, but a dedicated release will follow once we've got hardware to test against.
Big books open fast now
Big books used to take minutes to open the first time. That's basically gone: sections index on demand in the background while you read, so books open in around 5 seconds. Page turns feel smoother too, from rendering and memory work throughout the app, and we fixed memory allocation and CSS parser bugs that were causing out-of-memory crashes on complex EPUBs.
Offline dictionary lookups
Drop a StarDict dictionary onto your SD card and you can look up words with no connection. Select a word, get the definition popup. There's a setup guide if you want to get one running.
"What to read next"
Finish an EPUB and CrossPoint looks at what's on your device and suggests something next, right on the end-of-book screen.
Text settings got a rework
Font and layout options now live in one menu, with a live preview so you can watch line spacing, margins, and font changes happen without leaving the settings screen.
There's also a new selection popup. Any setting with three or more choices opens a dialog now instead of making you cycle through options one at a time.
Arabic, Farsi, and Urdu
1.4.0 added right-to-left text support. This one finishes the job for Arabic, Farsi, and Urdu: proper bidi handling and contextual glyph shaping, built-in fonts with full Arabic character sets, and the UI itself translated into Arabic.
Everything else
KOReader sync now handles custom sync servers, account registration, and metadata uploads. Wi-Fi should behave better — it reconnects to saved networks automatically, including hidden ones, and picks access points more sensibly. The web UI shows image previews in the file browser now and lists device serial numbers. OPDS downloads let you set your own folder and file format.
We also added the Vollkorn serif font (grab it from Manage Fonts), cleaned up <br> handling and list bullet alignment, and expanded CSS text-decoration support.
Translations got updates across Swedish, Italian, Spanish, Catalan, Valencian, Czech, Turkish, Portuguese (BR & PT), and Vietnamese, and we added brand new Norwegian Bokmål , Indonesian and Bosnian translations. Chinese entries are now shown correctly in the File Browser and chapters list.
Note
If you are upgrading from v1.0.0 or earlier, please upgrade to v1.4.1 first before installing the latest release. Skipping this step will cause your settings to be reset to their default values.
What's Changed
- chore: migrate from open-x4-sdk to freeink-sdk by @itsthisjustin in #2449
- docs: adding quick resume option and quick resume on timeout to userguide by @dasrecht in #2425
- fix: update Portuguese (Brasil) translations by @Rodrigo-Matsuura in #2458
- fix: x4 ghosting by bumping sdk by @itsthisjustin in #2469
- fix: x4 sleep/boot ghosting by @itsthisjustin in #2471
- feat: add Vollkorn font by @mrtnvgr in #2473
- fix(icons): align home menu icons with their labels by @fain182 in #2470
- chore: Initial multi-core compatibility by @Uri-Tauber in #2294
- feat: Selection Popup by @Uri-Tauber in #2358
- fix: sort sleep screen menu options to be more logically consistent by @dasrecht in #2480
- docs: update TOC in userguide by @dasrecht in #2479
- fix(reader): correct slider side-button direction and legend on X3 (#2402) by @tomlarse in #2428
- fix: changing translation in czech to fix overflowing navigation by @dasrecht in #2502
- fix: Add socket module import to build-sd-fonts script (#2504) by @itsthisjustin in #2505
- feat(network): add device serial number to web UI by @rahatarmanahmed in #2506
- feat(epub): improve text-decoration support by @lpla in #2397
- fix: settings persist on font clear, reserve() before push_back, minor by @sypianski in #2519
- feat: Lazy incremental EPUB section indexing by @itsthisjustin in #2452
- feat(reader): End of Book next-book suggestions (#2499) by @tomlarse in #2532
- fix: follow spec for zxing qr code generation by @latonis in #2540
- fix: render
between paragraphs as a visible section break by @Uri-Tauber in #2548 - chore: Replace product link with affiliate tracking link by @Uri-Tauber in #2401
- fix: Flatten TextBlock word storage into single allocation by @itsthisjustin in #2547
- feat: preview image files inline in web file browser by @fain182 in #2429
- fix: FontDecompressor OOM aborts on the render path (-fno-exceptions makes vector resize fatal) by @k5njm in #2526
- chore: Refactor stores to use PersistableStore CRTP template by @Uri-Tauber in #2464
- fix: show "Failed to index" when failing to parse epub by @Uri-Tauber in #2556
- chore: update the Italian translation by @matteoscopel in #2559
- perf: skip redundant progress writes when position is unchanged by @hooligan333 in #2436
- chore: update Spanish, Catalan, and Valencian translations by @lpla in #2566
- fix: update czech.yaml by @Pitel in #2574
- fix: Swedish translation by @steka in #2577
- fix: oom exceptions for OPDS, KOSync, and OTA via wolfssl by @itsthisjustin in #2475
- fix: handle low-bit-depth, upscaled, and SVG EPUB images by @lpla in #2503
- feat: Add Finnish hyphenation by @timo-mart in #2084
- perf: drop per-image delay(50) on chapter build, retry getDimensions by @hooligan333 in #2434
- perf: reserve CSS rule map before loading from cache by @hooligan333 in #2435
- feat: auto-connect saved Wi-Fi networks by @axhoff in #2189
- docs: add script to generate EPUB from USER_GUIDE.md by @jhuebel in #2152
- perf: always binary-search idref lookups in content.opf by @hooligan333 in #2433
- perf: stream NCX/NAV TOC into parser, drop temp-file round-trip by @hooligan333 in #2440
- perf: release CSS rule map after warm open by @hooligan333 in #2439
- chore: update Spanish, Catalan, and Valencian Wi-Fi strings by @lpla in #2578
- fix: Add framebuffer release/realloc and improved lazy indexing by @itsthisjustin in #2563
- feat: render placeholders while waiting for images to render by @Tritlo in #1003
- feat: Send optional document metadata with KOSync progress uploads by @nperez0111 in #1820
- feat: implement captive portal redirects for auto-loading the management page on hotspot mode by @latonis in #2550
- feat: Hidden wifi ssid support by @HgGamer in #2360
- fix: keep list item bullet inline with nested paragraph text by @jan-xyz in #2589
- feat: Arabic/Farsi/Urdu bidi reordering and contextual shaping — PR 1/3 by @YouHusam in #2541
- feat: add portuguese-PT.yaml by @Uri-Tauber in #2597
- feat: Arabic/Farsi/Urdu glyphs in built-in UI fonts - PR 2/3 by @YouHusam in #2596
- fix: Use HALF_REFRESH for sleep and boot instead of FULL by @itsthisjustin in #2588
- feat: complete Turkish translation (390/390) by @metoli86 in #2592
- feat(i18n): add Norwegian Bokmål translation by @tomlarse in #2113
- fix(css-parser): don't save unusable rules to RAM by @brianhuster in #2604
- feat: Arabic translation YAML - PR 3/3 by @YouHusam in #2599
- fix: ignore open-x4-sdk and fs_ by @Uri-Tauber in #2609
- fix: remove duplicate sleep logic by @Uri-Tauber in #2492
- feat(i18n): add Bosnian translation by @arunoruto in #2616
- feat: configurable OPDS download folder and filename format by @oscarnogueira in #2571
- fix(kosync): reload Epub before reading upload metadata by @W-Floyd in #2608
- feat: add options to remember web upload settings & rename ebooks to
{title} - {author}by @victor141516 in #2534 - feat: add smart KOReader progress sync by @axhoff in #2192
- feat: Back on home menu opens the most recent book by @rxmmah in #2619
- feat: enable CORS headers in the HTTP API by @metoli86 in #2594
- fix: reduce CSS parse-time OOM risk in chapter layout by @brianhuster in #2606
- fix: correct the settings enums for "blank" and "cover + custom" sleep screens by @uxjulia in #2635
- feat: Add kosync user registration and switch to crosspoint-sync server by @itsthisjustin in #2587
- feat: Add option to switch behavior for "back to browser / home" in Reader activity by @tsymalla in #2366
- fix: EndOfBookOptions fails to compile by @Uri-Tauber in #2646
- feat: Slim dictionary by @Uri-Tauber in #2583
- fix: swedish translation by @steka in #2649
- feat: add Nix development shell by @thiagokokada in #2645
- fix(i18n): add missing strings in PT-PT translation by @CookieCaptainD in #2632
- fix(epub): preserve word continuation when splitting CJK text on MAX_WORD_SIZE by @brianhuster in #2652
- fix: select strongest AP for matching WiFi SSID by @lpla in #2655
- chore: Clarify project scope and development priorities by @itsthisjustin in #2149
- feat: Add touch coordinate mapping and RTOS task yielding by @itsthisjustin in #2481
- fix: duplicate User-Agent header on wolfSSL requests breaks strict servers (aiohttp 400) by @dylanbyars in #2661
- chore: update Vietnamese translations by @brianhuster in #2667
- chore: Migrate Settings/State onto PersistableStore; by @Uri-Tauber in #2647
- add Bahasa Indonesia Translation by @chalei in #2666
- feat: unified Text Settings screen with live preview by @PaulDelestrac in #2605
- fix: Move sunlight fading fix setting to different group by @itsthisjustin in #2689
- chore: update Italian translation by @matteoscopel in #2691
- feat: cjk UI font fallback by @szetszho in #2521
- chore: update Spanish, Catalan, and Valencian translations by @lpla in #2651
- feat: deferred refresh, memory work port, and first-open speedups by @itsthisjustin in #2611
- fix: Warp around in Percent Selection by @Uri-Tauber in #2677
- fix: STR_RESTARTING_HINT text overflow bug by @Uri-Tauber in #2692
New Contributors
- @Rodrigo-Matsuura made their first contribution in #2458
- @tomlarse made their first contribution in #2428
- @rahatarmanahmed made their first contribution in #2506
- @sypianski made their first contribution in #2519
- @hooligan333 made their first contribution in #2436
- @Pitel made their first contribution in #2574
- @timo-mart made their first contribution in #2084
- @axhoff made their first contribution in #2189
- @nperez0111 made their first contribution in #1820
- @HgGamer made their first contribution in #2360
- @jan-xyz made their first contribution in #2589
- @metoli86 made their first contribution in #2592
- @brianhuster made their first contribution in #2604
- @arunoruto made their first contribution in #2616
- @oscarnogueira made their first contribution in #2571
- @W-Floyd made their first contribution in #2608
- @victor141516 made their first contribution in #2534
- @tsymalla made their first contribution in #2366
- @thiagokokada made their first contribution in #2645
- @CookieCaptainD made their first contribution in #2632
- @dylanbyars made their first contribution in #2661
- @chalei made their first contribution in #2666
- @szetszho made their first contribution in #2521
Full Changelog: 1.4.1...1.5.0