Render PDFs like EPUBs.
On-device PDF reflow for CrossInk on Xteink. Use your reader font, size, spacing, margins, page turns, bookmarks, clippings, and reading progress, without converting files on a computer.
Download Tiny · Download XLarge · Installation guide
| On-device reflow | Your reading settings | No conversion step |
|---|---|---|
| Prepared directly on the Xteink | Uses CrossInk typography and controls | Copy the PDF to the SD card and open it |
Tiny includes 10, 12, 14, and 16 pt text. XLarge includes 16, 18, and 20 pt text. Both downloads contain the full CrossInk firmware, PDF support, emoji, and symbol support.
CrossPDF extracts the reading content from supported PDFs and passes it through CrossInk's existing reflow reader.
| A fixed-page PDF viewer | CrossPDF |
|---|---|
| Shrinks the original page | Repaginates the text for the display |
| Keeps the PDF's font sizes | Uses your CrossInk font and size |
| Needs zoom and pan | Uses normal page turns |
| Measures progress in PDF pages | Measures progress by words read |
| Reopens the original layout | Reuses prepared reading data from the SD card |
The PDF is still the source file. CrossPDF does not replace it or modify it.
For supported PDFs, the reader keeps the parts that matter when reading:
- Document title and author metadata
- Chapters and table of contents
- Nested outline entries and document index entries
- Internal links and named destinations
- Publisher page labels
- Supported JPEG and raster images
- Reading position, calculated from words read across the book
- Resume position, bookmarks, and clippings
The PDF's visual font sizes and page dimensions are deliberately ignored. Your selected CrossInk typography is used instead.
The first open prepares the book directly on the reader:
- CrossPDF reads the PDF in small pieces.
- Text, navigation, and supported images are written to reusable reading data on the SD card.
- The normal reflow reader lays out the text with the current device settings.
- Later opens and page turns reuse that saved data instead of parsing the PDF again.
The first open can take longer than opening an EPUB, especially for a large or complicated document. Once preparation is complete, normal reading does not keep reprocessing the source PDF. This keeps processor work and SD-card traffic down while reading.
Preparation is bounded for the ESP32-C3's limited memory. It does not borrow a second display framebuffer or try to hold the whole document in RAM.
CrossPDF is intended for:
- Born-digital PDFs with selectable text
- Scanned PDFs that already contain a usable OCR text layer
- Documents with ordinary text columns, headings, tables, links, and supported images
- Passwordless RC4-encrypted PDFs that use the PDF Standard security handler
It is not intended for:
- Image-only scans without OCR text
- PDFs that require a password, AES encryption, or another unsupported security handler
- Comics, magazines, forms, or documents where the exact printed page is the content
- PDFs that depend on unsupported encodings, filters, or interactive features
Complex layouts are simplified into a reading order. Optional visual material that cannot be handled safely may be left out. See PDF Support for the detailed boundary.
A damaged or unsupported PDF should not take down the rest of the reader. If parsing fails, storage runs out, or the PDF needs more memory than the device can safely provide, preparation stops and the PDF stays closed. CrossPDF does not publish a half-built book cache.
The source PDF is left unchanged, so it can be removed, replaced, or tried again later.
PDF support is added to the existing CrossInk reading experience. EPUB behavior and its cache format remain separate.
This fork also includes:
- EPUB, TXT, and XTC reading
- Lexend Deca and Bitter reader fonts
- Inter for the interface
- Unicode emoji and miscellaneous symbol support
- Thicker underlines, strikethroughs, section breaks, and improved simple tables
- Minimal and Dashboard themes and sleep screens
- Bionic Reading, Guide Dots, redaction-style rendering, and forced paragraph indents
- Bookmarks and in-book reader settings
- Reader-specific front and side button remapping
- Automatic page turning
- Reading time, sessions, pages turned, finished-book tracking, and reading-stat sleep screens
- Nearby reading-position and all-time reading-stat sync
- Recent Books grid view and finished-book filing
- Local file transfer and the built-in EPUB optimizer
The full list of reading options is in Reader Features, and button actions are listed in Controls.
CrossInk has two firmware variants because the ESP32-C3 does not have enough flash to bundle every point size at once.
The general-purpose build:
- 10, 12, 14, and 16 pt reader sizes
- Emoji and miscellaneous symbols
- Full on-device PDF support
For readers who only want larger text:
- 16, 18, and 20 pt reader sizes
- Emoji and miscellaneous symbols
- Full on-device PDF support
See Font Build Variants for more detail.
The fastest route is Inky, CrossInk's web installer:
- Download the
tinyfirmware for standard text or thexlargefirmware for large text. - Open the CrossInk web installer.
- Select Custom .bin.
- Choose the downloaded file and flash it.
Command-line installation and revert instructions are in the Installation guide.
CrossInk runs on a single-core ESP32-C3 with limited RAM. A little organization makes a noticeable difference:
- Keep folders below about 200 files; 50–100 files per folder is more comfortable.
- A large library is fine when books are split into folders by author, series, genre, or read status.
- Avoid putting every book in the SD-card root.
- Text-first EPUBs and PDFs work best.
- For PDFs, check that text can be selected before copying the file to the reader.
- Image-only scans need OCR before they can be reflowed.
- Use a reliable SD card and leave free space for settings, progress, statistics, and prepared book data.
More cache and storage details are available in Data Cache.
- User Guide
- PDF Support
- Installation
- SD Card Fonts
- Reader Features
- Dictionary
- Controls
- Reading Stats Sync
- Nearby Position Sync
- Data Cache
- Web server usage
- Common issues
- Project scope
- Development docs
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 Xteink X4 or X3 via USB-C and run:
pio run -e tinyBuild the large-font variant with:
pio run -e xlargeSee Testing and Debugging for serial logging, simulator checks, static analysis, and bug-report guidance.
This project is based on CrossInk, which is itself a personal fork of CrossPoint Reader.
The current firmware base includes the official CrossInk 1.5.0 release.
CrossPDF keeps CrossInk's focused e-ink reading experience while adding on-device PDF reflow.
The ESP32-C3 has about 380 KB of usable RAM, so CrossInk stores reusable book and device data on the SD card instead of rebuilding everything in memory.
See Data Cache for the .crosspoint layout and File Formats for binary cache details.
