FrameOS
Devices

XTEINK X4

The XTEINK X4 4.26" e-ink reader running FrameOS as a thin client - the backend renders, the ESP32-C3 draws.

Official XTEINK store

Official store page for this device.

Buy from XTEINK

Manufacturer docs & datasheets

Vendor
XTEINK
Model
X4
Technology
E-ink
Colors
4-level grayscale
Resolution
800×480 px
Size
4.26″ diagonal
Interface
ESP32-C3 board
Platforms
ESP32-C3
Status
🟡 Should work
Buttons
1 (usable in scenes)
FrameOS driver
waveshare.EPD_4in26

Part of the FrameOS device database. Spotted an error, or tested this panel? Edit this page on GitHub - it's a markdown file.

The XTEINK X4 is a small 4.26" four-grayscale e-ink reader on an ESP32-C3 with 16 MB of flash. Reflashed with FrameOS it becomes a pocket-sized frame - and 800×480 on a 4.26" panel is a lot of pixels per inch, so small text stays legible.

The C3 has no PSRAM, so FrameOS runs this board as a thin client: your backend renders the scene and the device streams the packed panel bytes. The backend has to be reachable when the frame renders.

The X4's card slot shares its SPI bus with the e-paper controller, so SD-card assets are turned off on this board.

The C3's ~380 KB of internal RAM is tight: the firmware reserves the 96 KB panel buffer at boot, before WiFi fragments the heap, and GET /status reports the free heap and largest block if you want to keep an eye on it. The backend dithers the four-grey bitmap, so gradients and photos come out smooth rather than banded.

The X4 provisions from the 4 MB no-OTA generic image, so firmware updates go over USB; a 16 MB C3 release asset that would enable OTA is on the list.

Setup

  1. In the FrameOS backend, create a frame with Flash embedded device.
  2. Choose ESP32-C3, select the XTEINK X4 preset, and enter your WiFi details.
  3. Build the firmware and flash it over USB from the browser.
  4. Install scenes as usual.

Battery

The X4's cell is read through a 2:1 divider on GPIO 0; the preset carries the wiring (from the TRMNL firmware's board table, not yet verified on this reader), so its charge shows in the backend's metrics.

Status

🟡 Boots and renders on real hardware, but not yet widely reported. Tell us on GitHub or Discord if you try it.

On this page