Skip to content
ricochet

Host

Install ricochet-server on a single host from a native Linux package or a standalone binary.

DistributionArchitecturePackage format
Debian / Ubuntuamd64, arm64.deb
AlmaLinux / RHEL / ELx86_64, aarch64.rpm
Other Linuxx86_64, aarch64.tar.gz
macOSApple Silicon.tar.gz
Windowsx86_64, arm64.zip

ricochet-server packages are published to S3 buckets.

Terminal window
VERSION=$(curl -s https://ricochet.rs/releases.json | grep -o '"latest": *"[^"]*"' | grep -o 'v[0-9.]*')
ARCH=$(dpkg --print-architecture)
curl -fLO https://s3.eu-central-003.backblazeb2.com/ricochet-server/${VERSION#v}/ricochet-server_${VERSION#v}-1_${ARCH}.deb
sudo apt install ./ricochet-server_${VERSION#v}-1_${ARCH}.deb

The .deb and .rpm packages install the ricochet binary and a ricochet-server.service systemd unit.

The .rpm and .deb packages read the config file at /var/lib/ricochet/ricochet-config.toml. Create or edit this file and set up at least OIDC authentication:

/var/lib/ricochet/ricochet-config.toml
[auth.oidc]
issuer_url = "https://your-idp.example.com/"
client_id = "your-client-id"
client_secret = "your-client-secret"
redirect_url = "https://your-ricochet-host.example.com/oauth/callback"

Set strict permissions on the config file:

Terminal window
sudo chmod 0600 /var/lib/ricochet/ricochet-config.toml
sudo chown root:root /var/lib/ricochet/ricochet-config.toml
  1. Reload systemd to load the new unit file:

    Terminal window
    sudo systemctl daemon-reload
  2. Enable and start the service:

    Terminal window
    sudo systemctl enable --now ricochet-server.service
  3. Verify the service is running:

    Terminal window
    sudo systemctl status ricochet-server.service

ricochet-server listens on port 6188 by default.

The standalone binary runs either in the foreground or as a background daemon.

Complete these steps only for the standalone binary, since the .deb and .rpm packages handle them for you.

Install newuidmap and newgidmap:

Terminal window
sudo apt update
sudo apt install uidmap

Give the account that runs ricochet at least 65,536 subordinate user and group IDs. This example sets up root, the account the packaged systemd service uses. Pick an unused range if /etc/subuid or /etc/subgid already assigns 100000-165535:

Terminal window
sudo usermod --add-subuids 100000-165535 root
sudo usermod --add-subgids 100000-165535 root

On Ubuntu 23.10 and later, create and load an AppArmor profile that lets ricochet create unprivileged user namespaces:

Terminal window
sudo ricochet setup-apparmor

Check that user namespaces, subordinate ID mappings, and AppArmor are set up for the account that runs ricochet:

Terminal window
sudo ricochet check-security

By default, ricochet start runs in the foreground and prints logs to stdout and stderr:

Terminal window
ricochet start --config /path/to/ricochet-config.toml

The --config flag sets the path to your ricochet-config.toml. Without it, ricochet looks for ricochet-config.toml in the current working directory, so always pass an explicit path.

The .rpm and .deb packages run ricochet through systemd, and they are the better choice for production. With the standalone binary, pass --daemon to keep ricochet running in the background after your terminal or SSH session ends:

Terminal window
ricochet start --config /path/to/ricochet-config.toml --daemon

As a daemon, ricochet writes these files under RICOCHET_HOME:

FilePurpose
ricochet.pidProcess ID of the running daemon
ricochet.stdoutStandard output from the process
ricochet.errStandard error from the process

ricochet.stdout and ricochet.err hold raw output, such as startup errors, panics, and anything printed before logging starts. For structured log files, configure [logs] in your ricochet-config.toml as described in File Logging.

Use ricochet stop to shut down a daemon cleanly:

Terminal window
ricochet stop --config /path/to/ricochet-config.toml

Pass ricochet stop the same --config path you gave ricochet start, so it finds the right ricochet.pid file.

To upgrade, download the new package and install it over the old one.

Terminal window
VERSION=$(curl -s https://ricochet.rs/releases.json | grep -o '"latest": *"[^"]*"' | grep -o 'v[0-9.]*')
ARCH=$(dpkg --print-architecture)
curl -fLO https://s3.eu-central-003.backblazeb2.com/ricochet-server/${VERSION#v}/ricochet-server_${VERSION#v}-1_${ARCH}.deb
sudo apt install ./ricochet-server_${VERSION#v}-1_${ARCH}.deb
sudo systemctl restart ricochet-server.service

On macOS, ricochet-server is a standalone binary for Apple Silicon only, with no Intel support.

Download and install the latest release:

Terminal window
VERSION=$(curl -s https://ricochet.rs/releases.json | grep -o '"latest": *"[^"]*"' | grep -o 'v[0-9.]*')
curl -fLO https://s3.eu-central-003.backblazeb2.com/ricochet-server/${VERSION#v}/ricochet-${VERSION#v}-aarch64-macos.tar.gz
tar -xzf ricochet-${VERSION#v}-aarch64-macos.tar.gz
chmod +x ricochet-server
sudo mv ricochet-server /usr/local/bin/ricochet-server

Keep the ricochet-server name so the server does not shadow the ricochet CLI, which often lives on the same machine.

Create a config file as described in Configure, set home to an absolute writable path, and start the server in the foreground:

Terminal window
ricochet-server start --config /path/to/ricochet-config.toml

The macOS binary ships without a service definition or vendored language tools. Install uv, juliaup, and renv yourself when you need those runtimes.

On Windows, ricochet-server is a standalone executable for x86_64 and arm64. Run these commands in PowerShell, and replace x86_64 with aarch64 on arm64:

Terminal window
$Version = (Invoke-RestMethod https://ricochet.rs/releases.json).latest.TrimStart("v")
Invoke-WebRequest "https://s3.eu-central-003.backblazeb2.com/ricochet-server/$Version/ricochet-$Version-x86_64-windows.zip" -OutFile "ricochet-$Version-x86_64-windows.zip"
Expand-Archive "ricochet-$Version-x86_64-windows.zip" -DestinationPath . -Force
New-Item -ItemType Directory -Force "$env:LOCALAPPDATA\Programs\Ricochet" | Out-Null
Move-Item .\ricochet-server.exe "$env:LOCALAPPDATA\Programs\Ricochet\ricochet-server.exe" -Force

Keep the ricochet-server.exe name so the server does not shadow the ricochet CLI, which often lives on the same machine.

Add %LOCALAPPDATA%\Programs\Ricochet to your user PATH, then create a config file as described in Configure. Set home to an absolute writable Windows path, and start the server in the foreground:

Terminal window
ricochet-server start --config C:\path\to\ricochet-config.toml

Windows does not support ricochet-server start --daemon or ricochet-server stop. Stop the foreground server with Ctrl+C, or run it under a Windows service manager. The Windows binary ships without vendored language tools.

Ricochet runs without any interpreters, but to deploy R, Python, or Julia content you must install that interpreter on the host. Container and Kubernetes deployments bundle their own interpreters and skip this step.

The .deb and .rpm packages bundle these tools, so ricochet manages language environments without system-wide versions:

ToolVendor pathPurpose
uvRICOCHET_HOME/vendor/py/uvPython package management, running Python content, and Python version discovery
juliaupRICOCHET_HOME/vendor/jl/juliaupManaging Julia environments and Julia version discovery
renvRICOCHET_HOME/vendor/r/renvR package environment restoration

With the systemd service, RICOCHET_HOME defaults to /var/lib/ricochet/data. See the storage configuration for details.

For Python content, Ricochet finds the Python installs on the host. Install Python with uv to manage multiple Python versions.

Terminal window
uv python install <version>

Install R with rig:

Terminal window
rig add <version>

You can also install R from CRAN or your distribution’s package manager. For many R versions side by side, rig is the most flexible option.

For Julia content, Ricochet uses juliaup to find installed Julia channels. Julia must be installed with juliaup, since other installs are not supported.

Terminal window
juliaup add <version>

If you use Ansible, the devxy.data_science_core collection has roles that install R, Python, and their system dependencies:

Terminal window
ansible-galaxy collection install devxy.data_science_core
roles:
- role: devxy.data_science_core.r
- role: devxy.data_science_core.python

The interpreters may need extra system libraries to compile packages at runtime. Install this recommended baseline:

Terminal window
sudo apt install \
libgit2-dev libxml2-dev libharfbuzz-dev libfreetype-dev libfontconfig-dev \
libgdal-dev libproj-dev libgeos-dev libjq-dev libmagick++-dev \
libnetcdf-dev libfribidi-dev jags libglpk-dev libpng-dev \
libsecret-1-dev poppler-utils libreadline-dev unixodbc-dev \
default-jdk-headless libicu-dev libudunits2-dev libsodium-dev \
zlib1g-dev libglu1-mesa-dev libcairo2-dev git freetds-common \
libv8-dev librsvg2-dev libsqlite3-dev libpq-dev libgmp3-dev libmpfr-dev
Terminal window
sudo systemctl stop ricochet-server.service
sudo systemctl disable ricochet-server.service
sudo apt purge ricochet-server

Uninstalling keeps the config file at /var/lib/ricochet/ricochet-config.toml. Delete it by hand if you no longer need it.