Your reading chronicle — a minimalist stats dashboard that runs entirely on your Kobo.
Tap a button. See your stats. No internet. No cloud. No app.
Verso queries your Kobo's built-in SQLite database and generates a crisp, e-ink-optimized HTML dashboard — viewable right on your device through the built-in browser.
One tap from the home menu. Zero dependencies to install. Fully offline.
| Section | What You See |
|---|---|
| Library Overview | Total books, finished, reading, unread |
| Reading Time | Total hours read, average per book, total authors |
| Records | Most time spent on a book, fastest finish |
| Currently Reading | Progress bars for each in-progress book |
| Monthly Completions | Bar chart of books finished per month |
| Most Time Invested | Top 10 books ranked by reading time |
| Top Authors | Ranked by total reading time |
| Recently Finished | Your last 15 completed books |
| Annotations | Highlight & note counts, most annotated books |
| Library Composition | Visual read / reading / unread breakdown |
| Day-of-Week Patterns | Which days you tend to finish books |
| Year in Review | Yearly books & reading time summary |
- A Kobo e-reader (tested on Libra BW — should work on any Kobo with firmware 4.x)
- NickelMenu installed
Download KoboRoot.tgz and place it in <Kobo>/.kobo/. Eject and reboot. You should see a NickelMenu entry in the main menu.
It will appear as a drive (e.g., E:\ on Windows, /Volumes/KOBOeReader on Mac).
Note:
.addsis a hidden folder. Enable Show hidden files in your file manager.
Create the folders if they don't exist, then copy:
<Kobo>/.adds/verso/verso.sh ← main script
<Kobo>/.adds/verso/sqlite3 ← bundled SQLite binary
<Kobo>/.adds/nm/verso ← NickelMenu entry (no file extension!)
Important: The NickelMenu config file must be named exactly
verso— no.nmor other extension. Rename it when copying.
Safely eject the Kobo. It will restart automatically. Done.
Windows example (E:\)
E:\.adds\verso\verso.sh
E:\.adds\verso\sqlite3
E:\.adds\nm\verso
Mac / Linux example
KOBO="/Volumes/KOBOeReader" # or /media/your-user/KOBOeReader
mkdir -p "$KOBO/.adds/verso" "$KOBO/.adds/nm"
cp verso.sh "$KOBO/.adds/verso/"
cp sqlite3 "$KOBO/.adds/verso/"
cp verso.nm "$KOBO/.adds/nm/verso"- From the Kobo home screen, tap the menu (☰ or three dots)
- Tap Verso
- The dashboard generates (~2 seconds) and opens in the browser
- Scroll to explore your reading stats
- Press back or close the browser to return to reading
Re-tap Verso anytime to refresh with your latest data.
┌─────────────┐ SQL queries ┌──────────────────┐ generates ┌────────────────┐
│ NickelMenu │ ──────────────────▶ │ KoboReader.sqlite│ ──────────────▶ │ dashboard.html │
│ (menu tap) │ via bundled │ (Kobo's own DB) │ styled for │ (e-ink browser) │
└─────────────┘ sqlite3 CLI └──────────────────┘ e-ink └────────────────┘
verso.sh— A POSIX shell script that runs SQL queries and generates a single HTML filesqlite3— A statically-compiled ARM binary (musl libc, ~858KB) bundled with Verso, since Kobo firmware doesn't include thesqlite3CLIKoboReader.sqlite— The database your Kobo already maintains with reading history, progress, bookmarks, and annotations
No data leaves your device. No internet required. Everything runs locally.
<Kobo>/
├── .adds/
│ ├── nm/
│ │ └── verso ← NickelMenu menu entry
│ └── verso/
│ ├── verso.sh ← main script
│ ├── sqlite3 ← bundled ARM binary
│ └── dashboard.html ← generated on first run
└── .kobo/
└── KoboReader.sqlite ← Kobo's database (read-only)
"Verso" doesn't appear in the menu
- Confirm NickelMenu is installed and working
- Check the file is at
.adds/nm/verso— no file extension - Restart the Kobo (hold power button ~10 seconds)
"Could not run process" error
- The NickelMenu config may have Windows line endings (CRLF). Open it in a code editor and save with LF line endings.
- Make sure the file is at
.adds/nm/verso(notverso.nm)
Browser opens but shows an error page
- "sqlite3 not found" → Make sure
sqlite3is in.adds/verso/alongsideverso.sh - "Database not found" → The Kobo database may be at a different path on your firmware version. Open an issue.
All stats show 0
- You may not have read any books on this device yet
- Sideloaded books need to be opened at least once to register in the database
Browser opens but shows nothing / stale data
- The script may not have finished. Tap Verso again.
- Check that both
verso.shandsqlite3are in.adds/verso/
The included sqlite3 binary is a statically-linked ARM (armhf) executable compiled with musl libc for maximum portability. If you want to build it yourself:
# Using a musl ARM cross-compiler (e.g., from musl.cc)
wget https://musl.cc/arm-linux-musleabihf-cross.tgz
tar xf arm-linux-musleabihf-cross.tgz
# Download SQLite amalgamation
wget https://sqlite.org/2024/sqlite-autoconf-3450200.tar.gz
tar xf sqlite-autoconf-3450200.tar.gz
cd sqlite-autoconf-3450200
# Compile static binary
arm-linux-musleabihf-cross/bin/arm-linux-musleabihf-gcc \
-Os -static \
-DSQLITE_THREADSAFE=0 \
-DSQLITE_OMIT_LOAD_EXTENSION \
-DSQLITE_OMIT_READLINE \
-o sqlite3 shell.c sqlite3.c
# Strip
arm-linux-musleabihf-cross/bin/arm-linux-musleabihf-strip sqlite3MIT — do whatever you want with it.




