Honest answers
FAQ & Known Limitations
CrossPet is a hobbyist firmware running on constrained hardware. This page documents what it can't do as clearly as what it can.
Getting Started
Essential guides for using your Xteink X4 with CrossPet/CrossPoint firmware.
Add books to the device
SD Card (easiest): Remove the SD card → insert into computer → drag and drop EPUB/TXT files → re-insert.
WiFi Upload: File Transfer → select WiFi → open the IP address shown on screen in your browser → drag and drop books.
Calibre: Install the CrossPoint plugin → File Transfer → Connect to Calibre.
Supported formats
EPUB 2 & 3 (with images) and TXT. No PDF — convert to EPUB using Calibre first.
Change fonts & text size
While reading: Confirm → Font Settings. 3 font families (Bookerly, Noto Sans, Bokerlam), 4 sizes. Adjust line spacing, paragraph spacing, and margins. Changes apply immediately.
Browse OPDS catalogs
File Transfer → OPDS Browser. Set server URL (Calibre: append /opds). Browse and download EPUB books directly over WiFi.
Sync reading progress
Settings → System → KOReader Sync. Set username, password, and server URL (https://sync.koreader.rocks or self-hosted). While reading: Confirm → Sync Progress → Apply Remote or Upload Local.
Remap buttons
Settings → Buttons. Remap 4 front buttons and swap side button layout. Applies to all screens.
Weather widget
Tools → Weather. Auto-connects WiFi, fetches from Open-Meteo (free, no API key). Temperature shown in header, clock screen, and weather app.
For the full user guide, see the CrossPoint USER_GUIDE.md on GitHub.
Known Limitations
These are not bugs — they are deliberate constraints or hardware facts.
| Limitation | Details | Status |
|---|---|---|
| No PDF support | PDF is a fixed-layout format. Reflowing text for e-ink at variable font sizes is not feasible on 380KB RAM without a dedicated library that would consume most of the heap. | By design |
| No CJK script (Chinese, Japanese, Korean) | Built-in fonts cover Latin, Greek, Cyrillic, and Vietnamese. CJK scripts require tens of thousands of glyphs that don't fit in 16MB flash alongside the existing font set. | Hardware limit |
| Clock drift in deep sleep | The ESP32-C3 has no hardware RTC. CrossPet reconstructs elapsed time from the internal RTC counter delta on wake, which drifts ~1–2 minutes per day without a network sync. | Hardware limit |
| BLE only — no Classic Bluetooth | The ESP32-C3 silicon supports BLE 5.0 exclusively. Classic Bluetooth keyboards and headsets will not pair. | Hardware limit |
| No DRM / encrypted EPUBs | CrossPet cannot decrypt Adobe DRM or Kindle-format books. Use DRM-free EPUB files from your library, Gutenberg, Standard Ebooks, or purchased DRM-free titles. | By design |
| Single framebuffer | The ESP32-C3 has no PSRAM. CrossPet uses a single 48KB framebuffer — no double-buffering. Grayscale rendering briefly allocates a second buffer, then frees it immediately. | Hardware limit |
| EPUB 2 / 3 only (no MOBI/AZW) | The layout engine is built around EPUB's OPF/XHTML spine. Proprietary Kindle formats are not supported. | By design |
| Renaming a book resets progress | Book caches are keyed by file path hash. Moving or renaming a file creates a new cache entry and loses the saved reading position. | Known issue |
Frequently Asked Questions
General
Is CrossPet Reader safe to install?
CrossPet does not modify the ESP32-C3 bootloader or flash partition table layout used by the official firmware. You can revert to official firmware at any time. That said, flashing any custom firmware carries inherent risk — a power failure mid-flash can corrupt the device. Always use a reliable USB cable and cable connection, and keep the device plugged in throughout the process.
Will flashing void my warranty?
Almost certainly yes — modifying device firmware typically voids the manufacturer warranty. CrossPet is community-maintained software with no affiliation to Xteink. Proceed at your own risk and with that understanding.
How do I update CrossPet to a newer version?
If your device has WiFi configured, CrossPet can update itself over-the-air: go to Settings → System → Check for Updates. Alternatively, re-flash using the browser installer on this page or the PlatformIO CLI. OTA updates preserve your settings and SD card contents.
Can I go back to the official firmware?
Yes. Download the official firmware from xteink.dve.al and flash it using their tool or esptool.py. Your SD card books are unaffected. If the device fails to boot, hold the Up side button while connecting USB to enter bootloader mode.
Is CrossPet open source? Can I contribute?
Yes — CrossPet is released under the GPL license. The full source is on GitHub. Contributions are welcome: bug reports, pull requests, translations, and feature ideas. Please read the contributing guide in the repository before submitting a PR.
Reading
What book formats does CrossPet support?
CrossPet supports EPUB 2 and EPUB 3 with inline images. Plain text (.txt) files are also supported. PDF, MOBI, AZW, and CBZ are not supported. For the best experience, use DRM-free EPUB files from sources like Project Gutenberg, Standard Ebooks, or your local library's OverDrive/Libby collection (after removing DRM on books you own).
How do I get books onto the device?
Three methods: (1) WiFi upload — connect to the same network, open the device's IP in your browser, drag-and-drop EPUB files. (2) Calibre — CrossPet exposes a Calibre Content Server-compatible endpoint; add the device in Calibre's "Send to device" menu. (3) SD card — eject the SD card, copy EPUB files to the /books/ directory on a computer, reinsert.
Does CrossPet sync reading position across devices?
Yes, via KOReader Sync. Set up a KOReader Sync server (self-hosted or community instance) in Settings → Sync. CrossPet will push your position after each reading session and pull it on open, so you can switch between the X4 and KOReader on Android/iOS seamlessly.
Why does the first page of a book take longer to load?
The first time you open a book, CrossPet parses the EPUB, runs the full layout engine for every section, and writes binary cache files to the SD card. This can take 10–60 seconds for large books. Subsequent opens are near-instant because they read pre-computed layout from the cache. If you change font size or family, the cache is invalidated and regenerated automatically.
What image formats are supported in books?
CrossPet supports JPEG (baseline) and PNG images embedded in EPUB files. Images are decoded, scaled to fit the viewport, and cached as pre-scaled bitmaps on the SD card. Progressive JPEG is not supported — the ESP32-C3's limited RAM cannot hold the full image in memory required for progressive decoding. If a book's images don't display, they are likely progressive JPEGs; re-export them as baseline JPEG or PNG using any image editor.
Technical
What WiFi networks does the X4 support?
The ESP32-C3 supports 2.4GHz 802.11 b/g/n only. 5GHz networks are not supported. WPA2-Personal and WPA3 are supported. Enterprise (WPA2-Enterprise / 802.1X) networks are not supported. Captive portal networks (hotels, airports) will not work.
The device doesn't appear as a serial port when connected via USB.
Make sure the device is awake (press the power button) before connecting USB — the serial interface is inactive in deep sleep. Also verify you're using a data-capable USB-C cable, not a charge-only cable. On Linux, you may need to add yourself to the dialout group: sudo usermod -a -G dialout $USER and log out/in.
Can I use a Bluetooth keyboard with CrossPet?
Only BLE HID keyboards are supported — the ESP32-C3 has no Classic Bluetooth. Most modern compact keyboards advertised as "BLE" or "Bluetooth 5" work. Older keyboards that use Bluetooth Classic (pre-BT4.0) will not connect. Use the BLE pairing screen under Tools → BLE Remote to scan for and pair a keyboard.
How much battery life can I expect?
Battery life depends heavily on WiFi usage and sleep screen type. With WiFi off and a static sleep screen, expect 3–6 weeks of standby. Active reading (frequent page turns) consumes more — e-ink only draws power during refresh, so reading speed matters less than page-turn frequency. WiFi transfers and OTA updates are the largest battery consumers; avoid leaving WiFi on continuously.
CrossPet Features
How does the Virtual Pet work?
The Virtual Pet is a pixel-art companion that lives on your sleep screen and in the Tools menu. It tracks your reading sessions through the Reading Stats system — the more you read, the more your pet grows and evolves. Your pet's mood and appearance reflect your recent reading activity; long reading gaps will make it listless. The pet is purely cosmetic and does not affect firmware performance.
What reading stats does CrossPet track?
CrossPet tracks: today's reading time, all-time total reading time, number of reading sessions, books finished, current reading streak (consecutive days), and longest streak ever. Stats are stored locally in .crosspoint/reading_stats.bin on your SD card — no data is sent anywhere. The Reading Stats sleep screen displays a dashboard of these figures when your device is idle.
How does the Weather widget work?
The weather widget fetches forecast data from Open-Meteo, a free open-source weather API that requires no API key. Your approximate coordinates are configured in Settings → Weather. Data is cached on the SD card and refreshed when WiFi is available. The current temperature appears in the header bar and on the clock sleep screen.
Can I disable the CrossPet features to save RAM?
Most CrossPet features (weather, pet, games) only load when you actively navigate to them — they don't run in the background or consume RAM while you're reading. The reading stats system does record session start/end, but its memory footprint is minimal. If you need the absolute leanest experience, the slim build environment strips serial logging and produces the smallest possible binary.
Does CrossPet drain battery faster than the official firmware?
Not noticeably. CrossPet uses the same deep sleep mechanism as the official firmware — the ESP32-C3 draws near-zero current when idle. Additional features like weather, games, and the virtual chicken only consume power when you actively use them. The reading stats system writes to SD only on session start/end (two brief writes per reading session), which has negligible battery impact. If you use WiFi-dependent features (weather, OTA updates) frequently, that will drain battery faster — but that's WiFi usage, not CrossPet overhead. In practice, standby and reading battery life are virtually identical to official firmware.
Troubleshooting
I can't see the device on my network for WiFi upload
Check that: (1) your phone/computer is on the same 2.4GHz network as the device, (2) the device shows a WiFi icon in the header bar indicating it's connected, (3) you're using the IP address shown in Settings → Network → Device IP, not a hostname. Some routers block device-to-device traffic — try from a different device or temporarily disable AP isolation in your router settings.
Upload fails or is very slow
Large EPUB files (50MB+) can time out on slow WiFi connections. Try moving the device closer to your router. If Calibre uploads stall, switch to the browser drag-and-drop method. For very large files, copying directly to the SD card on a computer is the most reliable option.
The device bootlooped after flashing
Hold the Up side button while connecting USB to force the ESP32-C3 into bootloader mode, bypassing the application. Then re-flash from a clean build. If the issue persists, try the pio run -t erase command to wipe flash before flashing — this resets all settings but guarantees a clean state.
A book crashes or freezes the reader
Delete the book's cache directory: on the SD card, find .crosspoint/epub_<hash>/ and delete the entire folder, then open the book again. If the crash repeats, the EPUB may contain malformed HTML or CSS that the parser can't handle. Open an issue on GitHub with the book title (if DRM-free and publicly available) or a minimal repro.
Still have questions?
The community is active and friendly. Most questions get answered within a day.
Visit GitHub Discussions