| user.code.request.parameter | User code settings | userCode |
| user.code.min.length | User code minimum length. | 20 |
| user.code.max.length | User code maximum length. | 100 |
| user.code.pattern | User code pattern for validation. | [a-zA-Z0-9_]+ |
| mail.from.name | Name to display in the From field of emails. | Administrator |
| mail.from.address | Email address to use in the From field. | root@localhost |
| mail.hostname | Hostname for the mail server. | (empty) |
| scheduler.target.name | Target name for the scheduler. | (empty) |
| scheduler.job.class | Job class for the scheduler. | org.codelibs.fess.app.job.ScriptExecutorJob |
| scheduler.concurrent.exec.mode | Mode for concurrent execution in the scheduler. | QUIT |
| scheduler.monitor.interval | Interval for scheduler monitoring. | 30 |
| coordinator.poll.interval | Interval (seconds) for polling heartbeats and events. | 60 |
| coordinator.heartbeat.ttl | Time-to-live (ms) for instance heartbeat documents. | 180000 |
| coordinator.operation.ttl | Time-to-live (ms) for operation lock documents. | 7200000 |
| coordinator.operation.retry | Maximum number of retries for acquiring an operation lock. | 3 |
| coordinator.event.ttl | Time-to-live (ms) for event notification documents. | 600000 |
| online.help.base.link | Base link for online help. | https://fess.codelibs.org/{lang}/{version}/admin/ |
| online.help.installation | Installation guide link for online help. | https://fess.codelibs.org/{lang}/{version}/install/install.html |
| online.help.eol | End-of-life information link for online help. | https://fess.codelibs.org/{lang}/eol.html |
| online.help.name.failureurl | Online help key for failure URL. | failureurl |
| online.help.name.elevateword | Online help key for elevate word. | elevateword |
| online.help.name.reqheader | Online help key for request header. | reqheader |
| online.help.name.dict.synonym | Online help key for synonym dictionary. | synonym |
| online.help.name.dict | Online help key for dictionary. | dict |
| online.help.name.dict.kuromoji | Online help key for Kuromoji dictionary. | kuromoji |
| online.help.name.dict.protwords | Online help key for protected words dictionary. | protwords |
| online.help.name.dict.stopwords | Online help key for stopwords dictionary. | stopwords |
| online.help.name.dict.stemmeroverride | Online help key for stemmer override dictionary. | stemmeroverride |
| online.help.name.dict.mapping | Online help key for mapping dictionary. | mapping |
| online.help.name.webconfig | Online help key for web config. | webconfig |
| online.help.name.searchlist | Online help key for search list. | searchlist |
| online.help.name.log | Online help key for log. | log |
| online.help.name.general | Online help key for general settings. | general |
| online.help.name.role | Online help key for role. | role |
| online.help.name.joblog | Online help key for job log. | joblog |
| online.help.name.keymatch | Online help key for keymatch. | keymatch |
| online.help.name.relatedquery | Online help key for related query. | relatedquery |
| online.help.name.relatedcontent | Online help key for related content. | relatedcontent |
| online.help.name.wizard | Online help key for wizard. | wizard |
| online.help.name.badword | Online help key for bad word. | badword |
| online.help.name.pathmap | Online help key for path mapping. | pathmap |
| online.help.name.boostdoc | Online help key for boost document. | boostdoc |
| online.help.name.dataconfig | Online help key for data config. | dataconfig |
| online.help.name.systeminfo | Online help key for system info. | systeminfo |
| online.help.name.user | Online help key for user. | user |
| online.help.name.group | Online help key for group. | group |
| online.help.name.dashboard | Online help key for dashboard. | dashboard |
| online.help.name.webauth | Online help key for web authentication. | webauth |
| online.help.name.fileconfig | Online help key for file config. | fileconfig |
| online.help.name.fileauth | Online help key for file authentication. | fileauth |
| online.help.name.labeltype | Online help key for label type. | labeltype |
| online.help.name.tagtype | Online help key for tag type. | tagtype |
| online.help.name.duplicatehost | Online help key for duplicate host. | duplicatehost |
| online.help.name.scheduler | Online help key for scheduler. | scheduler |
| online.help.name.crawlinginfo | Online help key for crawling info. | crawlinginfo |
| online.help.name.backup | Online help key for backup. | backup |
| online.help.name.upgrade | Online help key for upgrade. | upgrade |
| online.help.name.sereq | Online help key for search request. | sereq |
| online.help.name.accesstoken | Online help key for access token. | accesstoken |
| online.help.name.suggest | Online help key for suggest. | suggest |
| online.help.name.searchlog | Online help key for search log. | searchlog |
| online.help.name.maintenance | Online help key for maintenance. | maintenance |
| online.help.name.plugin | Online help key for plugin. | plugin |
| online.help.name.storage | Online help key for storage. | storage |
| online.help.name.docreport | Online help key for document report. | docreport |
| online.help.supported.langs | Supported languages for online help. | de,es,fr,ja,ko,zh-cn |
| forum.link | Forum link for user support. | https://discuss.codelibs.org/c/Fess{lang}/ |
| forum.supported.langs | Supported languages for the forum. | en,ja |
| suggest.popular.word.seed | Seed value for popular word suggestion. | 0 |
| suggest.popular.word.tags | Tags for popular word suggestion. | (empty) |
| suggest.popular.word.fields | Fields for popular word suggestion. | (empty) |
| suggest.popular.word.excludes | Excluded words for popular word suggestion. | (empty) |
| suggest.popular.word.size | Number of popular words to suggest. | 10 |
| suggest.popular.word.window.size | Window size for popular word suggestion. | 30 |
| suggest.popular.word.query.freq | Query frequency for popular word suggestion. | 10 |
| suggest.min.hit.count | Minimum hit count for suggestion. | 1 |
| suggest.field.contents | Field for suggestion contents. | _default |
| suggest.field.tags | Field for suggestion tags. | label |
| suggest.field.roles | Field for suggestion roles. | role |
| suggest.field.index.contents | Index contents for suggestion. | content,title |
| suggest.update.request.interval | Interval for suggestion update requests. | 0 |
| suggest.update.doc.per.request | Number of documents per suggestion update request. | 2 |
| suggest.update.contents.limit.num.percentage | Percentage limit for suggestion update contents. | 50% |
| suggest.update.contents.limit.num | Maximum number of suggestion update contents. | 10000 |
| suggest.update.contents.limit.doc.size | Maximum document size for suggestion update. | 50000 |
| suggest.source.reader.scroll.size | Scroll size for suggestion source reader. | 1 |
| suggest.popular.word.cache.size | Cache size for popular word suggestion. | 1000 |
| suggest.popular.word.cache.expire | Cache expiration (seconds) for popular word suggestion. | 60 |
| suggest.search.log.permissions | Permissions for suggestion search log. | {user}guest,{role}guest |
| suggest.system.monitor.interval | Interval for system monitor in suggestion. | 60 |
| ldap.admin.enabled | Whether LDAP admin is enabled. | false |
| ldap.admin.user.filter | User filter for LDAP admin. | uid=%s |
| ldap.admin.user.base.dn | Base DN for LDAP admin user. | ou=People,dc=fess,dc=codelibs,dc=org |
| ldap.admin.user.object.classes | Object classes for LDAP admin user. | organizationalPerson,top,person,inetOrgPerson |
| ldap.admin.role.filter | Role filter for LDAP admin. | cn=%s |
| ldap.admin.role.base.dn | Base DN for LDAP admin role. | ou=Role,dc=fess,dc=codelibs,dc=org |
| ldap.admin.role.object.classes | Object classes for LDAP admin role. | groupOfNames |
| ldap.admin.group.filter | Group filter for LDAP admin. | cn=%s |
| ldap.admin.group.base.dn | Base DN for LDAP admin group. | ou=Group,dc=fess,dc=codelibs,dc=org |
| ldap.admin.group.object.classes | Object classes for LDAP admin group. | groupOfNames |
| ldap.admin.sync.password | Whether to sync password for LDAP admin. | true |
| ldap.auth.validation | Whether to validate LDAP authentication. | true |
| ldap.connect.timeout | Timeout (milliseconds) to establish an LDAP connection. This also bounds the TLS handshake and the initial bind response. 0 or less leaves it to the JDK/OS default. | 10000 |
| ldap.read.timeout | Timeout (milliseconds) to wait for an LDAP response after the connection is bound. 0 or less waits indefinitely. | 30000 |
| ldap.search.time.limit | Server side time limit (milliseconds) for an LDAP search. 0 or less means no limit. | 60000 |
| ldap.max.username.length | Maximum username length for LDAP. | -1 |
| ldap.ignore.netbios.name | Whether to ignore NetBIOS name in LDAP. | true |
| ldap.group.name.with.underscores | Whether to allow underscores in LDAP group names. | false |
| ldap.lowercase.permission.name | Whether to use lowercase for LDAP permission names. | false |
| ldap.allow.empty.permission | Whether to allow empty permissions in LDAP. | true |
| ldap.samaccountname.group | Whether to use samAccountName for LDAP group. | false |
| ldap.role.search.user.enabled | Whether LDAP role search for user is enabled. | true |
| ldap.role.search.group.enabled | Whether LDAP role search for group is enabled. | true |
| ldap.role.search.role.enabled | Whether LDAP role search for role is enabled. | true |
| ldap.attr.surname | LDAP attribute for surname. | sn |
| ldap.attr.givenName | LDAP attribute for given name. | givenName |
| ldap.attr.employeeNumber | LDAP attribute for employee number. | employeeNumber |
| ldap.attr.mail | LDAP attribute for mail. | mail |
| ldap.attr.telephoneNumber | LDAP attribute for telephone number. | telephoneNumber |
| ldap.attr.homePhone | LDAP attribute for home phone. | homePhone |
| ldap.attr.homePostalAddress | LDAP attribute for home postal address. | homePostalAddress |
| ldap.attr.labeledURI | LDAP attribute for labeled URI. | labeledURI |
| ldap.attr.roomNumber | LDAP attribute for room number. | roomNumber |
| ldap.attr.description | LDAP attribute for description. | description |
| ldap.attr.title | LDAP attribute for title. | title |
| ldap.attr.pager | LDAP attribute for pager. | pager |
| ldap.attr.street | LDAP attribute for street. | street |
| ldap.attr.postalCode | LDAP attribute for postal code. | postalCode |
| ldap.attr.physicalDeliveryOfficeName | LDAP attribute for physical delivery office name. | physicalDeliveryOfficeName |
| ldap.attr.destinationIndicator | LDAP attribute for destination indicator. | destinationIndicator |
| ldap.attr.internationaliSDNNumber | LDAP attribute for international ISDN number. | internationaliSDNNumber |
| ldap.attr.state | LDAP attribute for state. | st |
| ldap.attr.employeeType | LDAP attribute for employee type. | employeeType |
| ldap.attr.facsimileTelephoneNumber | LDAP attribute for facsimile telephone number. | facsimileTelephoneNumber |
| ldap.attr.postOfficeBox | LDAP attribute for post office box. | postOfficeBox |
| ldap.attr.initials | LDAP attribute for initials. | initials |
| ldap.attr.carLicense | LDAP attribute for car license. | carLicense |
| ldap.attr.mobile | LDAP attribute for mobile. | mobile |
| ldap.attr.postalAddress | LDAP attribute for postal address. | postalAddress |
| ldap.attr.city | LDAP attribute for city. | l |
| ldap.attr.teletexTerminalIdentifier | LDAP attribute for teletex terminal identifier. | teletexTerminalIdentifier |
| ldap.attr.x121Address | LDAP attribute for X.121 address. | x121Address |
| ldap.attr.businessCategory | LDAP attribute for business category. | businessCategory |
| ldap.attr.registeredAddress | LDAP attribute for registered address. | registeredAddress |
| ldap.attr.displayName | LDAP attribute for display name. | displayName |
| ldap.attr.preferredLanguage | LDAP attribute for preferred language. | preferredLanguage |
| ldap.attr.departmentNumber | LDAP attribute for department number. | departmentNumber |
| ldap.attr.uidNumber | LDAP attribute for UID number. | uidNumber |
| ldap.attr.gidNumber | LDAP attribute for GID number. | gidNumber |
| ldap.attr.homeDirectory | LDAP attribute for home directory. | homeDirectory |
| plugin.repositories | Plugin repository URLs. | https://maven.codelibs.org/release/org/codelibs/fess/,https://repo.maven.apache.org/maven2/org/codelibs/fess/,https://fess.codelibs.org/plugin/artifacts.yaml |
| plugin.version.filter | Version filter for plugins. | (empty) |
| storage.max.items.in.page | Maximum number of items per page in storage. | 1000 |
| password.invalid.admin.passwords | List of invalid admin passwords. | admin |
| password.min.length | Minimum password length (0 to disable). | 8 |
| password.max.length | Maximum length of a password field. | 100 |
| password.require.uppercase | Require uppercase letters in password. | false |
| password.require.lowercase | Require lowercase letters in password. | false |
| password.require.digit | Require digits in password. | false |
| password.require.special.char | Require special characters in password. | false |
| rag.chat.enabled | Whether RAG chat feature is enabled. | false |
| rag.chat.log.enabled | Whether to record the usage of each RAG chat request (user, time, LLM calls and tokens) in the chat log. The question and the answer are never recorded. | true |
| rag.chat.context.max.documents | Chat generation settings. | 5 |
| rag.chat.query.regeneration.max.count | Maximum number of times one chat request regenerates its search query and searches again when the search finds no documents or, in the streaming chat, none of the hits is judged relevant. Each regeneration makes one LLM call, plus one relevance evaluation call when the new search has hits (0 disables). | 2 |
| rag.chat.session.timeout.minutes | Session settings. | 30 |
| rag.chat.session.max.size | Maximum cached chat sessions; least recently accessed are evicted above it (0 or less means 100). | 10000 |
| rag.chat.history.max.messages | Maximum messages kept in one chat session; older turns are trimmed on each new message. | 30 |
| rag.chat.content.fields | Enhanced RAG flow settings. Fields to retrieve for full document content. | title,url,content,doc_id,content_title,content_description |
| rag.chat.highlight.fragment.size | Highlight settings for RAG search. | 500 |
| rag.chat.highlight.number.of.fragments | Number of highlight fragments per document in the RAG chat context search. | 3 |
| rag.chat.content.fulltext.max.length | Large-document handling for answer generation. Documents whose content_length exceeds this value use highlighted passages instead of full content in the answer context. | 3000 |
| rag.chat.answer.highlight.fragment.size | Highlight settings used when extracting passages from large documents for the answer context. | 1000 |
| rag.chat.answer.highlight.number.of.fragments | Number of highlight fragments taken from each oversized document for the answer context. | 5 |
| rag.chat.history.assistant.content | History content mode for assistant messages. smart_summary - drop assistant body, keep only past search query + referenced titles per turn (default, recommended) full - send the whole assistant response source_titles - body + referenced titles suffix source_titles_and_urls - “[References: title (url), …]” only truncated - truncate assistant response at history.assistant.max.chars none - drop assistant turns from history | smart_summary |
| rag.chat.history.titles.max.count | Maximum number of referenced document titles included per turn in smart_summary history mode. | 5 |
| rag.chat.document.max.parts | Maximum number of parts a document is split into when chatting about a single document longer than the LLM context budget. Each part is summarized separately and the summaries are combined into the answer; parts beyond this number are not used. A request about such a document makes up to this many LLM calls plus one for the answer, on every turn. | 10 |
| rag.chat.response.language | Language the LLM is asked to answer in. browser - the language of the user’s browser or UI locale; no instruction for English (default) none - no language instruction; the LLM usually answers in the language of the question en, ja.. - always answer in this language | browser |
| index.export.path | Index Export | /var/lib/fess/export |
| index.export.exclude.fields | Comma-separated document fields omitted from files written by the index export job. | cache,tag |
| index.export.scroll.size | Number of documents fetched per scroll request by the index export job. | 100 |
| index.export.format | Output format for exported documents; only html and json are accepted, anything else fails the job. | html |
| log.notification.flush.interval | Log Notification Interval (seconds) for flushing log notification buffer to search engine. | 30 |
| log.notification.max.details.length | Maximum length of notification details text. | 3000 |
| log.notification.max.display.events | Maximum number of events to display in notification. | 50 |
| log.notification.max.message.length | Maximum length of each log message in notification. | 200 |
| log.notification.search.size | Maximum number of events to fetch from search engine per notification job. | 1000 |
| log.notification.buffer.size | Maximum number of events to buffer in memory. | 1000 |
| log.notification.interval | Interval (seconds) for the notification job cycle, used in notification messages. | 300 |
| theme.directory.path | Static theme system (see docs/superpowers/specs/2026-05-21-fess-static-theme-design.md) | themes |
| theme.upload.max.size | Maximum size (bytes) of an uploaded theme archive. | 52428800 |
| theme.upload.max.extracted.size | Maximum total extracted size (bytes); extraction aborts once it is exceeded. | 209715200 |
| theme.upload.max.entries | Maximum number of entries allowed in an uploaded theme archive. | 1000 |
| theme.upload.max.compression.ratio | Maximum uncompressed/compressed ratio for a single theme archive entry. | 100 |
| theme.upload.zip.ratio.max | Maximum cumulative uncompressed/compressed ratio for the whole archive (zip-bomb guard). | 50 |
| theme.upload.zip.ratio.check.threshold.bytes | Compressed bytes read before the cumulative zip ratio check applies; smaller archives skip it. | 65536 |
| theme.upload.attic.retention.days | Retention (days) for a replaced theme directory before the cleanup sweep removes it. | 7 |
| theme.repositories | Repository URLs (comma separated) that static themes are downloaded from. | https://maven.codelibs.org/release/org/codelibs/fess/themes/ |
| theme.index.frame.ancestors | Value of the frame-ancestors directive in the Content-Security-Policy of the static theme’s HTML pages: the origins that may embed them in a frame. The default ‘none’ lets no page embed them. WebKit (Safari) applies frame-ancestors to the blob: frames that the file preview and the cache view of a theme use, so it shows them blank while the value is ‘none’. Leave the value empty to drop the directive; X-Frame-Options: DENY is sent either way and then keeps the pages out of frames in every browser (a browser that honors frame-ancestors ignores that header). | 'none' |
| theme.api.csrf.server.origins | Optional: canonical external origin(s) of this Fess instance (comma/newline separated), e.g. https://fess.example.com. When set, these are treated as same-origin for the v2 CSRF Origin check WITHOUT trusting forwarded headers. Recommended behind reverse proxies that are not listed in rate.limit.trusted.proxies. When empty, the target origin is reconstructed from trusted-proxy X-Forwarded-* headers, then from the servlet request. | (empty) |
| theme.api.login.rate.limit.per.ip.per.minute | Login attempts allowed per client IP each minute; 0 or less disables the gate. | 10 |
| theme.api.login.rate.limit.per.user.per.minute | Login attempts allowed per client IP and user name each minute; also gates password change. | 5 |
| theme.api.login.lockout.seconds | Lockout (seconds) applied once a login rate limit is exceeded; 0 or less disables the lockout. | 900 |
| theme.api.login.rate.limit.max.entries | Maximum login rate-limit buckets held in memory; idle buckets are evicted at the cap. | 100000 |
| api.chat.stream.keepalive.interval.ms | Interval between SSE keep-alive pings emitted by /api/v2/chat/stream. The ping is a comment-only line (”: keepalive\n\n”) that does not affect the event stream but defeats intermediaries (nginx default proxy_read_timeout is 60s) that drop idle connections during long LLM phases. Set <=0 to disable. Unit: milliseconds. | 15000 |