Docs
View as markdown

Security

How relate releases are signed and checked, the signing key and its fingerprint, macOS notarization, what is not published yet, and vulnerability reports.

clibolthttpmcpagents

Every relate CLI release ships a SHA256SUMS manifest signed with one Ed25519 key. install.sh and relate upgrade check that signature against a copy of the key pinned inside themselves, check that the manifest names the release being installed, check the binary's SHA-256, and install nothing if any check fails. The macOS binaries are also signed and notarized by Apple. No security policy, supported-versions statement, or vulnerability disclosure address is published yet, and no release carries a software bill of materials (SBOM) or SLSA provenance.

Synopsis

ItemStatus
Release signingOne Ed25519 key, OpenSSH signature (SSHSIG) namespace relate-release from 0.1.0, the first relate-named release (cypherlite-release up to and including 0.16.1), over each release's SHA256SUMS
Key fingerprintSHA256:BfnIA0YD0h+ldihdq8V1k/xFY91lm8mRCuVS21+3kzA
Checked byinstall.sh and relate upgrade, against a pinned copy of the key; never fetched from the release
macOS binariesSigned with an Apple Developer ID and notarized
Windows binaryNo Authenticode signature
SBOMNone published
SLSA provenanceNone published
Supported versions and security-fix policyNone published
Vulnerability disclosure addressNone yet; to be published at launch

Release signing key

ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHgv/GHY5mtv/HopH/J/T7KrTT7eOVFEG2ueT4iRKwbK relate-release
Where the key isForm
https://relatedb.ai/install.shThe SIGNING_KEY line
The relate binaryCompiled in; relate upgrade checks against it
distribution/release-signing-key.pub in github.com/relatedb/relateThe public key file; the repository is public at launch
A standalone key file at a relatedb.ai URLNot published yet

All three copies are the same bytes. Its fingerprint, computed from the key:

echo 'ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHgv/GHY5mtv/HopH/J/T7KrTT7eOVFEG2ueT4iRKwbK relate-release' > release-signing-key.pub
ssh-keygen -lf release-signing-key.pub
256 SHA256:BfnIA0YD0h+ldihdq8V1k/xFY91lm8mRCuVS21+3kzA relate-release (ED25519)

The signer identity and the signature namespace are both relate-release, from 0.1.0, the first relate-named release, on. Releases up to and including 0.16.1 were published under the earlier name, as cypherlite-<os>-<arch>, signed with the same key under the identity and namespace cypherlite-release, with the manifest header # cypherlite-release-version: . A new key ships inside a release. A binary installed before a key change still trusts the old key, so its relate upgrade refuses releases signed with the new one; install.sh, which carries the new key, installs them.

What install.sh and relate upgrade check

install.sh downloads SHA256SUMS and SHA256SUMS.sig first and makes the first two checks before it downloads the binary. It installs by writing a temporary file in ~/.local/bin and renaming it into place, so an interrupted install leaves no partial binary.

CheckWhat it provesOn failure, install.sh prints
The SSHSIG signature on SHA256SUMS, against the pinned key, identity and namespace relate-releaseThe manifest came from the release keyinstall.sh: SHA256SUMS signature verification failed for <tag>; installing nothing
The manifest's first line, # relate-release-version: v<version>, equals the tag being installed: the latest release for install.sh, the release relate upgrade read from releases.jsonA validly signed manifest of another release cannot be replayed; the line is inside the signed bytesinstall.sh: SHA256SUMS is for <version>, not the requested release <tag>; installing nothing
The binary's SHA-256 equals its line in the manifestThe binary is the one the manifest listsinstall.sh: checksum verification failed for <asset>; installing nothing

A manifest with no version line is accepted, with a warning, only for releases up to v0.14.0, which predate the line. install.sh compares version numbers alone, and relate restarted them at 0.1.0, so the rule also covers relate 0.1.0 to 0.14.0; every relate release so far carries the line.

Manual verification

The same three checks run by hand with curl, ssh-keygen, and sha256sum. For a release on Linux amd64, from 0.1.0 on, with VERSION holding the release's version number (without the v), the commands and their expected output are:

ASSET=relate-linux-amd64
BASE="https://github.com/relatedb/relate/releases/download/v$VERSION"
curl -sSfLO "$BASE/$ASSET"
curl -sSfLO "$BASE/SHA256SUMS"
curl -sSfLO "$BASE/SHA256SUMS.sig"
echo 'relate-release ssh-ed25519 AAAAC3NzaC1lZDI1NTE5AAAAIHgv/GHY5mtv/HopH/J/T7KrTT7eOVFEG2ueT4iRKwbK relate-release' > allowed_signers
ssh-keygen -Y verify -f allowed_signers -I relate-release -n relate-release -s SHA256SUMS.sig < SHA256SUMS
head -n 1 SHA256SUMS
grep "  $ASSET\$" SHA256SUMS | sha256sum -c -
Good "relate-release" signature for relate-release with ED25519 key SHA256:BfnIA0YD0h+ldihdq8V1k/xFY91lm8mRCuVS21+3kzA
# relate-release-version: v<version>
relate-linux-amd64: OK

