We're pleased to announce the release of Fess 15.7.0.
This release introduces a unified /api/v2 REST API for headless and single-page-application frontends, and a new static theme system that lets you build search screens entirely from HTML, CSS, and JavaScript — shipped with a bundled Bootstrap 5 reference theme. It also updates the search engine to OpenSearch 3.7.
Important — API v2 migration: The legacy v1 JSON search and chat APIs have been replaced by the new
/api/v2surface. If you depend on the previous v1 search API, install the newfess-webapp-v1-apiplugin to restore it.
Highlights
-
Unified
/api/v2REST API
A single, consistent API surface replaces the legacy per-feature REST managers. A unified JSON envelope (status,schema,data/error) covers search, scroll (NDJSON), related queries and content, document cache, favorites, click logging, authentication (login / logout / me / password change), CSRF tokens, login rate limiting, UI config, and chat (POST and SSE streaming). The API ships with an OpenAPI contract and is hardened with enforced input bounds, mandatory CSRF on state-changing requests, and per-IP / per-user rate limiting. Note: the old v1 JSON search and chat endpoints are removed; installfess-webapp-v1-apiif you still need the v1 search API. -
Static Theme System (HTML / CSS / JS Search UI)
Search screens can now be delivered as static themes — self-contained HTML, CSS, and JavaScript bundles served directly from the web tier without a JSP or Action round-trip. Themes are validated against atheme.ymlmanifest, support pre-compressed assets and cache headers, and can be installed by ZIP upload with strong security guards (path-traversal, zip-bomb, and size limits). A new Admin → Theme screen lets you upload, activate, set a default, and remove themes. -
Bundled Bootstrap Reference Theme
Fess ships a complete Bootstrap 5 reference theme built from vanilla ES2022 modules that reproduces the existing search UI — home, search with facets, advanced search, cached view, AI chat, profile, and help — across 16 languages. Use it directly or as a starting point for your own custom search frontend. -
OpenSearch 3.7 Support
Fess is now compatible with OpenSearch 3.7, and the bundledkopfplugin is updated to 15.7.0.
Improvements
API & Integration
- New
/api/v2surface with 24 focused handlers behind a unified JSON envelope (#3136) - Enforce input bounds across the v2 REST API following OWASP API4:2023 (#3162)
- Published OpenAPI contract for the v2 user and chat APIs, with a pinned response-field allowlist (#3168, #3163, #3156)
- Refactor v2 API helpers into reusable DI components (#3160)
- Localize password-policy errors for SPA themes (#3143)
- Resolve correct installation / EOL help URLs in the UI config endpoint (#3153)
Search UI & Themes
- Filesystem-backed static theme system with manifest validation, atomic ZIP install, and an admin management UI (#3136)
- Run filter-only (facet) searches directly in the SPA theme (#3171)
- Apply sort, page-size, and language options on search submission rather than on change (#3174, #3151)
- Reset in-memory facet and search state when navigating back to the home view (#3170, #3155, #3176)
- Submit a search when a home-page suggestion is clicked, and trigger suggestions from a single character (#3152, #3139)
- Show the favorite star and count for all users in static themes (#3142)
- Clear login-form credentials when the login modal closes (#3150)
- Align the user-menu profile label with the password-change page and polish help-page styling (#3145, #3147)
Security & Hardening
- Enforce CSRF unconditionally on state-changing v2 requests (#3159)
- Scope login throttling to (client IP, username) and key anonymous chat throttling by client IP (#3158, #3165)
- Restrict credentialed CORS to allow-listed origins (#3157)
- Encode the search query in related-content placeholders to prevent reflected XSS (#3161)
- Add a
session.cookie.secureoption to set theSecureattribute on the session cookie (#3166, #3169) - Omit
cluster_namefrom anonymous health responses and default all v2 responses toCache-Control: no-store(#3164, #3144) - Validate click
query_idmembership and bound the reported rank (#3167)
Administration & Configuration
- New Admin → Theme management screen with clearer default-theme labelling and reliable default persistence (#3140, #3138)
AI Search Mode / RAG Chat
- Use highlighted passages for large documents when generating answers (#3148)
- Redesign smart summary as a "Minimal Trail" with phase-specific history (#3131)
- Notify the browser of LLM retry / waiting / fallback / warning states and the search-hit count (#3130)
- Treat truncated LLM responses as a fallback in RAG intent handling (#3129)
Crawler & Indexing
- Include HTTP 403 and 410 in the default set of failure URL status codes (#3132)
- Tighten the
FessCrawlerThreadhot path and precompile regex patterns across the API, crawler, and LLM code (#3134, #3133)
Platform
Bug Fixes
- Storage features are now correctly enabled when using the default Google Cloud Storage endpoint (#3135)
We recommend upgrading to Fess 15.7.0 to take advantage of the new /api/v2 API, the static theme system with its bundled Bootstrap reference theme, and OpenSearch 3.7 support. If you rely on the legacy v1 search API, remember to install the fess-webapp-v1-api plugin.
📜 Documentation
📦 Docker Image: GitHub Packages - codelibs/fess
💬 Community Forum: discuss.codelibs.org
Thank you for using Fess!