Jailbreaking a Kobo Aura 2 e-reader
A few years ago (back in 2016), I got an e-reader as a gift. I was a casual reader, a big nerd, and this device could store hundreds of books in under 200g so it seemed like a good deal at the time. I recently found it again and, since I wasn't using it anymore, decided to do something with it.
A few searches later, I found out I was far from the first. There are whole communities on modding forums dedicated to this kind of thing. People take it seriously!
So the plan: jailbreak the Kobo and turn it into a small weather station. Directly inspired by the work of KevinShort and Matthew Petroff:


Both have a bit too much going on for my taste. When I check the weather I want today's info, and maybe the temperatures for the next few days. So: something simpler, with room for a personal touch at the bottom (you'll see!).
1. Installing YAWK
When I started this project I had no idea what I was doing. I didn't know how a Kobo worked under the hood, what was inside, whether it ran a proprietary OS or some stripped-down Linux.
First thing to do: install it and check if it works on my model. Fortunately for me, the docs are pretty clear. Here's the process.
1. Factory reset the e-reader
Optional, but good for starting clean and making sure there's enough storage. If you have e-books you want to keep, back them up first.
2. Install NiLuJe's Stuff on the device
I'm using a package he made called "Kobo-stuff" to mod the device without too much hassle.
Up-to-date download links are in this thread:
Aura H2O Yet another telnet/sshd & misc tools package... - MobileRead Forums
Aura H2O Yet another telnet/sshd & misc tools package... Kobo Developer
KoboRoot.tgz is at the root of the device at startup, it triggers an update process automatically.If it goes smoothly, the device reboots normally and nothing looks different. But something changed.
3. Installing YAWK
For this step you'll need an FTP client like Filezilla and a Telnet client.
I connect the e-reader to the same Wi-Fi as my PC, then grab the IP address under Settings > Device information > IP address.
.apps/yawk directory and copy the whole YAWK repo into it.dos2unix before copying.Then I open a Telnet session and run:
tmux new -s kobo update-kobostuff Python(install Python 3)cd /mnt/onboard/.apps/yawk(go to the YAWK directory)sh install.sh(run the install script)
OpenWeather APIs for Weather, Energy, and Environment
OpenWeather provides global APIs for weather, environmental, and energy data, including current conditions, forecasts, historical weather, air pollution, solar radiation, road risk, and solar energy insights. Built for developers and businesses, our platform offers reliable data access, broad product coverage, and flexible self-service tools to support apps, analytics, operations, and decision-making.

At the end of the script, the device reboots and…

It works!
2. Customizing the interface
weather.py and yawk.py a bit and get to something I like pretty quickly:
There's a big empty space at the bottom of the screen. Enough room for a widget showing pretty much anything. Some ideas:
- Smart home status: which lights are on or off, battery levels for headphones/phone/laptop, electricity consumption
- Missed notifications
- Random photos from my favorites (even in black and white)
- To-do list
- Upcoming calendar events
- …
My girlfriend suggested adding a small message box she could update. Good idea, and not much work, so I went ahead.
The plan: a small API the e-reader polls, and a simple page to write the message.

I went with my usual stack: Next.js and Vercel. It covers both the frontend and the API, deploys in one click, and it's free. Vercel's KV Storage means no database to manage.
I also set up a simple webhook to a Discord channel to keep a message history.
Result:

Then I built the interface on the e-reader. I prototyped the layout in Photoshop, exported the static parts as a PNG, and measured where the text should go. I wrote a small function for automatic line breaks so nothing overflows.
Transferred everything, got caught by line endings again (of course), and after a bit of wrangling, the final result:

Pretty happy with how it turned out :)