Currently I'm evaluating Battery Pal[2], because the TP4057 Module was not stable enough to power USB-C to 3.5mm Adapters reliably. So far it seems to work as expected.
I wrote about my experience in cross compiling zig on an old kindle some time ago.
It's just running `cargo build --release --target armv7-unknown-linux-musleabihf` with a .cargo/config.toml:
``` [target.armv7-unknown-linux-musleabihf] linker = "rust-lld" rustflags = ["-C", "link-self-contained=yes"]. ```
the downside is I can't use any c-deps. :)
Have opted for other devices like the xteink (or a boox in the future) due to what seemed like a relatively small ecosystem around “aftermarket” kindle modifications.
The kindle would be a great option if it could be reliably jailbroken and loaded with custom software
source: https://kindlemodding.org/jailbreaking/post-jailbreak/disabl...
I'm partial to iced, which to me is the best GUI library in Rust by far. The Discord is super active if you have questions.
Upon further inspection there is also the Pine Note!
https://news.ycombinator.com/item?id=46283016
https://pine64.org/devices/pinenote/
It’s quite pricey but certainly more straightforward in its offering.
Kobo is the cheaper and has a color option and is likely slightly less hackable.
[EDIT] Ah, I think this is what I found:
https://github.com/Quill-OS/quill
Kobo’s switch to secure boot made things harder for Quill which seemed to be the only custom OS.
I use the "renameotabin" extension and enable Wi-Fi from time to time to load books from FTP via Koreader. It has been 3 years since I jailbroke it, and there have been no resets for me.
See https://kindlemodding.org/jailbreaking/post-jailbreak/disabl...
Open source software, open (to the owners) with default configs, open ecosystems, repairability, hackability, open hardware are all factors I look for across multiple devices now. routers & wifi, readers, phones, headphones, laptops, keyboards, etc..
They don't always have to hit every element - but the more they cover, the more likely I am to track and purchase them when the time comes.
It's largely the exact device that I want my book reader to be:
* Small and lightweight
* Nice epaper screen
* No need for an internet connection whatsoever
* Natively understands EPUB
* Just reads books -- no ads, no markets, no apps, no upsell
The built-in Kobo firmware isn't great. IIRC Rakuten/Walmart hoover up and sell your reading habits, etc. Hence one reason why I don't connect mine to the internet (running Plato probably fixes this, but restarting the device doesn't immediately go into Plato). The device is also weirdly sluggish with the default Kobo software, and much faster in Plato.
Here is the list detailing exactly the software versions supported and device support. This website will have everything you need.
(https://kindlemodding.org/kindle-models.html)
There is also the discord which is very popular.
Who's supposed to be selling GUIs here?
Your comment goes against several HN guidelines. As the 15th highest karma on this site, I'm sure you could do better.
What I see there is a crypto fund that most likely cares about how iced fits into their own use cases first.
I seldom read those, by the way.
../rust-on-kindle
Published on: 26. May 2026
I recently jailbroke my 7th generation Kindle Paperwhite. While my motivation probably should have been "breaking free from Amazon's clammy and tightening grip", the truth is I wanted a way to use it as a clock on my nightstand. I found this project and figured I could just make some adjustments to the code. And that worked fine. But as I now had opened the door, I started thinking about if I could get Rust to work on the Kindle as well. Maybe I could do more useful stuff with it? As I have recently started to tinker with Home Assistant and smart devices again, the idea of a dashboard for some of the features could be a fun project. And while there are probably many perfectly fine projects out there, I haven't made any of those.
Telling a programmer there's already a library to do X is like telling a songwriter there's already a song about love.
-Pete Cordell
After some research I found out that I needed to target ARMv7 and musl libc. I have dabbled with Rust on ARM machines before, and know from painful experience that getting the Rust compilation toolchain to work on such low-powered devices is a non-starter. Luckily there are great tools for cross compilation. My go-to for cross compiling Rust is, rather ironically, cargo-zigbuild. The Zig compiler ships with musl libc sources and headers built in, for all supported architectures. It also has its own linker, so zig cc can act as a complete cross-compile toolchain for any musl target, on any host. Compiling for the Kindle becomes as easy as:
* Installing Zig
* Installing cargo-zigbuild
* cargo zigbuild --release --target armv7-unknown-linux-musleabihf
With my hello-world-app ready and built, I needed a way to get it on the kindle and run it. While I probably could have used KUAL which I installed during the jailbreaking process, I wanted to also be able to see stdout to verify my application actually works. After some digging I found the USBNetwork tool that allows for setting up SSH access to your device either via USB or Wifi. For convenience I added an entry in my sshconfig and copied over my public key. Note: ssh-copy-id did not work for me, I had to add my .pub file to /mnt/us/usbnet/etc/authorized_keys on the Kindle.
With shell access in order I was able to confirm that my cross compilation toolchain did indeed work, "Hello, World!" showed up as expected. But a program that prints to stdout readable over SSH is not much help on a Kindle.
As Rust has matured, quite a few GUI libraries have sprung up. Personally, I only have experience with Slint, so that is what I reached for. Could I get it to work on the Kindle? From my experience with getting Slint to run on a Raspberry Pi I knew the ARMv7 platform was supported out of the box. The missing links would be output to the e-ink screen and input from the touch panel.
Slint supports various renderers and backends, including a handy and lightweight software renderer that works on basically anything. By supplying a LineBufferProvider that implements process_line() we are able to take one by one line of rasterized visual output, convert it to grayscale and write it to the framebuffer, that on my Kindle is just a file at /dev/fb0 that we have memory mapped. I love the linux philosophy of "everything is a file" sometimes. Now the only thing left to do is to notify the driver to refresh the display, which is how e-ink works. This is done via the libc crate with ioctl() (input/output control). We pass in the dirty region to be refreshed, handily provided by Slint internals.
With pixels on the screen, the other half of the puzzle is getting the touch panel to talk to Slint. And again the "everything is a file" mantra comes to the rescue: the touch controller shows up as /dev/input/event1, and we can just read() from it. Each read gives us back a struct that the kernel has written directly into our buffer: a timestamp, an event type, a code, and a value. No parsing, no protocol, just a memory layout we have to match.
The Kindle uses the Linux kernel's multi-touch protocol type B, which means events arrive as a stream of "the X coordinate is now this", "the Y coordinate is now that", "the tracking ID is now this" and then a SYNC_REPORT event that says "okay, that batch is done, you can act on it now". So we accumulate the latest X, Y and tracking ID as events come in, and on each SYNC_REPORT we figure out what to dispatch to Slint. A tracking ID of -1 means the finger lifted, which becomes a PointerReleased. Otherwise, the first sync after a touch-down becomes a PointerPressed, and any subsequent ones become PointerMoved. Slint handles the rest.
After a lot of debugging of no visible output, screen not refreshing, double refresh flashes, touch input not registering, touch input registering twice and lots of more bugs I had a counter and a increment button.

With an seemingly working (at least for my specific device, it will probably need adjustments for other Kindle versions) kindle-backend for Slint, I extracted the relevant code into a separate crate and published it on crates.io.
With that in order, I just need to draw the rest of the owl (dashboard). That will be another time.