An Xteink X3 e-ink reader has been modified to work as a network printer through a fork of the CrossPoint firmware. The implementation runs an Internet Printing Protocol (IPP) server on the reader, advertises it to macOS through Bonjour, receives a rasterised page over Wi-Fi and displays the result on the e-ink screen.

The project, described by Nishant Joshi in a first-person technical post dated September 7, 2026, is a firmware modification rather than a feature supplied by the Xteink X3’s manufacturer. In the demonstrated workflow, the device appeared in macOS Preview as a printer named penguin; a manga image was then sent to it and displayed on the reader. The project can also save completed pages as BMP files on the device’s SD card for later browsing.

Contents

What changed

The core change is that the X3 no longer has to receive content only through a browser-based upload workflow. With the modified CrossPoint firmware, it can present itself to a computer as a printer on a local network.

The implementation includes several components:

  • an IPP server running on the reader;
  • Bonjour service discovery for macOS;
  • support for Apple raster and PWG raster document formats;
  • row-by-row image processing, including scaling and dithering;
  • reuse of the display’s existing image memory;
  • BMP storage on the SD card.

IPP is an application-layer printing protocol commonly carried over HTTP. It defines operations for discovering printer capabilities, submitting print jobs and querying their status. In this project, the reader implements enough of that workflow for a Mac to identify it and send a page.

The advertised printer attributes describe monochrome output at 300 dpi, one copy and one-sided printing. The listed media options include A5 and Letter paper, with stationery as the media type and an output bin named face-up. The 300 dpi value is part of the printer description sent to the computer; the project account does not establish the X3 display’s native resolution.

How the printing workflow works

The reader announces an _ipp._tcp service through Bonjour, Apple’s zero-configuration discovery system. Bonjour uses multicast DNS and service records so compatible devices can find one another on a local network without manually entering an IP address.

The service is named penguin. The implementation also uses Bonjour’s _universal subtype for driverless discovery on macOS. Joshi says the project calls the ESP-IDF mDNS API directly because the available Arduino wrapper did not expose the required functionality.

Once macOS discovers the reader, the computer renders the document into pixels before transmission. The X3 accepts Apple raster and PWG raster data rather than an editable document layout. Raster printing represents a page as pixels, allowing the computer to perform much of the document rendering before sending the result to the embedded device.

The reader can either join an existing Wi-Fi network or create its own hotspot, named literate-penguin. In the former mode, a Mac can select the device when connected to the same network. In the latter, the user can connect to the reader’s hotspot and use the printer service there.

After receiving the raster data, the firmware processes the page in rows. It scales the incoming image, converts it to black and white using dithering, and writes the result into the display’s existing screen-image memory. Dithering creates the impression of intermediate shades by arranging black and white pixels into patterns, which is useful when the output device has limited tones.

The finished page remains visible on the e-ink display. The implementation can also use the reader’s existing screenshot-writing path to save the page as a BMP file on the SD card. Saved printouts can then be browsed on the device.

The memory problem

The most significant engineering constraint was memory. A Letter page at 300 dpi is 2,550 by 3,300 pixels. If each pixel is represented by one byte of grayscale data without compression, that page requires about 8.4 MB—far more than the X3’s available RAM.

The project description gives the X3’s RAM as 400 KB, with 16 KB reserved for cache. During development, Joshi reports having approximately 6.8 KB of heap remaining after Wi-Fi and the printer page image had been allocated.

A straightforward implementation could require separate buffers for the decoded incoming page and the processed output page. Instead, the firmware handles incoming data row by row. It does not retain a complete second page image in working memory. The output is written to the display buffer already used by the reader.

This reduced the reported image-buffer use from approximately 113 KB to approximately 62 KB. The reduction does not make the device comparable with a general-purpose printer, but it shows why incremental processing matters in embedded systems: the device needs enough memory for only the current working data rather than multiple full-page representations.

What the demonstration shows—and does not show

The demonstrated result is a working macOS printing path. Joshi selected penguin in macOS Preview and sent a manga image to the Xteink device. The author says the page looked very good and appeared from memory in about one second, but that assessment is subjective and the timing is an approximate recollection rather than a reported benchmark.

The project therefore establishes a proof of concept for using an e-ink reader as a network display endpoint through a standard printing workflow. It does not establish that the X3 is a general-purpose printer or that it can replace a conventional paper printer.

Several practical questions remain unresolved. The project account does not specify whether the implementation supports multi-page documents, multiple simultaneous jobs or job cancellation. It also does not establish compatibility with Windows, Linux or iOS, nor does it report sustained throughput, battery consumption, error handling, thermal behaviour or reliability over repeated jobs.

The available evidence is a single first-person project account, not an independent technical evaluation. The demonstrated workflow covers one Mac, macOS Preview and a manga image. The firmware modification may also require users to install altered software, while installation risks and recovery procedures are not documented in the available material.

The CrossPoint fork reportedly contains the printer implementation. Further development would need to show how broadly it supports document formats, page sizes and operating systems, and how safely it handles unusually large or malformed jobs within the X3’s limited memory.

Sources