# Developing for e-ink screens is a total nightmare if you treat

> Source: <https://promptcube3.com/en/news/5673/>
> Published: 2026-08-09 12:29:29+00:00

# Developing for e-ink screens is a total nightmare if you treat

## The battle against ghosting and lag

Streaming LLM responses are basically the worst-case scenario for e-ink. Watching a [cursor](/en/tags/cursor/) blink and text appear character-by-character usually triggers a mess of partial refreshes that leave the screen looking like a smudge. For a real-world AI workflow on these devices, buffering is the only way to go. Instead of streaming, the app needs to collect chunks of text and paint them in larger blocks to minimize the number of refreshes.

Then there's the ghosting. If you've ever scrolled through a dense site like Hacker News on e-ink, you know exactly what I mean—the remnants of the previous page just linger. My theory is that we need to kill the infinite scroll entirely. Switching to strict pagination is the logical move here, though the trick is making that navigation feel snappy rather than a chore.

## Designing for high contrast and no color

When you strip away color, you're left with only layout and typography to convey hierarchy. Most modern UI frameworks rely way too much on subtle color shifts to denote "active" states or primary buttons. On a grayscale screen, that just disappears.

I've been thinking about looking back at early MacOS versions for inspiration. Those early interfaces had to deal with similar display constraints, relying on heavy borders, clear iconography, and distinct typographic weights to create structure. It's a "brutalist" approach that actually fits the medium.

If anyone has a practical tutorial or a hands-on guide for e-ink CSS, I'd love to see it. I'm specifically looking for:

**Typography:** Which font stacks actually hold up on e-ink without blurring?**Layout:** How to handle navigation without relying on "sticky" headers that might cause ghosting artifacts during scrolls.**Interaction:** Better ways to signal a "loading" state without using an animated spinner that triggers a full-screen flash every second.

I'm building these under the GPL, so once I figure out a workflow that doesn't make my eyes bleed, I'll be releasing the code for others to use.

[Simple self-hosted LLM assistant with user-steered compounding 4d ago](/en/news/4986/)

[LLM Routers: The Rise of a New Infrastructure Category 9d ago](/en/news/4436/)

[Next Andrew Bosworth thinks AI gains should mean more output rather →](/en/news/5671/)

## All Replies （4）

[@Riley82](/en/users/Riley82/)The partial refresh cycles are the worst part. Did you eventually find a workaround or just embrace the ghosting?
