This plugin is primarily for my own use, and it's not intended to run as a continuously active web server on the Kindle.
The expected workflow is:
- Launch the plugin when needed
- Briefly access the dashboard from a phone or computer on the same local network
- Stop the server after reviewing the data
For cover display:
- Existing books do not show dashboard covers until cover files are saved.
- This is optional and not enabled by default.
- If you do not press
Pull Coversin the frontend, no book covers will be shown. - If you press
Pull Covers, covers are now stored as WebP. In my test, ~50 covers used around 1.1 MB.
Power usage note:
- The networking part is one of the biggest Kindle battery drains.
- My recommended use case is: start the plugin, review/screenshot what you need, then stop the server.
It is designed for short, on-demand sessions rather than persistent background operation.
A KOReader plugin that starts a lightweight local web server and exposes a browser dashboard for your reading data.
Open it from any device on the same local network (phone, tablet, laptop) to explore your library, reading progress, statistics, calendar activity, and highlights/notes.
- Runs directly inside KOReader
- Local web UI served by the plugin (
web/index.html,web/app.js,web/style.css) - JSON API for books, highlights, stats, overview, and dashboard data
- Bulk cover fetching (
Pull Covers) with progress, pause/resume, and caching - Highlights tools: copy single annotation + export all highlights (JSON)
- QR code shortcut in KOReader menu for quick mobile access
- Configurable port (default
8686) - Kindle support (opens/closes firewall rules when starting/stopping)
- Download the release ZIP.
- Extract it.
- Copy the
kodashboard.kopluginfolder into KOReader'spluginsdirectory. - Restart KOReader.
Expected path:
.../koreader/plugins/kodashboard.koplugin
- In KOReader, open the main menu.
- Open the
KoDashboardmenu. - Tap
Start dashboard server. - KOReader will show a local address (for example
http://192.168.1.23:8686). - Open that URL in a browser on another device on the same Wi-Fi/network.
- Or tap
Show QR codein theKoDashboardmenu and scan it from your phone/tablet.
- Start / Stop dashboard server
- Show QR code (starts the server if needed)
- Port (custom port setting)
This is one of the core features of KoDashboard.
- Open the dashboard in your browser.
- Go to the
Bookstab. - Click
Pull Covers. - Let the job run (you can
Pause/Resume). - When complete, covers are refreshed in the library UI.
saved: a cover was newly saved (downloaded or extracted)skipped: a cached cover already existsfailed: cover lookup/download failedCurrent: the book currently being processed- Error list: sample failures (up to a few entries) to help troubleshooting metadata/network issues
- KoDashboard tries local/embedded cover extraction first (when available).
- If no usable local cover is found, it can fall back to Open Library cover lookup/download.
- Downloaded covers are cached, so later runs usually skip existing covers.
- The KOReader device itself must have network access for online cover fetching.
- Your browser device (phone/laptop) only controls the UI; the fetch runs on the KOReader side.
- Cover matching depends on title/author metadata quality.
- Large libraries can take time depending on library size and network speed.
- Some books may remain without a fetched cover (metadata mismatch, missing result, network failure).
KoDashboard supports both quick copying and bulk export of annotations.
From the Highlights page or a book detail page:
- Find an annotation card.
- Click the copy icon.
- A formatted text block is copied to your clipboard.
The copied text can include:
- Book title
- Author
- Chapter
- Page
- Date
- Highlight text
- Note text
From the Highlights page:
- Use search/filter/sort if needed.
- Click the download icon (Export JSON).
- KoDashboard downloads a file like:
kodashboard-highlights-YYYY-MM-DD.json
The exported JSON includes structured rows such as:
- Book title / author
- Type (
highlightornote) - Color
- Chapter
- Page
- Datetime
- Highlight text
- Note text
Most endpoints are GET. Cover upload uses POST.
/api/books/api/books/:book_ref/api/books/:book_ref/annotations/api/books/:book_ref/timeline/api/books/:book_ref/cover/api/books/:book_ref/fetch-cover/api/books/:book_ref/upload-cover(POST, binary image body)/api/highlights/api/stats/api/overview/api/dashboard
- Intended for local network use
- Server binds to all interfaces (
*) on the configured port - Static files are served from the plugin
web/directory - The built-in server supports
GETandPOSTrequests
- If the page does not load, confirm KOReader shows the server as running
- Make sure both devices are on the same network
- Try a different port if
8686is occupied - If covers fail to fetch, verify internet access on the KOReader device and check book metadata quality
- On Kindle, restarting the plugin can help if firewall rules were not applied cleanly
main.lua- plugin entry point and HTTP serverapi.lua- API routing and JSON responsesdataloader.lua- data loading/parsing from KOReader data sourcesweb/- frontend dashboard UI
- Fable (design inspiration for reading/social reading UX ideas)
- KoInsight by GeorgeSG (inspiration/reference for KOReader reading insights work)







