Apache ManifoldCF 2.31 Released: The Java 25 Leap, Virtual Threads, and Next-Gen Core Modernization
- 1. Key Highlights at a Glance
- 2. The Java 25 Leap & Virtual Thread Concurrency
- 3. Web Stack Modernization: Jetty 12.1 Integration
- 4. Codebase Pruning: Streamlining Legacy Connectors
- 5. Logging & Startup Diagnostics Cleanup
- 6. Container-First & CI/CD Enhancements
- 7. How to Upgrade to Apache ManifoldCF 2.31
- 8. Acknowledgments & Community
1. Key Highlights at a Glance
We are thrilled to announce the official release of Apache ManifoldCF 2.31! 🚀
This release marks one of the most significant architectural milestones in the history of the Apache ManifoldCF project under issue CONNECTORS-1784 (Core Performance & Modernization: The Java 25 Leap).
With ManifoldCF 2.31, we have embraced modern Java runtime capabilities, adopting Java 25, introducing native support for Virtual Threads (Project Loom) across the crawling engine, upgrading our embedded web server stack to Jetty 12.1, pruning tens of thousands of lines of legacy code, and streamlining our Docker and CI/CD pipelines.
| Feature / Area | Upgrade / Change | Key Benefit |
|---|---|---|
| Java Baseline | Java 25 (with --enable-preview) |
Modern JVM features, updated class formats, long-term stability |
| Concurrency Engine | Virtual Threads (Project Loom) | Massively scalable concurrency with low OS thread & memory overhead |
| Embedded Web Server | Jetty 12.1 | Modern HTTP server stack, native virtual thread integration |
| Codebase Pruning | Removed Legacy Connectors (~88K lines deleted) | Leaner build, zero legacy bloat, smaller attack surface |
| Logging System | Log4j & SLF4J startup optimizations | Silenced startup warnings, package-scan deprecations fixed |
| DevOps & Testing | Docker Integration Test Suite & GitHub Workflows | Automated Docker builds, continuous container testing |
2. The Java 25 Leap & Virtual Thread Concurrency
Enterprise content integration engines spend a substantial portion of their execution lifecycle waiting on I/O operations—network latency from HTTP calls, REST endpoints, database queries, and repository API responses. In traditional architectures, each worker thread maps directly to an OS platform thread, consuming significant system memory (stack allocation) and causing expensive context switching when thousands of concurrent documents are fetched.
- CrawlerAgent & Worker Threads: Document processing workers and queue dispatchers now utilize lightweight Java 25 Virtual Threads (
Executors.newVirtualThreadPerTaskExecutor()). - AgentsDaemon: Central service management converted to virtual thread execution.
- Network & Socket Handlers:
InterruptibleSocketFactory,ThrottledFetcher, andCommonsHTTPSenderwere reworked to ensure socket read/write operations unmount virtual threads cleanly without pinning carrier threads. - Authority Servlets:
UserACLServletnow serves high-concurrency permission check requests using virtual threads.
Performance Impact: Virtual threads allow ManifoldCF to scale worker concurrency into thousands of simultaneous fetching operations per node without experiencing thread starvation or excessive memory growth.
3. Web Stack Modernization: Jetty 12.1 Integration
To support Java 25 and modern HTTP protocols, the embedded application container and test harnesses have been updated to Jetty 12.1.
- Virtual Thread Connector Engine: Jetty 12 natively supports Virtual Thread executors for handling incoming HTTP requests to the ManifoldCF UI and REST APIs.
- Updated Servlet Specs: Aligning with modern Java EE / Jakarta EE standards.
- Improved Security & Performance: Lower connection latency and better resource cleanup during connector shutdown cycles.
4. Codebase Pruning: Streamlining Legacy Connectors
Over the years, ManifoldCF accumulated legacy connectors for obsolete or proprietary systems (e.g., legacy Documentum, FileNet, and Meridio integration code) requiring legacy third-party SDKs that are no longer available in public repositories.
In 2.31, we conducted a major cleanup, removing over 88,000 lines of unmaintained legacy code:
- Removed: Legacy Documentum, FileNet, and Meridio connector modules.
- Result: Faster build times with Apache Ant and Apache Maven, simplified dependency graph, reduced CVE risks, and a smaller Docker image footprint.
5. Logging & Startup Diagnostics Cleanup
Starting up enterprise daemons should produce clean, predictable log output. In 2.31, we addressed two persistent logging friction points:
- Log4j Package Scanning: Resolved deprecation warnings regarding package scanning in Log4j configuration (
logging.xml). - SLF4J Provider Selection: Fixed missing SLF4J provider warnings at startup across single-process, multi-process, and Docker environments.
6. Container-First & CI/CD Enhancements
With ManifoldCF increasingly deployed in modern Cloud Native environments (Kubernetes, AWS ECS, OpenShift), release 2.31 upgrades our infrastructure stack:
- Official Java 25 Dockerfile: Updated base images to Java 25 runtimes.
- Automated Docker Integration Tests: Added
docker-integration-testmodule and GitHub Workflows to validate end-to-end containerized deployments automatically on every pull request and release build. - Maven & Release Workflows: Streamlined GitHub Actions for generating Release Candidates and publishing artifacts to Maven Central.
7. How to Upgrade to Apache ManifoldCF 2.31
Prerequisites: OpenJDK 25 or higher (with --enable-preview flag passed to JVM).
Ant Build & Execution:
Docker Quickstart:
8. Acknowledgments & Community
This release was made possible by the dedicated work of the Apache ManifoldCF PMC and community contributors. Special thanks to all developers, testers, and users who provided feedback during the 2.31 development cycle!
- Website: https://manifoldcf.apache.org/
- GitHub Repository: https://github.com/apache/manifoldcf
- Issue Tracker: Apache JIRA (CONNECTORS)
- Mailing Lists:
dev@manifoldcf.apache.org/user@manifoldcf.apache.org

