AnthoLume is a Progressive Web App (PWA) that manages your EPUB documents, provides an EPUB reader, and tracks your reading activity! It also has a KOReader KOSync compatible API, and a KOReader Plugin used to sync activity from your Kindle.
Go to file
Evan Reichard f1414e3e4e fix(timezones): move from utc offsets to timezones
This fixed various issues related to calculating streaks, etc. Now we
appropriately handle time as it was, vs as it is relative to an offset.
2024-03-11 22:20:21 -07:00
_test_files [add] better error handling, [add] font selector, [add] tailwind generation 2023-10-25 19:52:01 -04:00
api fix(timezones): move from utc offsets to timezones 2024-03-11 22:20:21 -07:00
assets fix(users): update user stomped on admin 2024-03-10 21:48:43 -04:00
client [fix] SyncNinja status message 2023-11-26 15:51:47 -05:00
config tests(all): improve tests, refactor(api): saving books 2024-02-24 20:45:26 -05:00
database fix(timezones): move from utc offsets to timezones 2024-03-11 22:20:21 -07:00
graph [fix] xpath & cfi resolution 2023-11-07 19:19:06 -05:00
metadata chore(dev): dynamically load templates during dev 2024-02-25 14:54:50 -05:00
opds tests(all): improve tests, refactor(api): saving books 2024-02-24 20:45:26 -05:00
screenshots [add] rename to AnthoLume 2023-11-04 19:55:38 -04:00
search tests(all): improve tests, refactor(api): saving books 2024-02-24 20:45:26 -05:00
server chore(dev): dynamically load templates during dev 2024-02-25 14:54:50 -05:00
templates fix(timezones): move from utc offsets to timezones 2024-03-11 22:20:21 -07:00
utils tests(all): improve tests, refactor(api): saving books 2024-02-24 20:45:26 -05:00
.djlintrc chore(formatting): djlint templates 2024-01-24 21:40:14 -05:00
.drone.yml tests(all): improve tests, refactor(api): saving books 2024-02-24 20:45:26 -05:00
.envrc Initial Commit 2023-09-19 08:01:15 -04:00
.gitignore tests(all): improve tests, refactor(api): saving books 2024-02-24 20:45:26 -05:00
.sqlfluff Initial Commit 2023-09-19 08:01:15 -04:00
banner.png [add] logo & banner, [fix] mobile alignment issue 2023-11-05 13:20:19 -05:00
banner.xcf [add] logo & banner, [fix] mobile alignment issue 2023-11-05 13:20:19 -05:00
docker-compose.yml [add] rename to AnthoLume 2023-11-04 19:55:38 -04:00
Dockerfile [fix] docker cicd build 2024-01-20 15:32:04 -05:00
Dockerfile-BuildKit [add] better log page, [add] admin users page, [add] admin nav 2024-01-20 15:03:32 -05:00
go.mod tests(all): improve tests, refactor(api): saving books 2024-02-24 20:45:26 -05:00
go.sum tests(all): improve tests, refactor(api): saving books 2024-02-24 20:45:26 -05:00
LICENSE Initial Commit 2023-09-19 08:01:15 -04:00
main.go chore(dev): dynamically load templates during dev 2024-02-25 14:54:50 -05:00
Makefile tests(all): improve tests, refactor(api): saving books 2024-02-24 20:45:26 -05:00
README.md feat(logging): improve logging & migrate to json logger 2024-01-26 20:45:07 -05:00
shell.nix add: db migrations & update 2024-01-25 19:22:57 -05:00
sqlc.yaml fix(timezones): move from utc offsets to timezones 2024-03-11 22:20:21 -07:00
tailwind.config.js chore(formatting): djlint templates 2024-01-24 21:40:14 -05:00

ScreenshotsDemo Server

user: demo • pass: demo


