Author: Brendan
Date: 2026-09-23T21:25:06.746654+00:00

A Short Book About E-ink

Brendan · built from Markdown · September 2026

1. It arrived

This book exists because a download worked. The page you came from is plain HTML; the file you are reading now left that page, crossed a network, landed on an e-ink device and opened. That is the whole experiment, and it passed.

What it arrived as is the old packaging: PalmDOC text under a Mobipocket header, one container answering to three names. Nothing about it is modern. Everything about it works here, which is not a thing that can be said of most formats this device is asked to open.

The device was not wrong, and the file was not broken. It simply had a shorter list of things it would open, and this was on it.

2. What the device will actually open

The list it gave was AZW, PRC, MOBI. The useful thing to know is that this is not three formats. It is one container, answering to three names.

Extension | What it really is | Where it comes from
.mobi | PalmDOC text + MOBI header | Mobipocket, then Amazon
.prc | The same file, older extension | Mobipocket era
.azw | The same file, with Amazon’s header for DRM | Kindle store

So the choice is not which format to write. It is which extension to write on the envelope. MOBI is by far the easiest to produce from Markdown, because every tool that builds this container — Calibre’s ebook-convert, Amazon’s own kindlegen — emits a .mobi, and everything else is a rename.

That is exactly what happened here: one build, three copies, listed on the download page so the device can pick whichever name it trusts. The tool that did the work is Calibre’s ebook-convert (manual).

What survived the conversion

The interesting question was not whether text survives — text always survives. It is whether the structure does.

Feature | In the Markdown | In this book
Headings and a linked table of contents | yes | yes
Pipe tables | yes | yes, with rules
Nested and ordered lists | yes | yes
Inline code, bold, italic | yes | yes
Fenced code blocks | yes | yes, monospaced
Block quotes | yes | yes, indented
Footnotes | yes | yes, as endnotes
Images | yes | yes, downscaled
Cover page | generated | yes
Hyperlinks | yes | yes, over Wi-Fi

Everything in the right-hand column is a claim about this specific file, not about the format in general. The build script checks these by decompressing the text records inside the finished file and reading the markup back out - the bytes the device itself will see, rather than what a converter says it wrote.

3. Lists, because they are where converters lie

An unordered list, with a nested one inside it:

- First point, plain.

- Second point, carrying a nested list:

- the nested item that reveals whether indentation was kept,

- and a second one, for symmetry.

- Third point, back at the outer level.

An ordered list that starts somewhere other than one:

3. Third, because the source said third.

4. Fourth.

5. Fifth, with a nested bullet: - like this.

4. Code

A fenced block, which must come out monospaced and keep its line breaks:

# Build the book and check the result

./make-mobi.py --check

# What the server sends for the download

curl -sI https://kindle.aijly.com/sample.mobi \

| grep -i 'content-type\|content-disposition'

5. A picture

The top strip is the sixteen levels of grey the panel can actually show. The middle strip is the same ramp built out of black and white dots — which is what a dither is, and what most designs quietly fall back to. The bottom strip is what this book does instead: pure ink, pure paper, nothing in between.

6. The one thing that is still fragile

Everything above is about a file sitting on a disk. Getting it there was the harder half, and it fails in one specific way worth writing down.

This network serves its certificates signed with an elliptic-curve key. The device’s browser speaks only the other kind, RSA, and the handshake never gets past hello. There is no setting to fix that on the device, and no certificate that fixes it at the edge. Plain HTTP is the way through, and that is why the download link works over http:// as well as https://.

The device’s browser, in other words, is not broken. It is a browser from a different decade being asked to trust a certificate from this one.[1]

7. The device, in numbers

A table is the obvious way to put numbers beside words, and here it is the one thing that does not survive. Written with its numbers right-aligned, so that units sit under units:

What | Number | Unit
Screen width | 600 | pixels
Screen height | 800 | pixels
Pixel density | 167 | per inch
Grey levels | 16 | shades
Internal storage | 4096 | megabytes
Memory | 256 | megabytes
Released | 2010 | —

The converter keeps the table and keeps its rules, and throws the cell alignment away: every number arrives left against its own border, so the digits stop lining up by place value and the column reads as noise.

The fix is old, and it works. Numbers set in a monospaced font line up on their own, one column per character:

screen width        600 pixels

screen height       800 pixels

pixel density       167 per inch

grey levels         16 shades

internal storage    4096 megabytes

memory              256 megabytes

released            2010

The loss is worth knowing before it is worth fixing. What this file cannot carry is not the table, it is the alignment, and the tables further up this book arrived with their rules intact.

Sixteen shades is the number that matters for this book. It is enough to read on, and not enough to render a smooth grey: the panel reaches the middle of the range by flickering black and white pixels at each other, which is a dither, and which is why this book never asks it to.

8. End

That is the book: a download that worked, three names for one container, and a certificate that could not be spoken to. Thank you for reading to the end — the page counter, at least, agreed that you did.

The page you came from is at kindle.aijly.com — which this browser can follow over Wi-Fi, slowly.

1. Four years after this device was built, elliptic curves were not something a browser had to think about. Sixteen years later they are mandatory. The gap is the whole story of the failure, and it is nobody’s bug. ↩

Table of Contents

1. It arrived

2. What the device will actually open

What survived the conversion

3. Lists, because they are where converters lie

4. Code

5. A picture

6. The one thing that is still fragile

7. The device, in numbers

8. End