Install
Single binary

Quick start

Download the relic binary and run it as a service (systemd on Linux, launchd on macOS) with SQLite and a local directory.

Download

The install script downloads the latest release for Linux or macOS (amd64, arm64), checks its SHA-256 sums and puts relic in ~/.local/bin and this machine's relic-indexer build in ~/.local/share/relic/indexer:

curl -fsSL https://relic.build/install.sh | sh

RELIC_VERSION pins a release (v0.2.0-beta.4, or 0.2.0-beta.4) and RELIC_INSTALL_DIR changes the directory; the build then goes to share/relic/indexer beside it. The script stops before downloading when the release does not exist or it cannot write to the directory:

curl -fsSL https://relic.build/install.sh | sudo env RELIC_VERSION=v0.2.0-beta.4 RELIC_INSTALL_DIR=/usr/local/bin sh

A Relic server also serves the script at /install.sh. The command on the server's landing page sets RELIC_VERSION to the server's release. The script downloads the binary from GitHub in both cases, so the machine needs access to github.com.

Each release on GitHub (github.com/relicbuild/relic/releases) has archives for Linux, macOS and Windows, relic-indexer builds, an SBOM per archive and build, and relic_<tag>_checksums.txt with its cosign signature. To install by hand, pick the release:

v=v0.2.0-beta.4

Download the archive and the checksum files:

gh release download "$v" --repo relicbuild/relic -p "relic_${v}_linux_amd64.tar.gz" -p "relic_${v}_checksums.txt*"

Check the signature of the sums with cosign 2.5.0 or later (optional):

cosign verify-blob "relic_${v}_checksums.txt" --bundle "relic_${v}_checksums.txt.sigstore.json" --certificate-oidc-issuer https://token.actions.githubusercontent.com --certificate-identity-regexp '^https://github.com/relicbuild/relic/'

Check the archive against the sums:

sha256sum -c --ignore-missing "relic_${v}_checksums.txt"

Unpack the archive:

tar -xzf "relic_${v}_linux_amd64.tar.gz"

Install relic in ~/.local/bin:

install "relic_${v}_linux_amd64/relic" ~/.local/bin/

Check the installed version:

relic --version

Run as a service

relic server setup installs Relic as a service (systemd on Linux, launchd on macOS) with SQLite and a local directory. It lists what it will change and asks first; running it again changes nothing. The server serves HTTPS on 127.0.0.1:8090 with a certificate authority it generates (TLS). --listen 0.0.0.0:8090 opens it to the network; clients on other machines then need the authority's ca.crt, and the name they use must be in RELIC_TLS_HOSTNAMES. See Machine setup for every option.

User service

Runs as your user, with no root access needed. Set it up:

relic server setup
WhatWhere
Settings, with a generated RELIC_ENCRYPTION_KEY and admin password~/.config/relic/server.env
Database and files~/.local/share/relic
Certificate authority and server certificate~/.config/relic/tls

On Linux, the service keeps running after logout and starts at boot. On macOS, it is a launch agent that runs while you are logged in. Setup also adds shell completion.

Read the generated admin password:

grep RELIC_ADMIN_PASSWORD ~/.config/relic/server.env

On this machine, relic commands need no sign-in when you run them: the CLI reads the address, admin password and certificate authority from the settings file (details). This stops working once the admin password is changed. Sign in to save a context, which relic package setup needs to hand out a token. The CLI shows the fingerprint of the server's certificate authority and asks whether to trust it; compare it with the one in the server's log, or pass --ca-file ~/.config/relic/tls/ca.crt:

relic auth login https://127.0.0.1:8090 --user admin

Check the service:

systemctl --user status relic

Follow the server's logs:

journalctl --user -u relic -f

On macOS, check the launch agent:

launchctl print gui/$(id -u)/build.relic.server

Follow its log:

tail -f ~/Library/Logs/relic.log

System service

Linux only. Runs as a relic system user and starts at boot. Set it up as root:

sudo relic server setup --system
WhatWhere
Binary (copied there)/usr/local/bin/relic
relic-indexer builds installed beside the binary (copied there)/usr/local/share/relic/indexer
Settings, with a generated RELIC_ENCRYPTION_KEY and admin password, readable by the relic group/etc/relic/relic.env
Database and files, owned by relic/var/lib/relic
Certificate authority and server certificate/etc/relic/tls
systemd unit/etc/systemd/system/relic.service

Setup also adds bash completion for every user.

Read the generated admin password:

sudo grep RELIC_ADMIN_PASSWORD /etc/relic/relic.env

On this machine, relic commands need no sign-in when root and members of the relic group run them: the CLI reads the address, admin password and certificate authority from the settings file (details). This stops working once the admin password is changed. Sign in to save a context, which relic package setup needs to hand out a token. The CLI shows the fingerprint of the server's certificate authority and asks whether to trust it; compare it with the one in the server's log, or pass --ca-file /etc/relic/tls/ca.crt:

relic auth login https://127.0.0.1:8090 --user admin

Check the service:

systemctl status relic

Follow the server's logs:

sudo journalctl -u relic -f

Run by hand

On Windows, or to run the server in the foreground, set the database, the content directory, the admin password and the encryption key yourself.

Create the data directory:

mkdir -p ~/relic-data

Generate the encryption key once and back it up:

openssl rand -base64 32

Set the settings:

export RELIC_DATABASE_URL="sqlite://$HOME/relic-data/relic.db"
export RELIC_OBJECT_STORAGE_TYPE=filesystem
export RELIC_OBJECT_STORAGE_PATH="$HOME/relic-data/objects"
export RELIC_ADMIN_PASSWORD='<password>'
export RELIC_ENCRYPTION_KEY='<key>'

In PowerShell, use $env:NAME = 'value'; the database URL is sqlite:// and the absolute path, such as sqlite://C:/relic-data/relic.db.

Start the server and the worker in one process:

relic server start --worker

The server serves HTTPS on port 8090, keeps its certificate authority in ~/.config/relic/tls and logs the path of ca.crt (TLS).

SQLite or the filesystem store each limit the installation to one node; either combines with PostgreSQL or S3 (Configuration).

Scanners

Relic Scan runs syft and grype, and optionally gitleaks and trivy, from the PATH. Install them yourself, or use the Docker image. Without syft and grype, scanning is off, and client scans such as jf scan and jf audit fail at once with 424 Failed Dependency.

Local scans with the JFrog® CLI

jf scan and jf docker scan download relic-indexer from the server and run it on the client. The server looks for its builds in share/relic/indexer beside the binary's directory. The install script puts this machine's build there, so clients on the same platform work without further setup; others get 404 Not Found.

Install the builds of the platforms your clients use, here Linux on amd64 and macOS on arm64 (each is about 80 MB):

curl -fsSL https://relic.build/install.sh | env RELIC_INDEXER_PLATFORMS="linux/amd64 darwin/arm64" sh

Install only the relic CLI, on a machine that runs no server:

curl -fsSL https://relic.build/install.sh | env RELIC_INDEXER_PLATFORMS= sh

RELIC_INDEXER_DIR puts the builds in another directory; the server needs the same setting:

RELIC_INDEXER_DIR=/var/lib/relic/indexer

Next: Limits and backups.