This is a personal fork of CrossPoint Reader with a focus on improved fonts and minimal reading stats.
- Xteink X3
- Xteink X4
- Xteink X4 Pro
- Seeed Studio Sticky
My goal with this fork was to maintain the core Crosspoint firmware while integrating my preferred typography and some lightweight reading statistics. I’ve focused on keeping the underlying system stable while layering in a few "nice-to-have" features and UI refinements along the way.
![]() Font: Bitter, Size: 12 pt, Margin: 15 |
![]() Reading Stats with custom front button mapping shown |
- New reader fonts: Lexend Deca and Bitter.
- Music notation and selected supplemental Unicode glyph support to be able to render Project Hail Mary accurately.
- Added a custom
Minimaltheme and sleep screen option for the minimalists out there. - Added a custom
Dashboardtheme and sleep screen option for reading stats enthusiasts. - Reader font sizes: 10 pt, 12 pt, 14 pt, and 16 pt.
- Added
strikethroughsupport. - Made underlines thicker for better visibility.
- Added support for
<hr>section breaks. - Added support for "redaction" style rendering.
- Added improved support for tables with simple markup.
- Added ability to add bookmarks.
- Added ability to remap front buttons that only applies in the reader.
- Added Bionic Reading and Guide Dots as optional reader modes.
- Added Force Paragraph Indents for books that render as one giant wall of text.
- Added ability to pin a sleep image as a favorite. The favorited image will always be displayed when your sleep settings are set to
CustomorCover + Custom(when no cover is available). - Added more in-reader control remapping options for side buttons, short power button clicks, and long-press menu actions, and more.
- Added ability to mark a book as finished from the in-book menu. A pop-up will also display once 99% of the book is reached. This status allows tracking of total books read.
- Added ability to move finished books to "Read" folder.
- In-book menu to quickly adjust reader options without having to exit the book.
- Reading stats: total books read, total reading time, number of sessions, pages turned, average session time, pages turned per minute. You can also set your reading stats as your sleep screen.
- All-time reading stats syncing between two CrossInk devices.
- Reading progress sync between two CrossInk devices.
- Added customizable Auto Page Turn Interval (anything between 5-120 seconds).
- Added ability to view Recent Books as a 3x3 grid view.
- To view a more detailed list for each version, visit the releases page to read release notes.
The default fonts have been replaced with Lexend Deca and Bitter. These fonts have been chosen specifically to improve reading fluency and e-ink performance. These 'sturdier' typefaces feature uniform stroke weights and open geometries, allowing the X4/X3 to render crisp, high-contrast text with font-aliasing on while significantly reducing ghosting and artifacts.
- Lexend Deca - A research-backed sans-serif typeface designed to improve reading fluency. Lexend was engineered based on the theory that reading issues are often a design problem (visual crowding) rather than a cognitive one.
- Bitter - A "contemporary" slab serif typeface for text, it is specially designed for comfortably reading on digital screens. The consistent stroke weight of Bitter helps it render particularly well on e-ink devices. The medium weight has been chosen specifically for improved rendering on the X4/X3.
The UI now uses Inter as the display font which has improved readability at smaller sizes.
- Built-in reader fonts include music notation, selected Cyrillic glyphs, and the Project Hail Mary CJK fallback ranges. Additional SD-card fonts retain emoji fallback support.
CrossInk includes 10 pt, 12 pt, 14 pt, and 16 pt built-in reader font sizes.
See SD Card Fonts for installing additional font families and size ranges.
Reader Options, Bionic Reading, Guide Dots, Force Paragraph Indents, reading stats, and finished-book behavior are documented in Reader Features.
CrossInk adds configurable button shortcuts.
See Controls for the full action list and defaults.
CrossInk runs on an ESP32-C3 with limited RAM, so very large folders or complex EPUBs can be slower than they would be on a phone, tablet, or desktop app.
- Keep folders under about 200 files. For the smoothest browsing, aim for 50-100 files per folder.
- Having 1000+ books on the SD card is fine if they are split into smaller folders, such as by author, series, genre, or read/unread status.
- Avoid putting every book in the SD card root. The file browser has to scan and sort the current folder before it can show it.
- Text-first EPUBs are the best fit. Large image-heavy EPUBs, scanned books, comics, and omnibus files with thousands of sections may load slowly or fail under memory pressure.
- As a rough target, EPUBs under 20 MB tend to work the best. Files over 50 MB may still work, but they are more likely to be slow or memory-sensitive, especially if they contain many large images.
- If an EPUB is unusually slow, try optimizing it with the built-in web optimizer (via File Transfer) before copying it to the SD card: remove unused high-resolution images, split very large omnibus files, and avoid embedding multiple full font families when possible.
- Use a reliable SD card and leave some free space. CrossInk stores settings, reading progress, cache files, stats, and generated book data on the card.
The fastest way to install Crossink is by using Inky, Crossink's web companion app: https://inky.crossink.dev/#flash-tools
Download a firmware-*.bin from the releases page, then flash it with the web installer or command line.
See Installation for step-by-step flashing and revert instructions.
Visit https://www.crossink.dev for more user guides and additional documentation.
CrossInk uses PlatformIO for building and flashing firmware. See Getting Started for prerequisites, clone setup, and validation commands.
Nix/NixOS users can enter the development shell with either nix develop (flakes) or nix-shell:
nix develop -f nix
# or
nix-shell nixTo flash a connected ESP32-C3 device, enable PlatformIO's udev rules in your NixOS configuration:
services.udev.packages = with pkgs; [ platformio-core.udev ];After rebuilding the system configuration, reconnect the device or reload udev rules.
Connect your device to your computer via a USB cable. Before the first build, initialize the repository's submodules (including freeink-sdk):
git submodule update --init --recursiveThen flash the firmware using the correct environment for the device. The default environment is for the X3/X4 devices. ESP32-S3 devices have their own named environments.
pio run -e default --target uploadIf PlatformIO reports PackageException: Can not create a symbolic link for freeink-sdk/libs/hardware/BatteryMonitor, not a directory, the freeink-sdk submodule is not initialized. Run the submodule command above and retry.
See Testing and Debugging for serial logging, simulator checks, static analysis, and bug-report guidance.
This repository does not accept pull requests. Feature requests may be opened in discussions, but major features requiring ongoing support should be directed upstream to CrossPoint.
If you'd like to show some love and support ongoing development, please consider supporting me on Ko-fi.

