Fork of GeorgeSG/koinsight: percentage-native reading stats for CrossPoint-class readers, position fallback on the books page, plugin API auth.
  • TypeScript 83.3%
  • Lua 15%
  • CSS 1%
  • Bru 0.4%
  • Shell 0.1%
  • Other 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
Jonathan Gluck 71fa48a496 Review fixes: scope /syncs/progress, keep links through outages, no rewind from the cover
- GET /syncs/progress answered anonymously with every user's positions,
  usernames and device ids, and the path is on the proxy's no-login list.
  It now needs the reader's credentials and returns that user's rows; the
  web Coven Sync page reads the same data from /api/kosync/progress (gated,
  proxy identity header).
- Hardcover: only a 400/401 from the token endpoint marks the link broken.
  A network error, failed discovery or 5xx during refresh used to set
  hardcover_error and unlink the user until they signed in again.
- ABS bridge decide(): a reader reporting 0 (sitting on the cover, before
  the first marker) no longer moves the audiobook to its start; listening
  that is still inside the hand-off landing margin no longer moves the
  readers back by that margin.
- Tests: progress is truncated between tests (rows leaked across tests and
  attached to recycled user ids); testTimeout 30 s, since each bcrypt-
  authenticated request costs seconds on the Pi under the full suite.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
2026-10-06 15:36:04 -04:00
.github/workflows [ci] Bump node version to 22 2026-08-01 18:22:36 +03:00
.vscode Update vscode settings 2025-04-12 10:23:22 +03:00
apps Review fixes: scope /syncs/progress, keep links through outages, no rewind from the cover 2026-10-06 15:36:04 -04:00
bruno chore: Update bruno definitions 2025-05-26 19:02:10 +03:00
docs docs: architecture and process flow of the Coven reading sync 2026-09-15 14:31:13 -04:00
images Add SVG logos 2025-05-25 19:12:42 +03:00
packages/common Reading journey: the listening lane leaves out what the readers covered 2026-10-06 09:42:19 -04:00
plugins covensync: read the stamped docid at PreRenderDocument 2026-09-15 22:49:39 -04:00
.dockerignore .dockerignore all envs 2025-04-11 12:32:27 +03:00
.gitignore Use turbo 2025-04-04 12:47:50 +03:00
.prettierrc Add internal database 2025-01-19 16:41:47 +02:00
CHANGELOG.md feat(koplugin): bulk sync annotations (#84) 2026-02-01 11:28:23 +01:00
compose.yaml Rebrand to KoInsight 2025-04-07 18:50:50 +03:00
DEVELOPMENT.md chore: Improve seeds and add developer documentation (#88) 2026-01-15 22:45:52 +02:00
Dockerfile Audiobookshelf: pin audiobooks to books at chapter starts 2026-09-26 15:10:18 -04:00
LICENSE.md Add license 2025-04-11 13:53:46 +03:00
package-lock.json Library: sign in to Adobe with an Adobe ID on the Integrations page 2026-10-03 13:40:39 -04:00
package.json chore: simplify dev env, add example env files 2026-08-01 19:32:25 +03:00
README.md [CI] Add pipeline to release 2026-08-01 18:01:55 +03:00
stylua.toml chore(format): add stylua configuration for lua files (#44) 2025-07-01 10:45:27 +03:00
tag-release.sh [CI] Add pipeline to release 2026-08-01 18:01:55 +03:00
turbo.json chore: simplify dev env, add example env files 2026-08-01 19:32:25 +03:00

KoInsight brings your KOReader reading stats to life with a clean, web-based dashboard.

Coverage Status

Features

  • 📈 Interactive dashboard with charts and insights
  • ✏️ Highlights sync
  • 🔄 KOReader plugin for syncing reading stats
  • 📱 Multi-device support
  • 📤 Manual .sqlite upload supported
  • ♻️ Act as a KOReader (kosync) sync server
  • 🏠 Fully self-hostable (Docker image available)

Screenshots

Note:As of 2025-10-15 covers are not (yet) automatically displayed, as they are not part of the KOReader-generated database. If you want to see covers, you'll need to add them once per book. The UI offers a search by title and upload of images under the tab 'Cover Selector'.

Home page Book view
Statistics Statistics

See all screenshots

Installation

Using Docker and Docker Compose

Add the following to your compose.yaml file:

name: koinsight
services:
  koinsight:
    image: ghcr.io/ko-insight/koinsight:latest
    restart: unless-stopped
    ports:
      - "3000:3000"
    volumes:
      - ./data:/app/data

Run docker compose up -d.

Configuration

KoInsight can be configured using the following environment variables:

  • HOSTNAME: The hostname or IP address where the server will listen.
    Default: localhost
  • PORT: The port number for the web server.
    Default: 3000
  • MAX_FILE_SIZE_MB: Maximum allowed size (in megabytes) for uploaded files.
    Default: 100
  • DATA_PATH: Path to the directory where KoInsight data (such as stats or uploads) will be stored.
    Default: ../../../data or /app/data in Docker.

Usage

Reading statistics

To start seeing data in KoInsight, you need to upload your reading statistics. Currently, there are two ways to do this:

  1. Manual upload: Extract your statistics.sqlite (in settings folder) file from KOReader and upload it using the "Upload Statistics DB" button in KoInsight.
  2. Sync plugin: Install and configure the KoInsight plugin in KOReader to sync your data directly.

KOReader sync plugin

The KoInsight plugin syncs your reading statistics from KOReader to KoInsight.

Installation:

  1. Download the plugin ZIP bundle from the "KOReader Plugin" button in the main menu.
  2. Extract it into your KOReader/plugins/ folder.
  3. For the plugin to be installed correctly, the file structure should look like this:
    koreader
    └── plugins
        └── koinsight.koplugin
            ├── _meta.lua
            ├── main.lua
            └── ...
    

Usage:

  1. Open the KOReader app.
  2. Go to the Tools menu and open KoInsight (it should be below "More tools").
  3. Click Configure KoInsight and enter your KoInsight server URL (e.g., http://server-ip:3000).
    • ⚠️ Make sure your KOReader device has network access to the server.
  4. Click Sync in the KoInsight plugin menu.

Reload the KoInsight web dashboard. If everything went well (🤞), your data should appear.

Manual Upload: statistics.sqlite

  1. Open a file manager on your KOReader device.
  2. Navigate to the KOReader/settings/ folder.
  3. Locate the statistics.sqlite file.
  4. Copy it to your computer.
  5. Upload it to KoInsight using the "Upload Statistics DB" button.
  6. Reload the KoInsight web dashboard.

Every time you need to reupload data, you would need to upload the statistics database file again.

Use as progress sync server

You can use your KoInsight instance as a KOReader sync server. This allows you to sync your reading progress across multiple devices.

  1. Open the KOReader app.
  2. Go to the Tools menu and open Progress sync
  3. Set the server URL to your KoInsight instance (e.g., http://server-ip:3000).
  4. Register an account and login.
  5. Sync your progress.

The progress sync data should appear in the "Progress syncs" page in KoInsight.

Development

See DEVELOPMENT.md for development setup and instructions.

Roadmap

(a.k.a things I want to do)

See Project board