Setup
Prerequisites
Before you begin, ensure you have the following installed on your system:
- Node.js (v22+)
- Docker (v4.39.0 or higher)
Developer Setup
The Arranger repository ships everything needed for local development: a docker-compose.yml defining a search engine, make targets to drive it, and a script that seeds test documents. No other repository is required.
Setting up supporting services
-
Clone Arranger and navigate to its directory:
git clone https://github.com/overture-stack/arranger.gitcd arranger -
Start Elasticsearch:
make start-es -
Seed it with test documents:
make seed-esClick here for a detailed breakdown
make start-esbrings up theelasticsearchservice from the repository'sdocker-compose.yml, andmake seed-esloads the mock documents underdocker/elasticsearch/documentsinto thefile_centric_1.0index.Service Port Description Purpose in Arranger Development Elasticsearch 9200,9300Distributed search and analytics engine Provides fast and scalable search capabilities over indexed data The cluster runs with authentication enabled (
xpack.security.enabled: "true"). The Makefile defines the credentials it uses and passes them through to Docker Compose:Variable Value ES_USERelasticES_PASSunsafePassword123ES_HOSThttp://localhost:9200Override them by exporting different values before running
make, or with an.env.testingfile at the repository root, which the Makefile includes when present.Two further targets bring up more of the stack, and are useful when you want a containerized server rather than one running on your host:
Command Services started make start-esElasticsearch only make start-serverThe Arranger server only ( 5050)make startElasticsearch, Kibana ( 5601), the server (5050), and a Stage UI (3000)Supported search enginesArranger supports OpenSearch 1.x or higher and Elasticsearch 7.x (minimum 7.0, licensed/default distribution only; ES OSS and ES 8.x are not supported; the bundled client is
@elastic/elasticsearchv7). OpenSearch maintains API compatibility with ES 7.x, so query syntax and conventions apply to both engines. Note thatdocker-compose.ymldefines an Elasticsearch service only, so a local OpenSearch cluster has to be supplied separately.- Ensure these ports are free on your system before starting the environment.
- You may need to adjust the ports in
docker-compose.ymlif you have conflicts with existing services. make psshows what is running;make cleantears the stack down and removes its volumes.
Running the Arranger-Server
-
Copy the search server's environment schema into place:
cp apps/search-server/.env.schema apps/search-server/.envinfoThe server loads its
.envfrom its own workspace directory, so the file must be atapps/search-server/.envrather than the repository root. A minimal configuration matching the Elasticsearch instance started above looks like this:# ==============================# Arranger Environment Variables# ==============================# ServerSERVER_PORT=5050ENABLE_LOGS=false# Search engine connectionES_HOST=http://localhost:9200ES_USER=elasticES_PASS=unsafePassword123# Catalogue configurationCONFIGS_PATH=../../docker/serverClick here for a detailed explanation of Arranger's environment variables
Server
SERVER_PORT: The port the search server listens onENABLE_LOGS: Determines whether logging is enabled
Search engine connection
ES_HOST: The URL of your Elasticsearch or OpenSearch instance. Uselocalhostwhen the server runs on your host and the cluster runs in Docker; the container hostnameelasticsearchonly resolves from inside the Compose network.ES_USERandES_PASS: The credentials for accessing the cluster, matching the values the Makefile passes to Docker ComposeSEARCH_ENGINE: Eitherelasticsearchoropensearch. Leave it unset to auto-detect from the cluster.
Catalogue configuration
CONFIGS_PATH: Directory holding the per-catalogue JSON config files, resolved relative to the server's workspace directory. The repository's example catalogue lives atdocker/server, hence../../docker/server. Itsbase.jsonsetsindextofile_centric_1.0anddocumentTypetofile, matching the datamake seed-esloads.ES_INDEXandDOCUMENT_TYPEare required, but are normally set per catalogue inbase.jsonas above. Per-catalogue file values always take precedence over these environment defaults.
The schema file lists the remaining variables, including feature flags, GraphQL security limits, and download settings.
-
Install the required npm packages:
npm install# If a standard install fails in your environment, a fallback script is available: `npm run install:memory-safe`.warningPython version 3.10.15 or lower is required. Python 3.12 is not supported yet.
-
Run the Arranger server:
npm run dev:servertipnpm run dev:serverruns the server in watch mode, rebuildingsqon,types, andgraphql-routeras you change them. To run the built server instead, usenpm run server.
Once the server starts, you can access Arranger-Server at http://localhost:5050/graphql.
Running the Arranger Components
We are currently working on updating our development environment for Arranger Components. Documentation for implementing them, including their development setup and Storybook integration, will be available here in the near future.
Search engine permissions
When connecting Arranger to a secured OpenSearch or Elasticsearch cluster, the search engine user must have specific permissions for startup (alias resolution, mapping fetch), per-query search, and optionally Sets and auto-detection.
For a full reference covering every API call Arranger makes, the transport action required, the minimum grant, and the rationale for non-obvious requirements (such as why indices:admin/aliases/get must be on * rather than the data index pattern), see the search engine integration guide.
Troubleshooting
If you encounter any issues during setup:
-
Ensure all prerequisites are correctly installed and at the specified versions.
-
Check that all services in the Docker Compose setup are running correctly.
-
Verify that your
.envfile contains the correct configuration. -
If you're having network issues, ensure that the ports specified in the configuration are not being used by other services.
Need Help?If you encounter any issues or have questions about our API, please don't hesitate to reach out through our support page or our discussion forum.