riddle: a writing diary for the reMarkable Paper Pro that answers in ink
The diary of Tom Riddle for the reMarkable Paper Pro — write with your pen, the page drinks your ink and answers in a flowing hand
At a glance
- What is it?
- MaximeRivest/riddle turns a reMarkable Paper Pro into the diary from the Tom Riddle demo: you write with the pen, the page drinks the ink, and a vision LLM answers stroke by stroke. It is a Rust app with two display backends and two oracle backends, and it only claims support for one tablet model.
- Who is it for?
- Adopt riddle if you own a reMarkable Paper Pro, already run developer mode with xovi and AppLoad, and want the pen to be the only interface; the takeover build stops the whole reMarkable UI, so keep SSH access working and confirm your OS version sits in the tested 3.26 to 3.27 range before installing. Skip it if you have any other reMarkable model, if you want a windowed app that leaves xochitl in charge, or if you will not supply an OpenAI-compatible key or run pi.
- Can I use it commercially?
- Yes. MIT is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 67 days ago.
- What is it written in?
- Mainly Rust, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 17, 2026, and from our analysis. They are not legal advice.
DEEP OPEN-SOURCE ANALYSIS
What riddle solves for reMarkable Paper Pro owners
A reMarkable is a writing surface, and every assistant built for it tends to reintroduce what the device was bought to avoid: a keyboard, a chat window, a glowing panel. riddle takes the opposite route. The README describes the interaction in one line: you write on the page with your pen, and after a pause the diary drinks your ink, your words fade into the paper, and an answer writes itself back in a flowing hand, stroke by stroke, then fades away. There is no chat UI and no screen glow.
The audience is narrow and the README says so. You need a reMarkable Paper Pro in developer mode with a launcher installed, and the suggested path is remagic, a companion project that walks through enabling developer mode and sets up xovi plus AppLoad. If you already run that stack, riddle is an app you drop in. If you do not, riddle is not the first thing you install.
The interesting bet is that the pen stays the only interface. Remembered pages are summoned by writing a request in ink, not by tapping a list. That constraint shapes almost every design decision below.
How the ink pipeline and the oracle fit together
The README's architecture diagram is the clearest statement of the data flow. Pen input is read from raw evdev at the full 4096-level pressure range and the hardware event rate, producing strokes. After an idle period of 2.8 seconds, the app commits the page, renders it to a PNG, and hands it to the oracle, described as a resident LLM process that streams its reply sentence by sentence.
The reply does not arrive as text on a screen. It is rasterized, thinned with the Zhang-Suen algorithm down to single-pixel pen paths, traced into strokes, and replayed as an animation. The README names the font used for this, Dancing Script. So the answer you watch being written is a synthesized hand, not your own, and the same machinery is reused when the diary conjures an old page back: the date, your own handwriting rewriting itself stroke by stroke, and Tom's old reply, all in faded ink.
The repository is split in two. This repo holds the Rust app: pen input, the ink surface, handwriting synthesis, the oracle process manager, and both display backends. The takeover display host lives in a sibling project, Quill, a C/C++ clean-room adapter over the vendor libqsgepaper.so waveform engine, exposed as a small C ABI with quill_init, quill_buffer and quill_swap. riddle links against it through the takeover Cargo feature. That split is worth understanding before you file a bug: latency problems in takeover mode live in a different repository from the app logic.
Installing riddle and writing your first page
The README gives two install routes. The easiest is the remagic catalog, which performs a checksum-verified download into AppLoad and then opens a settings form in your browser, with a QR code for your phone.
remagic install riddle # checksum-verified download → AppLoad
remagic config riddle # settings form in your browser (+ QR for phone)After that, in AppLoad you tap Reload and then The Diary. The README also notes the app can be installed from the Store app directly on the tablet.
The manual route starts from the release zip. Unzip it into a folder, copy that folder to the tablet over SSH, and add an API key by copying the example environment file.
unzip riddle-*.zip -d riddle
scp -O -r riddle root@10.11.99.1:/home/root/xovi/exthome/appload/
cp oracle.env.example oracle.envYou then put your RIDDLE_OPENAI_KEY into oracle.env, or skip it and use pi instead. In AppLoad, tap Reload, then The Diary. Write, and rest your pen.
If you want to configure the oracle by hand rather than through remagic, the README lists the environment variables. The base URL defaults to the OpenAI endpoint, the model defaults to gpt-4o-mini and must be able to see images, and there is a token cap that the README calls a runaway guard.
export RIDDLE_OPENAI_KEY="sk-..."
export RIDDLE_OPENAI_BASE="https://api.openai.com/v1"
export RIDDLE_OPENAI_MODEL="gpt-4o-mini"
export RIDDLE_OPENAI_REASONING="low"
export RIDDLE_OPENAI_MAX_TOKENS="2000"The README gives an OpenRouter example that maps RIDDLE_OPENAI_KEY to $OPENROUTER_API_KEY, sets the base to https://openrouter.ai/api/v1, and uses an openai/gpt-4 prefixed model name. The truncated README cuts off inside that model string, so copy the exact model identifier from the provider rather than from this article. On the tablet these variables live in oracle.env next to the binary; remagic config riddle offers one-tap presets for OpenAI, OpenRouter and Gemini.
Takeover mode is the biggest constraint in the project
The README is unusually direct about this. The prebuilt bundle and the catalog build run in takeover mode: tapping The Diary stops the whole reMarkable UI and takes the screen. You leave with a five-finger tap, and xochitl restarts automatically. The app runs as root and drives the e-ink engine directly.
That is the trade. The README frames the payoff as the lowest latency there is, because the vendor e-ink engine is driven directly instead of through a window. The cost is that the reMarkable's own software is not running while you are in the diary, and the power button behaves differently: in takeover mode it turns the page to "The diary sleeps.", then the tablet suspends, and pressing it again wakes you exactly where you were.
The windowed flavour, built from source with the qtfb backend, behaves more conservatively. It runs inside xochitl, and xochitl keeps the touchscreen and the power button, so you close the diary from AppLoad instead. If you want the diary to be one app among several rather than a mode your tablet enters, that is the flavour to build, and the README treats it as the build-from-source path rather than the default download.
The second constraint is hardware. The README states the app has only been tested on a reMarkable Paper Pro, identified as ferrari, aarch64, on OS 3.26 to 3.27. It may not work on other models or OS versions. There is no compatibility matrix beyond that sentence, and no rollback procedure documented in the README other than restarting xochitl over SSH.
Memory, storage and what leaves the tablet
Every finished page is kept: your actual pen strokes, a transcription, and Tom's reply. The README describes three uses for that store. Recent pages ride along with each request so Tom follows the conversation across days. A written request such as "show me the page about the garden" causes the diary to rewrite that page in front of you, dated, in faded ink. And "what do you remember?" returns a handwritten index of remembered moments.
The storage story is simple enough to audit. Memories live only on the tablet, in plain files under /home/root/riddle-data/memories, and the last roughly 400 pages are kept. Deleting the folder makes the diary forget. RIDDLE_MEMORY=off in oracle.env turns the whole feature off, with no storage and nothing extra sent with requests. RIDDLE_TZ_OFFSET, in hours from UTC, exists so memory dates read correctly, which matters because the conjured pages are dated.
The part to think about is what the oracle actually receives. The README says replies come from a vision LLM that reads your handwriting from the committed page, sent as an inline PNG. With memory on, recent pages ride along. So handwriting images leave the tablet and go to whichever endpoint you configured, which may be a local server or a hosted API. Turning memory off reduces what is sent but does not remove the page image itself. The README does not document encryption at rest for the memories folder, so treat the tablet's filesystem as the boundary.
Where riddle is the wrong tool, and what to use instead
riddle assumes a specific stack and a specific tablet. If you own a reMarkable 2 or a Paper Pro Move, the README's tested configuration does not cover you, and the app drives an e-ink engine directly, so this is not a case where you can reasonably expect partial function. If you want an assistant that leaves the reMarkable UI intact, the qtfb build is the answer, but it is the build-from-source flavour and the README does not present it as equally supported.
There is also a category question. riddle is a novelty interface with a real technical core, and the novelty is the point: the ink fades, the answer writes itself, the pen is the only control. If what you actually want is to search your own handwritten notes, the reMarkable's own notebook search and the desktop and mobile apps do that without stopping xochitl, without root, and without sending page images anywhere. riddle is not a better note-search tool. It is a different thing that happens to store your pages.
The most direct alternative inside the same ecosystem is to build against Quill yourself. Quill is the MIT-licensed C ABI over the vendor waveform engine, and it ships its own demos, including scribble and a pen-to-glass latency test, plus map, image and GIF renderers. If your goal is low-latency e-ink drawing rather than a conversational diary, the demos are the smaller starting point and you skip the LLM dependency entirely. The difference in approach is that Quill gives you a display host and leaves the application to you, while riddle gives you an application that happens to need that host.
Maintenance, licence and upgrade cost
The repository is not archived, and the last push was on 2026-07-12. The release history is compressed: v0.1.0 on 2026-07-05, v0.2.0 on 2026-07-06, and v0.3.0 on 2026-07-07. Three releases in three days, followed by a small amount of later activity. That is the shape of a project that was built quickly and then held, and it is not evidence either way about what comes next.
Upgrade cost is mostly environmental. The app pins its dependencies in Cargo.lock and the manifest shows a deliberately small set: libc, signal-hook, png, ab_glyph, and ureq with default features off and TLS on, which the comment explains keeps the binary self-contained and cross-compiles cleanly without OpenSSL. The release profile strips symbols and enables LTO. None of that changes often.
What does change is the tablet side. The README pins tested support to OS 3.26 to 3.27, and takeover mode drives the vendor e-ink engine directly through libquill.so. A reMarkable OS update is therefore the real upgrade risk, not a Cargo bump. The build-takeover.sh script and the takeover feature flag exist for the source path, and the prebuilt bundle is the alternative when you do not want a toolchain. Both the repository and Quill are MIT licensed, which permits commercial use and modification, but the README's warning stands on its own: this modifies your device, it runs as root, it is not affiliated with reMarkable AS, and you use it entirely at your own risk. Nothing here is legal advice; if you redistribute a modified bundle, read the MIT terms and the vendor library situation with your own counsel.
Editorial conclusion
Adopt riddle if you own a reMarkable Paper Pro, already run developer mode with xovi and AppLoad, and want the pen to be the only interface; the takeover build stops the whole reMarkable UI, so keep SSH access working and confirm your OS version sits in the tested 3.26 to 3.27 range before installing. Skip it if you have any other reMarkable model, if you want a windowed app that leaves xochitl in charge, or if you will not supply an OpenAI-compatible key or run pi. Verify first that you can reach root@10.11.99.1 and run systemctl start xochitl, because the README treats that command as the recovery path when the tablet wedges.
Frequently asked questions
How do I install riddle on a reMarkable Paper Pro?
The README's easiest route is the remagic catalog: run remagic install riddle, then remagic config riddle, then tap Reload and The Diary in AppLoad. You can also unzip the release bundle and copy it to /home/root/xovi/exthome/appload/ over SSH, or install from the Store app on the tablet.
What does riddle need in order to answer?
It needs an oracle backend, chosen at startup. Either an OpenAI-compatible API key set as RIDDLE_OPENAI_KEY against a /chat/completions endpoint, or pi, which the README calls the power path and which requires no API key.
How do I leave the diary once it is open?
In takeover mode, tap five fingers at once and xochitl restarts automatically. In the windowed qtfb flavour xochitl keeps the touchscreen, so you close the diary from AppLoad instead.
Does riddle store what I write?
Every finished page is kept as pen strokes, a transcription and Tom's reply, in plain files under /home/root/riddle-data/memories, with roughly the last 400 pages retained. Deleting that folder makes the diary forget, and RIDDLE_MEMORY=off in oracle.env disables storage entirely.
Which reMarkable models and OS versions does riddle support?
The README states it has only been tested on a reMarkable Paper Pro (ferrari, aarch64) on OS 3.26 to 3.27, and that it may not work on other models or OS versions. It is not affiliated with reMarkable AS.
Community notes