| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| fess-15.6.0.zip | 2026-04-18 | 445.5 MB | |
| fess-15.6.0.rpm | 2026-04-18 | 443.6 MB | |
| fess-15.6.0.deb | 2026-04-18 | 443.1 MB | |
| Fess 15.6.0 source code.tar.gz | 2026-04-18 | 6.8 MB | |
| Fess 15.6.0 source code.zip | 2026-04-18 | 8.8 MB | |
| README.md | 2026-04-18 | 7.7 kB | |
| Totals: 6 Items | 1.3 GB | 0 | |
We're pleased to announce the release of Fess 15.6.0.
This release adds support for OpenSearch 3.6, introduces a new distributed coordination system for multi-instance deployments, modernizes password storage with BCrypt hashing, and ships a major AI Search Mode (RAG Chat) overhaul along with a new log-based notification channel.
Highlights
-
OpenSearch 3.6 Support Fess is now compatible with OpenSearch 3.6, taking advantage of the latest engine improvements and security fixes. The bundled
kopfplugin has also been updated to 15.6.0. -
Distributed Coordination for Multi-Instance Deployments New distributed coordination system enables safer operation when running multiple Fess instances against the same cluster, providing a foundation for cluster-aware scheduling and maintenance tasks.
-
BCrypt Password Hashing Local user passwords are now stored using BCrypt (Spring Security
{bcrypt}format) via the newPasswordHashHelper. Existing SHA-256/512/MD5 hashes continue to work for verification and are transparently re-hashed to BCrypt on the next successful login (app.password.upgrade.enabled=trueby default). Note: downgrading to a pre-BCrypt Fess release will invalidate{bcrypt}-encoded passwords — plan an admin password reset if you need to roll back. -
AI Search Mode (RAG Chat) Overhaul The experimental AI feature is rebranded from "AI Chat" to AI Search Mode and gains a substantially expanded RAG pipeline: pluggable LLM provider architecture, configurable per-prompt parameters and prompts, OpenAI reasoning model support, Gemini 3 thinking budget, search-filter UI, Markdown rendering, smart summary mode with turn-based history packing, query-regeneration fallback, source navigation via
goURLs, and structured error codes surfaced in the UI. -
Log-Based Notifications ERROR / WARN log events can now be forwarded to Slack, Google Chat, or email, making it easier to wire Fess into existing operational alerting workflows.
Improvements
- AI Search Mode / RAG Chat
- Extracted provider-specific clients into a plugin architecture (#3048)
- Per-prompt-type parameter config and extra-params support (#3049)
- Configurable RAG / chat prompts and simplified search-result flow (#3089)
- RAG LLM provider selection in admin General settings (#3054)
- Per-provider configurable max tokens and OpenAI reasoning model support (#3047)
- Gemini thinking-budget support and streaming-parser fix for Gemini 3 (#3046)
- Switch
max_tokens→max_completion_tokensfor newer OpenAI models (#3044) - Smart summary mode and turn-based conversation history packing (#3084)
- Query-regeneration fallback for RAG search (#3083)
- Granular error messages and structured
LlmExceptionerror codes (#3082, [#3050]) - Markdown rendering for RAG chat messages (#3075)
goURL generation for RAG chat source navigation (#3067)- Search filter support and dropdown filter UI in RAG chat (#3063, [#3068])
- Custom highlight tags and improved evaluation content processing (#3055)
- Configurable assistant message content for conversation history (#3052)
- LLM access-type tracking in search log (#3071)
- Configurable LLM log level in admin General settings (#3064)
- Concise multilingual taglines for chat welcome title (#3051)
- AI chat busy / error page and UI polish (#3043)
- Improved rate-limit message and dedup of error handling (#3062)
- Handle empty content with
lengthfinish reason for reasoning models (#3061) -
Final SSE chunk content is now flushed instead of dropped (#3096)
-
Security Hardening
- Prevent prompt injection in RAG document context (#3065)
- Prevent path traversal and symlink attacks in
IndexExportJob(#3080) - Mask sensitive tokens in
EntraIdAuthenticatordebug logs (#3077) - Mask
Authorizationheader value in SPNEGO error messages (#3078) - Tighten
DANGEROUS_QUERY_PATTERNto only block*:*queries (#3059) - Additional security and concurrency hardening for RAG chat / LLM (#3058, [#3060])
- Update
commons-fileuploadAPI and improveIOExceptionhandling (#3079) ACCESS_DENIEDactivity log on admin role-check failure (#3088)-
Configurable audit log max length with corrected truncation order (#3098)
-
Administration & Configuration
- Expose all
system.propertiessettings in the admin General screen (#3091) - Add config-index rebuild action to the maintenance page (#3097)
- Surface previously missing SSO settings in the General admin page (#3110)
- Split admin Notification section into Notice and Notify (#3092)
- Add duplicate action for crawl configurations (#3104)
- Improved validation messages and custom-field support on the search list page (#3102)
-
Null-safe handling for optional form fields in General settings (#3095)
-
Logging & Observability
- Automatic purging of click logs and favorite logs (#3112)
- Differentiate log levels by HTTP status in
SearchEngineApiManager(#3094) - Suppress
WARNlog noise for client errors in JSON API responses (#3100) - Enhanced RAG / LLM debug logging with consistent prefixes and levels (#3070, [#3073])
- Downgrade chat / LLM availability-check logs from
DEBUGtoTRACE(#3086) - Downgrade LLM lifecycle logs from
INFOtoDEBUG(#3119) - Include exception message in CPU stats warning log (#3108)
- Register custom Log4j2 plugins via annotation processor (#3117)
- Remove deprecated
packagesattribute from log4j2 config (#3121) -
Add
EcsLayouttoLlmFileappender for Docker JSON logging (#3120) -
Crawler & Indexing
- Use
SitemapsRulefor sitemap content validation (#3105) - Correct analyzer filters and dynamic-template names in index mappings (#3076)
- Fallback URL resolution for relative paths with special characters (#3056)
- Replace
URIwithURLinXpathTransformerandProtocolHelper(#3066) -
RankFusionProcessorboundary bug fixes and robustness improvements (#3106) -
API & Search
- Return job log ID from the scheduler
startAPI (#3103) - Robust handling of invalid Base64 in
similarDocHashdecoding (#3107) -
Add
ACCESS_DENIEDaudit signal on admin failures (#3088) -
Platform & Build
- Upgrade Servlet API from 6.0 to 6.1 (#3090)
- Complete migration of remaining
javaxreferences tojakartanamespace (#3109) - Improve translation quality and consistency across all languages (#3087)
- Bump
fess-parentto 15.6.0 (#3115) - Add compiled-script caching to
GroovyEngineand improveDocBoostMatchererror handling (#3074) - Remove
jakarta.activation, addoauth2-oidc-sdkdependency (#3081)
Bug Fixes
- Final SSE chunk no longer dropped in chat responses (#3096)
- Audit log truncation order corrected (#3098)
- Crawler URL escaping for relative paths with special characters (#3056)
RankFusionProcessorboundary handling fixes (#3106)- Null-safe handling for optional General-settings form fields (#3095)
similarDocHashno longer throws on malformed Base64 input (#3107)
We recommend upgrading to Fess 15.6.0 to take advantage of OpenSearch 3.6 support, modernized password security, multi-instance coordination, and the substantially improved AI Search Mode.
Documentation Docker Image: GitHub Packages - codelibs/fess Community Forum: discuss.codelibs.org
Thank you for using Fess!