github grimmory-tools/grimmory v3.1.0
Release v3.1.0

7 hours ago

3.1.0 (2026-05-14)

This release of Grimmory: features a redesigned sidebar, supports personal ratings from native Kobo devices, has fixes for the book browser sorting/filtering, prevents a PDF corruption bug, swaps the PWA icons to use the light theme for better iOS support, and more.

Changelog

Full Changelog: v3.0.3...v3.1.0

Features

  • deploy: add healthchecks to docker, docker compose, podman quadlet, and helm chart (#1137) (c665359)
  • kobo: sync personal ratings from kobo (#1165) (7de39b8)
  • oidc: add configurable mobile redirect URI to the admin settings UI (#1287) (ff5f054)
  • pdf-reader: PDF reader for vertical/infinite scroll layouts and improved responsiveness (#841) (64945c0)
  • ui: add enhanced user popover + rearrange sidebar (#1246) (1042cad)
  • ui: add native control CSS system + button/text/tab examples (#1267) (a0a7100)
  • ui: New sidebar & search UI (#831) (f3138a8)

Bug Fixes

  • api: expose version from jar at /v1/version endpoint (#1224) (90547df)
  • avoid parsing access token on frontend during login (#1201) (60ffb09)
  • books: include physical books in app book list query (#938) (218ebb4)
  • frontend: unify custom metadata fetch dialog flow (#1088) (237171f)
  • kobo: add endpoints for devices to run with proxy off (#1052) (de93200)
  • koreader: use a timing-safe comparison for koreader password (#1154) (564ff93)
  • metadata: handle non-standard OPF locations (#1256) (f086964)
  • metadata: ignore non-results when parsing audble (#1081) (25bcc09)
  • metadata: truncate review data before storage (#1086) (d355f73)
  • pdf: update pdfium4j version to 1.2.0 and improve XMP metadata extraction (#1285) (a02499a)
  • pwa: swap PWA icons to light theme (#1122) (2fcbb5c)
  • regenerate-covers: wrap book query stream in transaction to prevent lazy init exception (#916) (2dcbfd1)
  • sidebar: add the notification badge to the sidebar (#1299) (168c915)
  • ui: add square audiobook artwork in command palette (#1099) (ddd3d6a)
  • ui: fix metadata lock patch (#1265) (81b423b)
  • ui: fix series page layout and grid (#1192) (95ef4db)
  • ui: fix sidebar height and button inconsistency (#1103) (e4c7eb9)
  • ui: fix upload books height and scroll issue (#1104) (1f3d776)
  • ui: mobile UI enhancements (#1184) (d792d32)
  • ui: refine mobile sidebar layout (#1100) (0d1a4ca)
  • ui: retrieve full size cover in series page component for hero banner (#1176) (da0d41b)
  • ui: revert to UI-based filtering & sorting (#935) (de96fd8)
  • ui: sidebar active outline consistency (#1093) (b228513)

Refactors

  • api: avoid polynomial regex issue in CustomFontService (#1042) (0edb544)
  • api: rename KOReader sync references from booklore to grimmory (#1085) (aec6d69)
  • api: replace FQNs with proper imports (#1206) (2deb25a)
  • docker: consolidate JVM options into JAVA_TOOL_OPTIONS (#1074) (efb2e1c)
  • jpa: apply Hibernate-safe equals and hashCode implementations (#1089) (76c6ca7)
  • metadata: make bookId and authorId/categoryId/shelfId final and adjust constructors (#968) (633f011)
  • metadata: replace Spring JSON processor with Jackson for leaner prod image (#905) (b9cb791)
  • stats: push bulk queries to streams, deduplicate aggregation logic (#937) (30f3a68)
  • ui: create shared grid layout for author/series/book browser (#1193) (3ecf312)
  • ui: native angular menu component + usage in sidebar (#1229) (e8c56e2)
  • ui: remove mobile-specific grid size controls (#1105) (3f3beaf)
  • ui: restore deferred render state service (#1255) (cac8681)
  • ui: use tanstack virtual+table for book browser table view (#1047) (1c99024)

Chores

  • deps: add 3 day npm release age gate (#1270) (442e0f9)
  • deps: add angular/aria dependency (#1213) (7a62e71)
  • deps: bump @semantic-release/release-notes-generator from 14.1.0 to 14.1.1 in /tools/release in the release-tooling group (#1273) (5988910)
  • deps: bump @stomp/rx-stomp from 2.3.0 to 2.4.0 (#1144) (0485bce)
  • deps: bump azure/setup-helm from 4.3.0 to 5.0.0 (#1275) (342b7d9)
  • deps: bump dependencies and gradle wrapper to 9.5.0 (#1204) (319b3a5)
  • deps: bump epub4j and epub4j-native versions to 1.4.0 (#1090) (686dd9f)
  • deps: bump fast-uri from 3.1.0 to 3.1.2 in /frontend (#1220) (7c5b3da)
  • deps: bump github/codeql-action from 4.35.2 to 4.35.3 (#1036) (e1a8109)
  • deps: bump github/codeql-action from 4.35.3 to 4.35.4 (#1274) (82704a2)
  • deps: bump hono from 4.12.14 to 4.12.18 in /frontend (#1180) (a71ff8c)
  • deps: bump ip-address from 10.1.0 to 10.2.0 in /tools/release (#1146) (694747a)
  • deps: bump taiki-e/install-action from 2.75.19 to 2.75.27 (#1037) (c355927)
  • deps: bump taiki-e/install-action from 2.75.27 to 2.77.6 (#1277) (15d034e)
  • deps: bump the gradle-dependencies group in /backend with 2 updates (#1276) (1bf253a)
  • deps: bump the npm-dependencies group in /frontend with 17 updates (#1198) (1b19590)
  • deps: bump the npm-dependencies on frontend (#1153) (207000d)
  • deps: drop unused frontend dev dependencies (#1149) (84b00de)
  • docker: bump Gradle version to 9.5.0 in Dockerfile/dev-docker-compose (#1295) (2c81b64)
  • docker: drop mariadb container_name property (#1057) (c9b2a57)
  • oidc: backfill + add mobile redirect URI whitelist setting to the backend (#1268) (ee3e21c)
  • README: clarify quickstart library must be in a host-mounted directory (#1320) (48a5f5f)
  • ui: move theme/language preferences into user profile (#1243) (868e8e6)
  • ui: rename menu references to sidebar (#1212) (249878b)
  • Update default settings tab from reader to view (#1171) (bf3f119)

Documentation

CI

  • docker: rotate Docker Hub auth secrets for token-based publishing (#1179) (7e55825)
  • nightly: make Discord notification optional for manual runs (#1322) (273be54)
  • release: publish Helm chart as OCI artifact on release (#993) (34eb6ce)
  • use last release as nightly base tag (#1226) (ea02baf)

Build

Tests

  • drop redundant mockito-inline dependency (#1120) (cdb6768)

Contributors

We'd like to thank the contributors for this release for taking the time to make Grimmory better.

Including but not limited to: @thibaultamartin @alexhb1 @balazs-szucs @zachyale @imnotjames @aisa @TheBrandonMorris @bussardrobbie @rubengarciam @Michael-Tanzer @hwine

New Contributors

Don't miss a new grimmory release

NewReleases is sending notifications on new releases.