Installing
One command, run on the machine that will become your server:
curl -sSL https://virtues.com/sh | sudo sh That fetches a small shell script, which downloads the installer for your architecture, verifies its checksum, and hands it off to the installer. Ten minutes later you have a working server.
Before installing, read these two pages first:
- What to run it on for details on minimum specs and supported OS.
- Setting up inference to configure your embedding and rerank models. The installer asks for their URLs before it does anything else.
Read it before you run it
Piping a script into sudo sh deserves suspicion, so the script is
deliberately tiny and readable:
curl -sSL https://virtues.com/sh | less It does five things: checks you’re on Linux as root, resolves the newest
stable release, downloads the installer binary and its .sha256 sidecar,
verifies the hash, and executes it. If the checksum can’t be fetched or
doesn’t match, it refuses to run the binary rather than falling back on
“HTTPS is probably fine” — a missing sidecar is a packaging bug, and this
code is about to run as root.
What it needs
- Linux,
x86_64oraarch64, with systemd and root. Not macOS — the Mac app is a client that talks to a server, not a server itself. - Debian or Ubuntu, where the installer drives
aptand adds the PGDG repository if the distribution’s own packages ship an older PostgreSQL than the one Virtues needs — or Fedora, where it drivesdnfand takes PostgreSQL as shipped. - About 4 GB free on
/, andcurl. - Outbound network to
github.com(releases) andapt.postgresql.org(PostgreSQL). The installer probes both before touching anything.
Before it installs anything, it also measures the disk your record will live on and tells you, with numbers, which tier you’re on — an NVMe drive and a microSD card produce very different servers, and that difference is worth knowing up front. What to run it on has the full picture.
It checks whether ports 5432, 8000, 18181, and 18182 are already
bound — Postgres, the server itself, and the two inference endpoints. A
warning there usually means you’re reinstalling over an existing server, which
is fine.
The first question is inference
The installer asks how you want to run the two models that make your record searchable before it touches a package, a service, or a disk — so that a broken endpoint costs you a prompt rather than a half-finished install. On Virtues hardware this is pre-configured.
On yours, you either point it at endpoints you already run, or take the bundled CPU-only trial, which is deliberately labeled as slow and not a deployment.
If you choose your own endpoints, have them running before you start. Setting up inference gives the commands, the models, and
the contract those servers have to speak. To skip the prompt entirely on an
unattended install, set VIRTUES_INFERENCE (with VIRTUES_EMBED_URL) in the
environment.
Channels
The command above installs the newest stable release. To track prereleases instead:
curl -sSL https://virtues.com/sh-pre | sudo sh Or pin an exact version, stable or not:
curl -sSL https://virtues.com/sh | sudo VIRTUES_VERSION=vX.Y.Z sh The channel you install on is remembered, so later upgrades follow the same line without being asked again. See Upgrading for how a server moves between releases and how to roll one back.
After it finishes
The server comes up on port 8000, and the machine is now a Virtues server,
though note it holds nothing yet.
The next step is pairing a device (which starts the flow of your own data). Those pages will land here in Docs soon. Until then, the installer’s own output is the guide.
Troubleshooting
If anything looks wrong during CLI install, virtues doctor is the first
thing to run. It reports how inference resolved, whether both endpoints are
actually serving, and whether this server can be reached from away — each
finding with the command that diagnoses it. The CLI covers the rest. Also note that virtues --help lists everything the CLI
can do.
Updated 2026-08-28T00:00:00.000Z