Overview
This section explains how to extend Fess. It provides information on plugin development, custom connector creation, theme customization, and other ways to extend Fess.
Target Audience
Developers who want to create custom features for Fess
Developers who want to create plugins
Developers who want to understand the Fess source code
Prerequisites
Basic knowledge of Java 21
Basics of Maven (build system)
Experience with web application development
Development Environment
Recommended Environment
JDK: OpenJDK 21 or higher
IDE: IntelliJ IDEA / Eclipse / VS Code
Build Tool: Maven 3.9 or higher
Git: Version control
Setup
Get the source code:
Build:
Start the development server:
Architecture Overview
Fess consists of the following major components:
Component Structure
| Component | Description |
|---|---|
| Web Layer | MVC implementation using LastaFlute framework |
| Service Layer | Business logic |
| Data Access Layer | OpenSearch integration using DBFlute |
| Crawler | Content collection using fess-crawler library |
| Search Engine | Full-text search using OpenSearch |
Major Frameworks
LastaFlute: Web framework (actions, forms, validation)
DBFlute: Data access framework (OpenSearch integration)
Lasta Di: Dependency injection container
Directory Structure
Extension Points
Fess provides the following extension points:
Plugins
You can add features using plugins.
DataStore Plugin: Crawl from new data sources
Script Engine Plugin: Support for new scripting languages
Web App Plugin: Extend the web interface
Ingest Plugin: Process data during indexing
Details: Plugin Architecture
Themes
You can customize the design of the search screen.
Details: Theme Development Guide
Configuration
Many behaviors can be customized via fess_config.properties.
Details: Introduction
Plugin Development
For details on plugin development, see the following:
Plugin Architecture - Plugin Architecture
DataStore Plugin Development - DataStore Plugin Development
Script Engine Plugin - Script Engine Plugin
Web App Plugin - Web App Plugin
Ingest Plugin - Ingest Plugin
Theme Development
Theme Development Guide - Theme Customization
Best Practices
Coding Standards
Follow the existing Fess code style
Format code with
mvn formatter:formatAdd license headers with
mvn license:format
Testing
Write unit tests (
*Test.java)Integration tests use
*Tests.java
Logging
Use Log4j2
Use
logger.debug()/logger.info()/logger.warn()/logger.error()Do not log sensitive information