From today, the source code of Alfresco Search Community is public on GitHub: Alfresco/alfresco-community-search. It is released under the GNU LGPL v3.0, the same license as the rest of Alfresco Community.
This post is an addendum to The Definitive Guide to Alfresco Search Community. The guide described a binary-only module with the source code kept private, and said the plan was to publish the code in 27.1 or later. That date came early. Everything in the guide about architecture, configuration, migration and queries is still valid. What changes is how you get the code and what you are allowed to do with it.
Status. Source code public under LGPL-3.0. The latest stable release is 5.9.0 (tag 5.9.0, October 14, 2026). Development continues on the master branch.
What changed since the guide
| Topic | The Definitive Guide said | Now |
|---|
| Source code | Private, binary only (JAR and Docker image) | Public on GitHub |
| License | Final text pending. No redistribution, no reverse engineering, no SaaS use | LGPL-3.0 |
| Version in examples | 5.7.1 | 5.9.0 is the latest stable release |
| Contributions | Not possible | Coming later, once the CLA process is ready |
The binary distribution does not change. The JAR is still in the Alfresco Nexus (alfresco-elasticsearch-batch-indexing-distribution-5.9.0.zip) and the Docker image is still alfresco/alfresco-elasticsearch-batch-indexing on Docker Hub. If you deploy from these binaries today, you do not need to do anything. Check the Supported Platforms page before you move from 5.7.1 to 5.9.0.
Why the code was private, and why it is not now
The guide explained that the module was binary only because it reused Alfresco Search Enterprise code. The published repository turns that relation around. The shared libraries now live in the Community repository, and Search Enterprise builds on top of them. Enterprise adds live indexing with ActiveMQ and Camel, and AWS IAM authentication, through extension points.
The repository has one strict layering rule: alfresco-search-opensearch-client must not depend on anything that exists only in Enterprise. This rule is what makes it possible to publish the Community code without publishing Enterprise code.
What is in the repository
| Module | Purpose |
|---|
alfresco-search-index-model | Field names, document types and schema definitions. No dependencies |
alfresco-search-opensearch-client | Connection and authentication, document model, extractors, bulk upsert, mTLS |
alfresco-search-opensearch-client-test | Testcontainers setup for Elasticsearch and Transform Core, test helpers. Test scope only |
alfresco-search-reindexing-core | Shared Spring Batch readers, processors, writers and retry settings |
alfresco-elasticsearch-batch-indexing | The Spring Boot application: scheduling, job wiring, content transform, cursor state |
alfresco-elasticsearch-batch-indexing-distribution | The Docker image and the distribution zip |
The design is the one described in the guide. The batch indexer reads nodes directly from the repository database, builds the index documents and writes them to OpenSearch or Elasticsearch in bulk. It runs on a fixed delay over a time window. There is no message broker. Text content comes from the repository through /alfresco/service/api/solr/textContent. Set alfresco.reindex.contentIndexingEnabled=false and the only dependencies left are the database and the search engine.
All artifacts are published, with sources, in the Alfresco public Maven repository under the org.alfresco group. They resolve without credentials.
Build it from source
You need JDK 17, Maven 3.9 or later, and Docker for the container-based tests.
git clone https://github.com/Alfresco/alfresco-community-search.git
cd alfresco-community-search
mvn clean install -DskipTests
To build a local Docker image, tagged local:
mvn clean install -DskipTests -P docker-image
scripts/buildDockerImagesLocal.sh
To run the indexer from source, you need a database with the Alfresco schema and an Elasticsearch or OpenSearch instance. Add Transform Core if you want full-text search.
mvn clean install -DskipTests -pl alfresco-elasticsearch-batch-indexing -am
cd alfresco-elasticsearch-batch-indexing/target
java -jar alfresco-elasticsearch-batch-indexing-*-app.jar \
--spring.datasource.url=jdbc:postgresql://localhost:5432/alfresco \
--spring.datasource.username=alfresco \
--spring.datasource.password=alfresco \
--spring.elasticsearch.uris=http://localhost:9200 \
--elasticsearch.indexName=alfresco
Configuration works as in any Spring Boot application: command-line flags, application.properties or environment variables. All the properties are in the configuration reference of the guide. The PostgreSQL driver is included. For Oracle or SQL Server, put the driver JAR in a db-drivers/ folder next to the application JAR.
Contributions
External contributions will come later. The Contributor License Agreement (CLA) process is still being set up. Until then, the repository is open to read, build and fork, but pull requests from outside Hyland are not accepted yet. A new post will announce when contributions open.
The guide lists some known limits: the archive index, unsupported query fields that are dropped without an error, and the maxGapAge behaviour. Now you can read the code behind them.
Learn more
Alfresco search has been open source for twenty years, from embedded Lucene in 2005 to Solr 6 in 2018. With this release, the OpenSearch and Elasticsearch era is open source too. Clone it, build it, and share what you find in the Alfresco forum.