adriaanm/plato

Document reader

0

stars

1,339

commits

Rust

primary language

Aug 27, 2026

updated

README

Logo

This fork: Plato on the Kindle Paperwhite 3

This is a fork of baskerville/plato focused on running Plato on the Kindle Paperwhite 3 (muscat, i.MX6SL "Wario", firmware 5.16.2.1.1, kernel 3.0.35-lab126, 1072×1448 @ 300 dpi, armv7 soft-float ABI, glibc 2.20). What it adds, each piece recorded in PATCHES.md:

  • A Kindle backend: the lab126 mxcfb ioctl dialect (72-byte mxcfb_update_data, REAGL waveforms), cyttsp4_mt multi-touch (TouchProto::MultiSlot), max77696 battery and frontlight, selected via PLATO_DEVICE=kindle-pw3.
  • A self-contained cross-build (xbuild.py) using zig cc + cargo-zigbuild — no vendor toolchain, sha256-pinned third-party sources, an ABI gate that rejects hard-float output.
  • PDF reading tuned for academic papers: automatic content-box cropping, continuous scroll with an overlap anchor on page turns, and automatic two-column detection with column-wise navigation.
  • Robustness fixes that are not Kindle-specific: a missing external helper can no longer crash the app, and a refused suspend no longer loops.
  • Getting documents onto the device, host half included: crates/foldersync (pull a folder from a Mac on the LAN), crates/platonic (push one document and open it), crates/pairing (pairing from a code shown on the panel — SPAKE2, same-WiFi only, no account and no cloud) and crates/platonic-recv, which is what a paired Mac gets instead of a shell.

Installing the Mac-side tool

cargo install --path crates/platonic

Note the --path: cargo install platonic looks on crates.io, where this is not published, and pointing it at the workspace root fails with "there is nothing to install … only packages with binaries can be installed", because the root package has no binary.

Then platonic FILE pushes a document to the reader and opens it, platonic https://… sends a link the reader opens in its built-in article view (fetched and readability-extracted on the device — nothing is pushed), and platonic --pair --code … pairs a new Mac using the code the reader shows.

The sibling repo

This repository is the reader itself. adriaanm/platokin holds the tooling that makes it work on a Paperwhite 3 — installing and launching it, the host-side scripts, and the design docs explaining why things are the way they are here.

The split keeps this repo a Plato fork that can be read, built and upstreamed on its own. Where a feature has two halves, both halves are here and the design doc is next door.

We're happy to upstream any of this if there's interest — the build hygiene, the PDF features and the robustness fixes were written to be upstreamable; the Kindle backend is cleanly additive. Open an issue or PR conversation on this fork.

Plato is a document reader for Kobo's e-readers.

Documentation: GUIDE, MANUAL and BUILD.

Supported firmwares

Any 4.X.Y firmware, with X ≥ 6, will do.

Supported devices

  • Libra Colour.
  • Clara Colour.
  • Clara BW.
  • Elipsa 2E.
  • Clara 2E.
  • Libra 2.
  • Sage.
  • Elipsa.
  • Nia.
  • Libra H₂O.
  • Forma.
  • Clara HD.
  • Aura H₂O Edition 2.
  • Aura Edition 2.
  • Aura ONE.
  • Glo HD.
  • Aura H₂O.
  • Aura.
  • Glo.
  • Touch C.
  • Touch B.

Supported formats

  • PDF, CBZ, FB2, MOBI, XPS and TXT via MuPDF.
  • ePUB through a built-in renderer.
  • DJVU via DjVuLibre.

Features

  • Crop the margins.
  • Continuous fit-to-width zoom mode with line preserving cuts.
  • Rotate the screen (portrait ↔ landscape).
  • Adjust the contrast.
  • Define words using dictd dictionaries.
  • Annotations, highlights and bookmarks.
  • Retrieve articles from online sources through hooks (an example wallabag article fetcher is provided).

Tn01 Tn02 Tn03 Tn04

Donations

Donate

Contributors

baskerville

1,189 commits

adriaanm

105 commits

welps

13 commits

NiLuJe

8 commits

adriaanm/plato

Document reader

