WIP - Policies and Reasoning
Frontend
Languages
Policy: One of Specified Versions
Reasoning: Adopting new versions of these technologies may have substantial impact on shared community tooling or hosting providers
Chosen Technologies:
- JavaScript
- TypeScript
Build Tools
Policy: One of Specified versions
Reasoning: Adopting new versions of these technologies may have substantial impact on shared community tooling or hosting providers
Chosen Technologies:
- Node 18
- Yarn 1
First Party Libraries / Frameworks
Policy: One of Specified versions
Reasoning: The FOLIO community has previously adopted the policy that first party technologies must be synchronised across all modules within the system for easier support
Notes: These versions are often only decided upon in the latter states of the flower release process and may be subject to change even after this document is accepted
Chosen Technologies:
- Stripes ^9.0.0
Shared Third Party Libraries / Frameworks
Policy: One of Specified versions
Reasoning: These technologies are fundamental to the operation of FOLIO. Modules supporting incompatible versions would lead to an non-operational system
Chosen Technologies:
- React ^18.2
During Build Automated Testing
Policy: Unspecified versions
Reasoning: These technologies are only used for automated testing within the module. It is reasonable for the versions to vary between modules as the choice does not affect other modules or centralised community tooling
Chosen Technologies:
- Jest
- should be ^29
- RTL
- should be ^14
Post Build Integration Testing
Policy: ??
Reasoning: ??
Chosen Technologies:
- Cypress ^9.1.1
Backend
Languages
Policy: One of Specified Versions
Reasoning: Adopting new versions of these technologies may have substantial impact on shared community tooling or hosting providers
Chosen Technologies:
- Java 17 / JDK 17
- Groovy 2
- OpenAPI (OAS) 3
Build Tools
Policy: One of Specified versions
Reasoning: Adopting new versions of these technologies may have substantial impact on shared community tooling or hosting providers
Chosen Technologies:
- Maven 3.8 or later
- Docker
- Gradle
First Party Libraries / Frameworks
Policy: One of Specified versions
Reasoning: The FOLIO community has previously adopted the policy that first party technologies must be synchronised across all modules within the system for easier support
Notes: These versions are often only decided upon in the latter states of the flower release process and may be subject to change even after this document is accepted
Chosen Technologies:
- folio-spring-base 7.4
- folio-vertx-lib 3.2
- raml-module-builder 35
- deprecated. Only existing FOLIO modules may continue to use raml-module-builder
- edge-common 4
- edge-common-spring 2
Third Party Libraries / Frameworks
Policy: Unspecified versions
Reasoning: These technologies are only used within a module. It is reasonable for the versions to vary between modules as the choice does not affect other modules or centralised community tooling
Chosen Technologies:
- Spring Boot
- 3.3 or later recommended (OSS support until 2025-05)
- Spring Framework
- 6.1 or later recommended (OSS support until 2025-08-31)
- Grails
- vertx
- Lombok
- AWS SDK for Java
- version 2 recommended as version 1 will will enter maintenance mode on July 31, 2024, and reach end-of-support on December 31, 2025
During Build Automated Testing
Policy: Unspecified versions
Reasoning: These technologies are only used for automated testing within the module. It is reasonable for the versions to vary between modules as the choice does not affect other modules or centralised community tooling
Chosen Technologies:
- JUnit
- 5 should be used, 4 (is in maintenance mode) may be used, however JUnit 5 vintage is preferred
- rest-assured
- testcontainers
Post Build Integration Testing
Policy: ??
Reasoning: These tests are run within a single repository, thus they must all use the same technology versions. However, I don't know if that version should be centrally controlled
Chosen Technologies:
- karate
- cucumber-reporting
Infrastructure
Policy: All of Specified Versions
Reasoning: These technologies are fundamental to the operation of FOLIO. Modules supporting incompatible versions would lead to an non-operational system. It may be necessary for modules to support multiple versions in the same module version e.g. in order to ease transition between infrastructure technology versions during system upgrades
Chosen Technologies:
- Postgresql 16
- OpenSearch 2 and Elasticsearch 8
- OpenSearch maintenance policy
- Elasticsearch support policy, EOL dates, release history
- Kafka
- S3/MInIO
Policies
Policies should use the language described in RFC-2119
Technology Version Policies
These policies define guidance for module developers on which versions of technologies are reasonable to use by a module version targeted for a given flower release
One of Specified Versions
When one or more versions are provided for a technology, the modules must use / work with / support one (or more) of the specified versions
For example, if Java 17 and 21 are supported, a module a may choose to support either 17, 21 or both
All of Specified Versions
When one or more versions are provided for a technology, the modules must use / work with / support all of the specified versions
For example, if Postgresql 14 and 16 are supported, a module must work with both 14 and 16
Unspecified Versions
When no versions are provided for a technology, the module should use the latest supported version where possible. Optional guidance specific to the technology may be provided within the document
Support period
Technology versions must support the full Ramsons support period that ends around April 2025: Ramsons will be released in August 2024 and will be supported until Trillium (R1 2025) gets released around April 2025 (based upon assumption that future releases will follow a similar cadence to previous releases), see FOLIO support policy.