Development¶
Building Relay requires Node.js 24 or newer and Go 1.26.6 or newer, as declared by package.json and go.mod on reviewed master 84aafb20.
git clone https://git.thc420.dev/ouch/relay.git
cd relay
npm ci
npm run build:client
go build -o relay ./cmd/relay
RELAY_DEV_HOME="$(mktemp -d /tmp/relay-dev.XXXXXX)"
RELAY_HOME="$RELAY_DEV_HOME" ./relay start -c host=127.0.0.1
Run from the repository root: the server serves the generated public/ directory, which is not embedded in the Go binary. Build the client before opening Relay; deploy public/ alongside the binary with the expected working directory. Current master's npm run build:client checks generated Prism loaders and builds both the main client and paste viewer; it does not regenerate tracked source.
The running server does not require Node.js. relay migrate-config needs Node and the dumper script to evaluate legacy config.js, unless given a pre-generated --dump.
Development loop¶
After the initial npm ci and npm run build:client, run these from the repository root in separate terminals. Use a temporary RELAY_HOME for the server to avoid connecting existing accounts:
npm run watch
RELAY_DEV_HOME="$(mktemp -d /tmp/relay-dev.XXXXXX)"
RELAY_HOME="$RELAY_DEV_HOME" go run ./cmd/relay start --dev -c host=127.0.0.1
The --dev flag relaxes the content security policy for local client builds. Restart the Go process after server-side changes.
For an isolated instance:
RELAY_DEV_HOME="$(mktemp -d /tmp/relay-dev.XXXXXX)"
npm run build:client
RELAY_HOME="$RELAY_DEV_HOME" go run ./cmd/relay start --dev -c host=127.0.0.1
Checks¶
On current master, follow the upstream contribution guide:
sh scripts/verify.sh frontendchecks generated source, lint, types, coverage, and production clients.sh scripts/verify.sh backendruns application Go build, tests, and vet; PostgreSQL tests skip visibly without a test DSN.- Add
sh scripts/verify.sh storagefor storage/provider changes. sh scripts/verify.sh fullrequires a dedicated disposable PostgreSQL database configured throughRELAY_TEST_POSTGRES_DSN.
Use npm test for focused iteration (lint, types, and Vitest, without coverage).
Do not use bare Go ./..., which can include unrelated npm dependency packages.
Do not run database tests against production data. Older release branches may use
different commands; follow their branch-local contribution instructions.
Teapot endpoint (newer master)¶
Master after 0.11.5 exposes /pot-0 and its /coffee alias on the existing
HTTP listener in private and public mode. A BREW request receives HTTP 418;
ordinary browser requests can open the animated teapot page. The endpoint is
stateless and rate-limited, and requires no separate configuration. See the
Relay teapot reference
for supported methods, response formats, and proxy behavior.
Report vulnerabilities using the private channels on Security reporting.
Audit execution results and environment limits are recorded in the documentation audit.