0

stars

1,339

commits

Rust

primary language

Aug 27, 2026

updated

README

Logo

This fork: Plato on the Kindle Paperwhite 3

This is a fork of baskerville/plato focused on running Plato on the Kindle Paperwhite 3 (muscat, i.MX6SL "Wario", firmware 5.16.2.1.1, kernel 3.0.35-lab126, 1072×1448 @ 300 dpi, armv7 soft-float ABI, glibc 2.20). What it adds, each piece recorded in PATCHES.md:

  • A Kindle backend: the lab126 mxcfb ioctl dialect (72-byte mxcfb_update_data, REAGL waveforms), cyttsp4_mt multi-touch (TouchProto::MultiSlot), max77696 battery and frontlight, selected via PLATO_DEVICE=kindle-pw3.
  • A self-contained cross-build (xbuild.py) using zig cc + cargo-zigbuild — no vendor toolchain, sha256-pinned third-party sources, an ABI gate that rejects hard-float output.
  • PDF reading tuned for academic papers: automatic content-box cropping, continuous scroll with an overlap anchor on page turns, and automatic two-column detection with column-wise navigation.
  • Robustness fixes that are not Kindle-specific: a missing external helper can no longer crash the app, and a refused suspend no longer loops.
  • Getting documents onto the device, host half included: crates/foldersync (pull a folder from a Mac on the LAN), crates/platonic (push one document and open it), crates/pairing (pairing from a code shown on the panel — SPAKE2, same-WiFi only, no account and no cloud) and crates/platonic-recv, which is what a paired Mac gets instead of a shell.

Installing the Mac-side tool

cargo install --path crates/platonic

Note the --path: cargo install platonic looks on crates.io, where this is not published, and pointing it at the workspace root fails with "there is nothing to install … only packages with binaries can be installed", because the root package has no binary.

Then platonic FILE pushes a document to the reader and opens it, platonic https://… sends a link the reader opens in its built-in article view (fetched and readability-extracted on the device — nothing is pushed), and platonic --pair --code … pairs a new Mac using the code the reader shows.

The sibling repo

This repository is the reader itself. adriaanm/platokin holds the tooling that makes it work on a Paperwhite 3 — installing and launching it, the host-side scripts, and the design docs explaining why things are the way they are here.

The split keeps this repo a Plato fork that can be read, built and upstreamed on its own. Where a feature has two halves, both halves are here and the design doc is next door.

We're happy to upstream any of this if there's interest — the build hygiene, the PDF features and the robustness fixes were written to be upstreamable; the Kindle backend is cleanly additive. Open an issue or PR conversation on this fork.

Plato is a document reader for Kobo's e-readers.

Documentation: GUIDE, MANUAL and BUILD.

Supported firmwares

Any 4.X.Y firmware, with X ≥ 6, will do.

Supported devices

  • Libra Colour.
  • Clara Colour.
  • Clara BW.
  • Elipsa 2E.
  • Clara 2E.
  • Libra 2.
  • Sage.
  • Elipsa.
  • Nia.
  • Libra H₂O.
  • Forma.
  • Clara HD.
  • Aura H₂O Edition 2.
  • Aura Edition 2.
  • Aura ONE.
  • Glo HD.
  • Aura H₂O.
  • Aura.
  • Glo.
  • Touch C.
  • Touch B.

Supported formats

  • PDF, CBZ, FB2, MOBI, XPS and TXT via MuPDF.
  • ePUB through a built-in renderer.
  • DJVU via DjVuLibre.

Features

  • Crop the margins.
  • Continuous fit-to-width zoom mode with line preserving cuts.
  • Rotate the screen (portrait ↔ landscape).
  • Adjust the contrast.
  • Define words using dictd dictionaries.
  • Annotations, highlights and bookmarks.
  • Retrieve articles from online sources through hooks (an example wallabag article fetcher is provided).

Tn01 Tn02 Tn03 Tn04

Donations

Donate

See what people are saying

Contributors

baskerville

1,189 commits

adriaanm

105 commits

welps

13 commits

NiLuJe

8 commits

Languages

Rust

96.6%

Python

2.1%