Repository navigation
Releases: vvorth/inpx-shelf
Releases · vvorth/inpx-shelf
Release list
v26.10.0
26.10.0 / 2026-10-20
- Releases now ship when ready, without betas, and are numbered by date:
26.10.0,26.10.1, … (year, month and the number of the release in that month). ThebetaDocker image is no longer updated: switch tolatest. TheupdateChannelsetting (INPX_UPDATE_CHANNEL) is gone: the update check always looks at the latest release.devbuilds show a version with a commit mark, for example26.10.0+dev.b95beaa. - Action required: signing in to a profile is always required: without it only the app shell with the login form and the health checks (
/health,/ready,/api/index-status) are open.allowAnonymousAccessandINPX_ALLOW_ANONYMOUS_ACCESSare removed. Without a web login, books, covers and OPDS open only with OPDS credentials; signed OPDS links and the remote library token no longer work without a login. A profile without a password opens only through SSO binding. Kobo and KOReader keep their own authentication, as before. - Guest access can be turned on again, now with a fixed scope:
Administration → Users → Guest accessorINPX_GUEST_ACCESS=true. A guest searches the catalog, opens author, series and book pages, downloads and reads books and sees the shared discovery shelves; lists, progress, personal shelves, book delivery and administration still need a login. A guest never acts as a profile, a profile without a password included. OPDS has its own switch (Catalog without sign-inin the shared OPDS settings,INPX_OPDS_GUEST_ACCESS=true): the catalog and downloads open without credentials, profiles, their lists and progress still ask for the OPDS password. Both are off by default. - Action required: the access password (
accessPassword,accessTimeout) is removed: the profile login now guards the whole app. The "Lock the library" menu item is gone. - Action required: OPDS readers sign in with the profile login and a separate OPDS password; the profile password no longer works for OPDS. Create the OPDS password in
Profile and devices → Devices: a generated one is shown once, or set your own (at least 10 characters); a new one replaces the old. The "Require password for OPDS" checkbox is gone: OPDS login is on once an OPDS password exists. - Action required:
/metricsopens only withmetricsToken; without a token it is closed.metricsExemptAuthandINPX_METRICS_EXEMPT_AUTHare removed. The token is accepted only in theAuthorization: Bearerheader; the?token=parameter no longer works. - A new profile is created only with a login and password; without a password only with SSO binding (
proxyBindProfile). - Profile passwords must be at least 10 characters (when created or changed; existing passwords keep working). Guessing the password of one login from many addresses is slowed down: after 5 failures each next attempt for that login waits twice as long, up to 5 minutes; the login is never locked. The response time no longer tells whether a login exists.
- Action required: everyone signs in once more after the update. The browser session is now a signed HttpOnly cookie (key
session-secretin the data directory) and the server stores no sessions, so a restart keeps everyone signed in and any copy of the server accepts the cookie. A session lasts 30 days from the login and ends after 7 days without use. A password or login change and deleting the profile end its sessions; a full backup restore and an admin password reset end everyone's. Deletingsession-secretsigns everyone out. - Signing out gives the browser a new session without a profile, but a copy of the old cookie saved elsewhere stays valid until its limits; change the password to end it too.
- The web app no longer sends
X-User-IdandX-Profile-Token, and the server ignores them: the profile comes only from the session cookie. - On start the server logs every HTTP path it serves and, for each, who may open it.
- The library can live in S3: an
s3://bucket/prefixpath inLIBDIR,INPXor a source is read straight from S3 - INPX, archives, covers, illustrations and reviews, without downloading the library to disk. AWS (ECS/Fargate task role or keys) and self-hosted S3 servers (AWS_ENDPOINT_URL_S3) are supported. Sources on disk and in S3 can be mixed. AWS Fargate setup is in docker.md. - Action required:
CACHE_DIRnow really sets the cache directory: the book and cover cache (public-files) andtmp. The variable was in the Docker examples before, but the app did not read it and kept everything in the data directory. The cache an earlier version built inpublic-filesof the data directory is not moved: books and covers are prepared again as they are opened, and the oldpublic-filesdirectory can be deleted. The search DB stays in the data directory. WithoutCACHE_DIReverything stays in the data directory, as before. - Action required: the Audiobookshelf metadata provider is removed: the
/api/audiobookshelfroute is gone, andINPX_ABS_ENABLED,INPX_ABS_TOKEN,INPX_ABS_PUBLIC_URLandINPX_ABS_MAX_RESULTShave no effect. If the provider was added in Audiobookshelf, remove it there. - The
/#/reader-labdebug screen opens only a.fb2from the user's computer: the "Open sample" button, thesample=parameter and the/reader-lab-sourceserver route, which read FB2 from the library directory, are removed. djxlanddwebpare no longer looked up in abindirectory inside or next to the library: only theconverterPathspath, thebindirectory next to the program andPATH. The Docker image already has both. If they were only in the library'sbin, move them tobinnext to inpx-shelf or set the path inconverterPaths. The source check in administration no longer has abinitem.- Reader: uploading your own background picture is removed together with the "Background" tab and the "Shadow" switch (the letter shadow was visible only over a picture). The picture, up to 4 MB, was kept in the profiles file and rewritten on every save of the reading position. Saved pictures are dropped from the settings on the first save; reader settings are now limited by the general API request limit (1 MiB,
INPX_API_MESSAGE_LIMIT_MB) rather than 6 MiB. - The book window and OPDS show the date added as in the INPX:
2024-03-15instead of15.03.2024. - If a prepared book cannot be read from the cache, the download answers with an error instead of sending the compressed cache file as the book.
- The password administration suggests for a new profile is now 16 random characters (
abcd-efgh-...) instead of two words and a number: there were only 36 thousand of the old ones, few enough to guess through the login in a few hours. Passwords like that already handed out should be changed. - Reader, page mode: a paragraph split between pages no longer gets extra spaces around emphasized words ("said he .", "C hapter"), and in rare unmeasured splits the short start of a paragraph is no longer lost.
- The profile backup keeps the OPDS and KOReader password hashes and the KOReader progress: after a restore, reader apps sign in with their old passwords.
- Action required, incompatible: the remote library protocol is replaced, and neither side supports the old one (WebSocket
get-inpx-file/get-book-linkand download over/book) any more. A server of this version does not serve its library to earlier inpx-shelf or inpx-web versions and cannot use them as a remote library: update both servers and set up the connection again. The remote library now works over the/remote/HTTP API with tokens.allowRemoteLibandremoteLibare removed and ignored on start: the server with the library issues tokens inAdministration → Library → Access for other servers(each token has its own libraries), and the connecting server adds the remote library in the same place, next to its own. Each side can have several libraries; the same book is shown once. The INPX is downloaded again only after it changes, covers come from the server with the library, and a book is downloaded on first use and stays in the cache; the annotation and contents of a remote book come with the "Get metadata" button. See config.md. - The web app talks to the server over plain HTTP requests (
<root>/api/) instead of a WebSocket. A reverse proxy needs no WebSocket settings (Upgrade,Connection "upgrade"), and with proxy auth the user header is checked on every request. Browser tabs opened before the update must be reloaded. - A large book is unpacked from its archive straight to disk: a 150 MB file used to take about 450 MB of extra memory while it was extracted, now a few MB. The illustrations of a book and the files of a compressed EPUB are extracted in one pass over the archive instead of one pass per file.
- The book page no longer loads the whole book text: the cached book description of an 8 MB FB2 is 12 KB instead of 8 MB, and a cached book page opens in about a millisecond instead of 50. The reader downloads the book file itself. A damaged cache file is rebuilt instead of breaking the book page.
- FB2 books with a line break or tab after a tag name, or with attributes in single quotes (a cover link among them), are read correctly: the contents and the cover are no longer lost. A blank line with Windows line endings in an INPX no longer adds an empty book.
- Kobo: "Refresh on device" is no longer lost while the converter queue is full; the refresh goes out on a later sync.
- Saving settings in administration writes only the changed settings to
config.json. Before, it also wrote values set by environment variables and command-line options (for exampleINPX_GUEST_ACCESS,INPX_REQUIRE_AUTH,--port), so they stayed in effect after the variable was removed: checkconfig.jsonfor such values. A backup restore resets settings missing from the backup to their defaults, and environment and command-line ...