In the output, <version> is that version number. The other assets are relate-linux-arm64, relate-darwin-arm64, relate-darwin-amd64, and relate-windows-amd64.exe. On macOS, shasum -a 256 -c - takes the place of sha256sum -c -. The Pinned binary tab of Install relate gives the same steps with the install that follows them. The release URLs are launch-day targets: the repository is private until launch. The checks for a release up to and including 0.16.1 use that release's names instead: the cypherlite-<os>-<arch> asset, cypherlite-release as the identity, the namespace and the allowed_signers principal, and # cypherlite-release-version: as the header.

Code signing and notarization

ArtifactSignature beyond SHA256SUMS
macOS CLI binariesSigned with an Apple Developer ID Application identity, with the hardened runtime and a secure timestamp, then notarized by Apple. A bare binary cannot carry a stapled ticket, so Gatekeeper checks the notarization online the first time the binary runs.
Linux CLI binariesNone
Windows CLI binaryNone; the release workflow has no Authenticode step
C libraries (relate-ffi-<target>.tar.gz; cypherlite-ffi-<target>.tar.gz up to and including 0.16.1) and Python wheelsNone
Java jarsNone on the release assets; the Maven Central publish, not enabled yet, signs with a GPG key
Swift packageSwiftPM checks the release's RelateFFI.xcframework.zip (CypherLiteFFI.xcframework.zip up to and including 0.16.1) against the checksum in the tagged Package.swift
npm packagesTo be published with npm provenance through trusted publishing; none is published yet

SHA256SUMS lists the five CLI binaries only. The other artifacts are not in it.

Provenance and software bill of materials

No release publishes a software bill of materials (SBOM), and no release publishes a build provenance attestation in the SLSA format. The release workflow has no step that produces either.

Supported versions and security fixes

No supported-versions statement and no security-fix policy is published. Releases are cut forward from the main branch, and the release process describes no way of patching an older release line. relate is pre-1.0; Project gives the versioning policy.

Reporting a vulnerability

No address for reporting a vulnerability exists yet. It is to be published at launch, together with https://relatedb.ai/.well-known/security.txt, which the site builds once a security contact is recorded. Until then the relate repositories are private, so there is no public issue tracker either.

Served surfaces

relate serve hosts the HTTP Query API The JSON-over-HTTP statement endpoint relate serve --http <port> hosts, in the shape of Neo4j's Query API v2: POST /db/<name>/query/v2. Read more in the glossary, MCP The Model Context Protocol, which agent hosts use to call tools; relate serve --mcp exposes a store as read_cypher, get_schema and write_cypher. Read more in the glossary, and Bolt Neo4j's binary client protocol; relate serve --bolt <port> speaks it, so Neo4j's drivers and Neo4j Browser can run statements against a relate store. Read more in the glossary on one open store A relate database: a directory, a single .rl file, or :memory:, opened with --database. Read more in the glossary. Its defaults:

SettingDefaultNotes
Bind address (--host)127.0.0.1, loopback onlyAny other host exposes every surface in plaintext and prints a warning at startup
TLSNoneNo surface has TLS
Authentication (--auth)A generated token, printed at startup and kept in <dir>.auth-token with mode 0600One Basic-auth credential for every surface; --auth none turns authentication off; no users or roles
Browser origins on HTTP (--origin)Loopback origins, https://browser.neo4j.io and https://console.neo4j.ioRepeatable; * allows any origin
Bolt-over-WebSocket origins (--ws-allow-origin)Loopback, https://browser.neo4j.io and https://console.neo4j.io; loopback only with --auth noneRepeatable; * allows any origin
WritesAllowed--read-only opens the store without writing; --safe refuses new named nodes without a label and unbounded reads
Sessions (--max-connections)128, across every surfaceA connection over the cap is accepted, then closed

--mcp stdio serves MCP on stdin and stdout for an MCP host, with no authentication challenge. A host configuration that opens a store --read-only keeps an agent from writing to it; the agent safety guide has the permission matrix across the CLI and MCP.

Engine defaults that limit reach

BehaviorDefault
LOAD CSV from local filesDenied unless --load-csv-dir <dir> (or RELATE_LOAD_CSV_DIR) names a directory; paths that escape it, symlink escapes and special files are refused
--load <url>, --fetch-params <url>Reach only the URL given; --load keeps no copy after loading
relate upgradeReads https://relatedb.ai/releases.json and downloads release assets, checked as install.sh checks them
relate extension installFrom the default first-party channel: checks the channel's signed index against the same release key, and the package's SHA-256. With --github REPO@TAG or @SHA: checks the pinned asset's SHA-256 and the tag's commit, with no signature. With --url (https only) or --from DIR: no signature; naming the source is the trust decision
Usage metricsOn by default in the CLI only; Privacy and telemetry lists what is sent and how to turn it off

Agent-facing files on the site

FileIntegrity
/skills/relate/ (the skill bundle)Copied from the engine repository at a recorded commit, with the SHA-256 of every file recorded
/.well-known/agent-skills/index.jsonOne sha256: digest per entry, over the bytes served
/docs/docs-artifacts.jsonLists the skill and discovery files and the docs graph seed with their SHA-256; a signature with the release key, docs-artifacts.json.sig, is to be added at launch

See also