AnthoLume is a Progressive Web App (PWA) that manages your EPUB documents, provides an EPUB reader, and tracks your reading activity! It also has a KOReader KOSync compatible API, and a KOReader Plugin used to sync activity from your Kindle. Some additional features include:

  • OPDS API Endpoint
  • Local / Offline Reader (via ServiceWorker)
  • Metadata Scraping (Thanks OpenLibrary & Google Books API)
  • Words / Minute (WPM) Tracking & Leaderboard (Amongst Server Users)

While some features require JavaScript (Service Worker & EPUB Reader), we make an effort to limit JavaScript usage. Outside of the two aforementioned features, no JavaScript is used.

Server

Docker Image: docker pull gitea.va.reichard.io/evan/antholume:latest

Local / Offline Reader

The Local / Offline reader allows you to use any AnthoLume server as a standalone offline accessible reading app! Some features:

  • Add local EPUB documents
  • Read both local and any cached server documents
  • Maintains progress for all types of documents (server / local)
  • Uploads any progress or activity for cached server documents once the internet is accessible

KOSync API

The KOSync compatible API endpoint is located at: http(s)://<SERVER>/api/ko

OPDS API

The OPDS API endpoint is located at: http(s)://<SERVER>/api/opds

Quick Start

NOTE: If you're accessing your instance over HTTP (not HTTPS), you must set COOKIE_SECURE=false, otherwise you will not be able to login.

# Make Data Directory
mkdir -p antholume_data

# Run Server
docker run \
    -p 8585:8585 \
    -e COOKIE_SECURE=false \
    -e REGISTRATION_ENABLED=true \
    -v ./antholume_data:/config \
    -v ./antholume_data:/data \
    gitea.va.reichard.io/evan/antholume:latest

The service is now accessible at: http://localhost:8585. I recommend registering an account and then disabling registration unless you expect more users.

Configuration

Environment Variable Default Value Description
DATABASE_TYPE SQLite Currently only "SQLite" is supported
DATABASE_NAME antholume The database name, or in SQLite's case, the filename
CONFIG_PATH /config Directory where to store SQLite's DB
DATA_PATH /data Directory where to store the documents and cover metadata
LISTEN_PORT 8585 Port the server listens at
LOG_LEVEL info Set server log level
REGISTRATION_ENABLED false Whether to allow registration (applies to both WebApp & KOSync API)
COOKIE_AUTH_KEY Optional secret cookie authentication key (auto generated if not provided)
COOKIE_ENC_KEY Optional secret cookie encryption key (16 or 32 bytes)
COOKIE_SECURE true Set Cookie Secure attribute (i.e. only works over HTTPS)
COOKIE_HTTP_ONLY true Set Cookie HttpOnly attribute (i.e. inacessible via JavaScript)

Security

Authentication

  • Web App / PWA - Session based token (7 day expiry, refresh after 6 days)
  • KOSync & SyncNinja API - Header based - X-Auth-User & X-Auth-Key (KOSync compatibility)
  • OPDS API - Basic authentication (KOReader OPDS compatibility)

Notes

  • Credentials are the same amongst all endpoints
  • The native KOSync plugin sends an MD5 hash of the password. Due to that:
  • We store an Argon2 hash and per-password salt of the MD5 hashed original password

Client (KOReader Plugin)

See documentation in the client subfolder: SyncNinja

Development

SQLC Generation (v1.21.0):

go install github.com/sqlc-dev/sqlc/cmd/sqlc@latest
~/go/bin/sqlc generate

Goose Migrations:

go install github.com/pressly/goose/v3/cmd/goose@latest

Run Development:

CONFIG_PATH=./data DATA_PATH=./data REGISTRATION_ENABLED=true go run main.go serve

Building

The Dockerfile and Makefile contain the build information:

# Build Local (Linux & Darwin - arm64 & amd64)
make build_local

# Build Local Docker Image
make docker_build_local

# Build Docker & Push Latest or Dev (Linux - arm64 & amd64)
make docker_build_release_latest
make docker_build_release_dev

# Generate Tailwind CSS
make build_tailwind

# Clean Local Build
make clean

# Tests (Unit & Integration - Google Books API)
make tests_unit
make tests_integration

Notes