Skip to content

Known limitations

Places where KMServer does not match the Java version and does not plan to — accepted gaps. Improvements and intentional behavior differences are listed under Enhancements.

Out of scope

These are excluded on purpose rather than gaps:

  • Actuator endpoints and metrics that only expose JVM/Spring internals (beans, conditions, env, configprops, loggers, mappings, heapdump, threaddump, system.*/http.server.requests meters, jvm.* beyond jvm.memory.used and the like).

Media formats

  • HEIF, HEIC and AVIF pages are decoded by libheif, as in the Java version, but only its HEVC and AV1 decoders are built in. Rare files with other payloads, such as AVC or JPEG, are still served as-is but get no thumbnail or conversion.
  • PDF support requires a runtime libpdfium, looked up in KOMGA_PDFIUM_PATH, next to the executable, then system paths; when unavailable, every PDF operation returns Unsupported. The Java version bundles PDFBox. The Docker image, macOS app, and Windows packages include libpdfium; Linux release archives require a separate library, as described in Installation.
  • JPEG output is not byte-identical to ImageIO (different encoder), an accepted deviation that affects byte-level comparisons of thumbnails and page hashes.
  • The full-text query syntax is a deliberate subset of Komga’s Lucene syntax: whitespace-ANDed terms plus field: scoping (including field:(a OR b) groups). Boolean operators, fuzzy ~, wildcards, phrases, boosts and [a TO b] ranges are searched as literal text, not interpreted as operators — see Search.
  • komga.lucene.index-analyzer.* and komga.lucene.commit-delay are ignored (warned and dropped during Java config migration); the analyzer is fixed to the multilingual ngram chain.

API

  • Request JSON is parsed strictly: property names and search-condition operator tags are case-sensitive (oneShot, isNot). The Java version accepts any casing (Jackson ACCEPT_CASE_INSENSITIVE_PROPERTIES / ACCEPT_CASE_INSENSITIVE_VALUES), so payloads spelled oneshot or isnot work there. Here a wrong-case operator tag or enum value gets a 422, but a wrong-case property name is silently ignored as an unknown field: PATCH /api/v1/settings with {"TaskPoolSize": 3} returns 204 and changes nothing. Send the documented camelCase forms.
  • server.context-path only prefixes generated links (OPDS/WebPub/Kobo); routes are not mounted under it, so the server cannot answer under the prefix itself — put it behind a reverse proxy that strips the prefix. The Java version mounts the whole application under it.

Database / migrations

  • Deprecated BCP47 aliases (e.g. iw → he) are not normalized by the language-code migration for pre-2023-08 libraries, an accepted deviation.

Ignored Java configuration keys

Warned about and dropped during application.yml migration:

  • server.error.*
  • komga.database.batch-chunk-size, komga.tasks-db.batch-chunk-size
  • komga.database.check-local-filesystem, komga.tasks-db.check-local-filesystem

Ignored but behavior-equivalent (not limitations): server.tomcat.* (tomcat-specific), server.forward-headers-strategy (always framework, except that X-Forwarded-For is honored only from server.trusted-proxies), shutdown handling (always graceful).

Navigation

Type to search…

↑↓ navigate↵ selectEsc close