Database and Third-Party Applications in Xray

Xray requires PostgreSQL 13–17.x, RabbitMQ 3.7–4.x, and Erlang 19–27.x. Quorum Queues are mandatory for RabbitMQ 4.x.

Database

Every artifact and build indexed by Xray is broken down into multiple components. These components and their interrelationships are represented in a checksum-based components graph. Xray uses PostgreSQL to store and query this component's graph.

Xray supports the following PostgreSQL versions:

Minimum PostgreSQL VersionMaximum PostgreSQL VersionXray Version
13.x17.x3.121
13.x16.x3.107
13.x15.x3.78.9
13.x14.x3.42
13.x13.x3.18
RabbitMQ

RabbitMQ is installed as part of the Xray installation for every node. In an HA architecture, Xray uses queue mirroring and replication between different RabbitMQ nodes.

The recommended installation method uses split mode with a separate 3-node RabbitMQ cluster alongside Xray HA.

JFrog has added support for RabbitMQ Quorum Queues, available as an optional parameter in system.yaml, because RabbitMQ deprecated Classic Queue mirroring in version 4.x.

JFrog will also deprecate Classic Queue support and transition to Quorum Queues. Enable Quorum Queues in Xray, as JFrog plans to fully transition to RabbitMQ 4.x and discontinue Classic Queue support in upcoming versions.

RabbitMQ VersionQuorum QueuesClassic QueuesErlang Version Compatibility
3.7.xNot supportedMustFrom 19.3 to 22.x
3.8RecommendedNot recommendedFrom 23.2 to 24.3
3.13.0+RecommendedNot recommendedFrom 26.0 to 26.2.x
4.xMustNot supportedFrom 26.2.x to 27.x

Xray encompasses multiple flows, including scanning, impact analysis, and database synchronization. Each flow requires processing by various Xray microservices and comprises multiple steps completed by those services. Xray uses RabbitMQ to manage these flows and track synchronous and asynchronous communication between microservices.

Erlang

Xray incorporates Erlang and DB-Util as third-party dependencies. These packages are bundled with all Xray installers except for the Linux Archive.

Use the correct Erlang version for your Xray version:

  • Xray 3.124.x requires Erlang 26. For more information on RabbitMQ and Erlang compatibility, see the RabbitMQ and Erlang/OTP Compatibility Matrix.
  • Xray 3.124 and later require Erlang 27 when RabbitMQ 4.x is enabled via properties.