apps/readest-app/docs/book-config.md
Each imported book may have a per-book config file at:
<bookHash>/config.json
The file is written under the Books storage root and uses the same camelCase
keys as the TypeScript BookConfig type in src/types/book.ts.
schemaVersion identifies the raw config.json schema written by Readest.
Current version:
{
"schemaVersion": 1
}
Configs written before this field existed are treated as legacy configs and are
loaded as the current version. New writes must include schemaVersion.
schemaVersion is only for the raw disk JSON file. The cloud sync
book_configs table is a normalized sync projection and does not mirror this
field.
Version 1 documents these fields as the supported integration surface:
schemaVersion: raw config schema version.bookHash, metaHash: book identity when present.progress: current page tuple, [current, total].location: current reading location as CFI.xpointer: current reading location as XPointer for KOReader interoperability.booknotes: bookmarks, annotations, and excerpts.rsvpPosition: RSVP reading position.updatedAt: last config update timestamp in milliseconds.viewSettings and searchConfig are persisted app state. They are partial
overrides and are merged with defaults when Readest loads the config.
BookConfig.xpointer is the current reading location. It was not renamed by
KOReader annotation sync work.
For notes in booknotes, Readest stores note ranges with:
xpointer0: start XPointer.xpointer1: end XPointer, when available.This distinction matters for integrations reading raw config files: progress
uses xpointer, while note ranges use xpointer0 and xpointer1.