0013-Module configuration management
Start Date | Jun 1, 2026 |
End Date |
|
Contributors | @Oleksii Petrenko @Mikita Siadykh @oleksandr_haimanov (Unlicensed) @Artem Akimov @Denis @Viktor Gema @Drif Abdnour @Roman_Fedynyshyn |
Status | PRELIMINARY REVIEW |
Summary
FOLIO currently lacks a unified, standardized model for module configuration management. Configuration data is fragmented across environment variables, module descriptors, database entries, and Helm/Kubernetes manifests, with no single source of truth. This RFC proposes a governed configuration management approach that introduces a standardized CompleteConfiguration.json artifact per module, a structured review workflow, and clear ownership and classification rules for all configuration variables. The goal is to reduce operational risk, improve discoverability, and establish a repeatable process for configuration evolution across FOLIO's growing ecosystem of independently deployable modules.
Motivation
FOLIO is a modular library services platform composed of independently versioned backend and UI modules deployed across distributed infrastructure. As the ecosystem scales across institutions and hosting providers, the absence of a shared configuration standard is causing compounding problems:
Configuration is spread across multiple artifacts and locations with no single source of truth, making it impossible to quickly answer what configuration keys exist, which are required, or which are deprecated. Artifacts that might be replaces
Trillium (R1 2026) - Modules configuration details - it’s done for each release
Any notes related to configuration in Release notes (in diagram there is a future step to generate based on changes in repo)
DeploymentDescriptor
Different modules use different naming conventions, default-handling strategies, and validation approaches, resulting in unpredictable operational behavior.
Naming convention is already applied in DR-000044 - Environment Variables , at the same time modules still can have old variables that do not follow it.
Configuration drift between Dev, SprintTesting, Bugfest, and Production environments causes 'works in test but not in prod' failures.
Module upgrades lack a systematic migration strategy for configuration evolution, increasing release risk.
Onboarding new institutions and hosting providers requires disproportionate manual effort from DevOps and support teams.
The expected outcome of this RFC is a governed, discoverable, and version-aware configuration management model that reduces operational overhead, lowers release risk, and scales reliably with the FOLIO community. It directly supports the strategic goal of making FOLIO easier to operate at scale.
Scope
In Scope
Definition and format of the standardized CompleteConfiguration.json artifact stored in new repository.
Classification taxonomy for configuration variables (type, sensitivity, scope, default value rules).
Workflow.
Ownership model: responsibilities of development and Kitfox teams.
Out of Scope
Implementation of a centralized configuration registry platform (identified as a future action item, pending requirements from this RFC).
Changes to ModuleDescriptor or DeploymentDescriptor formats.
UI-level configuration management interfaces.
Secrets management and credential vaulting solutions.
Configuration management for non-FOLIO infrastructure components.
Detailed Explanation/Design
The CompleteConfiguration.json Artifact
The core of this proposal is a standardized file — CompleteConfiguration.json — placed at a root level of each module and owned by the responsible development team. It serves as the single source of truth for all module-level configuration variables, replacing the current fragmented approach where configuration is scattered across environment variables, module descriptors, tenant settings, and deployment manifests.
Default values are calibrated against a defined reference baseline of bugfest environment (currently 3 standalone tenants, and 11 consortia tenants). The format is being validated through a PoC in mod-bulk-operations, with planned extensions for Spring-style environment profiles and automated schema validation at build time.
Example
Why a New Artifact, Not an Extension of Existing Ones
The working group evaluated extending both ModuleDescriptor and DeploymentDescriptor. ModuleDescriptor was ruled out because it captures interface dependencies and permissions — mixing in deployment-specific configuration would conflate two distinct concerns. DeploymentDescriptor is fully outdated and scheduled for decommissioning. A purpose-built file avoids those constraints and can be designed purely for the operational audience: SysOps teams deploying and tuning FOLIO modules.
Workflow
The goal of workflow to ensure that teams keep configuration up-to-date and environments (Rancher - Kitfox and Bugfest - FSE) are updated, for this purpose teams need to create tickets (Kitfox should update folio-helm-2 so it can be reused by other hosting providers).
Risks and Drawbacks
Adoption overhead: requiring all module teams to create and maintain CompleteConfiguration.json adds ongoing maintenance work. Teams with limited capacity may fall behind, reducing the value of the approach if adoption is uneven.
Staleness risk: if the configuration file is not kept in sync with actual module behavior, it becomes misleading rather than helpful. Enforcement mechanisms (CI validation, release checklists) are necessary but not yet fully defined.
PTF review bottleneck: routing configuration PRs through mandatory PTF review when overriding PTF-defined values introduces a potential bottleneck, particularly during high-volume release periods.
Scope creep: the desired future state includes a centralized configuration registry, versioned migration support, and environment promotion tooling. These are valuable but complex, and deferring them (as this RFC proposes) means teams will work with the file-based approach for an indeterminate period before the full vision is realized.
Sidecar and generic parameters: the template for sidecar environment variables and generic parameters (Java memory, Kong timeouts) is still under development, meaning some coverage gaps will exist at initial rollout.
Rationale and Alternatives
Why This Design
A file-based artifact is the fastest path to a single source of truth without requiring new infrastructure. Storing CompleteConfiguration.json files in related module keeps configuration versioned alongside code, and makes it accessible to all teams without additional tooling.
The two-phase workflow mirrors FOLIO's existing operational rhythm (development, release) rather than introducing a parallel process, minimizing change management friction.
Alternatives Considered
Extending ModuleDescriptor: rejected because it conflates deployment concerns with module-internal interface and permission declarations.
Reusing DeploymentDescriptor: rejected because it is fully outdated and scheduled for decommissioning.
Centralized configuration registry (platform): desirable as a long-term goal, but requires substantial infrastructure work and specification of requirements first. This RFC establishes the requirements that would inform such a platform.
No standardization: the status quo results in ongoing operational fragility, increased cognitive load, and compounding risk as FOLIO scales. Not acting is not a viable option.
Prior Art
Spring Boot's application.properties and application.yml patterns, combined with profile-based configuration, served as inspiration for the profiling concept. The idea of a per-module configuration descriptor is also analogous to how Helm chart values.yaml files document configuration for Kubernetes deployments, a pattern familiar to the FOLIO DevOps community.
Timing
Target compliance for new modules: all modules introduced after this RFC is accepted must include a CompleteConfiguration.json at their first release.
Target compliance for existing modules: existing modules should add CompleteConfiguration.json no later than the Trillium (R1 2026) CSP#1 release cycle, prioritizing modules with the highest operational impact.
Unresolved Questions
Configuration management platform: what are the full requirements for a centralized registry? This RFC's outputs (file format, classification taxonomy, workflow) are intended to inform that specification.
Profiling mechanism: how should multiple configuration profiles (small, medium, large) be structured within CompleteConfiguration.json? The Spring-profile analogy is directional but the exact format is TBD.
Build-time validation: what schema validation tooling should be used, and at which exact CI stage should validation occur?
Who recommends configuration: for new modules or new variables with no PTF history, who provides the initial recommended values? This governance gap is open.
FSE configuration for various setups: a full FSE Configuration Management guide for various deployment setups (standalone, consortia, hosted) is in backlog.
How to track configuration changes to DevEnvs: the current guidance is that DevOps should use the provided configuration as a reference and adjust based on actual environment consumption, but no tooling supports this tracking yet.
Sidecar env vars template: the generic template for sidecar-specific environment variables is in progress but not yet finalized.
Keywords
configuration management, module configuration, environment variables, CompleteConfiguration.json, configuration review, PTF, FSE, Kitfox, release process, operational standards, FOLIO modules, feature flags, cache parameters, configuration drift, multi-tenant