OpenTelemetry relay for browser and mail security reports
  • Go 84%
  • Shell 10.5%
  • Python 3.3%
  • Dockerfile 2%
  • Makefile 0.2%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-14 02:51:55 -03:00
.compose feat: gate forwarded headers on trusted proxy networks 2026-09-26 20:34:03 -03:00
.container feat(intake): accept typo reports in the content domain 2026-10-12 02:26:28 -03:00
.forgejo/workflows build: regenerate workflows (dag refactor) 2026-10-14 02:51:55 -03:00
.github/workflows build: regenerate workflows (dag refactor) 2026-10-14 02:51:55 -03:00
.makefile chore(makefile): sync m6e submodules 2026-10-14 01:52:50 -03:00
.scripts fix(build): name binaries <os>-<uname -m> through asset-name.sh 2026-10-08 01:54:48 -03:00
docs docs(makefile): update help documentation 2026-10-13 22:21:49 -03:00
e2e fix: assert on a here-string, not a grep -q pipeline 2026-10-08 01:54:56 -03:00
internal feat(intake): accept typo reports in the content domain 2026-10-12 02:26:28 -03:00
LICENSES feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
.claudeignore feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
.containerignore build: regen .containerignore 2026-10-13 23:57:51 -03:00
.dockerignore feat(forge): declare and publish to GitHub and Codeberg 2026-10-01 16:53:11 -03:00
.fdignore feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
.gitattributes feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
.gitignore build: ignore .worktrees 2026-09-29 17:37:43 -03:00
.gitmodules feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
.releaserc.yaml feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
.textlintignore feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
.yamllint feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
AGENTS.md feat(intake): accept typo reports in the content domain 2026-10-12 02:26:28 -03:00
AI_POLICY.md feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
CITATION.cff chore(version): 0.10.0 2026-10-12 16:03:07 -03:00
CODE_OF_CONDUCT.md feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
CODEOWNERS feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
CONTRIBUTING.md feat(forge): declare and publish to GitHub and Codeberg 2026-10-01 16:53:11 -03:00
Dockerfile build(docker): own the download cache as the build user 2026-10-10 04:22:54 -03:00
go.mod build: bump go toolchain 2026-10-11 16:15:44 -03:00
go.sum fix(deps): bump go.opentelemetry.io/otel to v1.47.0 2026-10-09 03:03:46 -03:00
go.sum.license feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
lefthook.yaml chore: regenerate lefthook.yaml 2026-09-29 22:28:50 -03:00
LICENSE feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
main.go feat(intake): accept typo reports in the content domain 2026-10-12 02:26:28 -03:00
Makefile feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
projectfile.yaml refactor(projectfile): follow the m6e trait renames 2026-10-13 22:52:00 -03:00
README.md docs: document typo reports 2026-10-12 02:26:56 -03:00
SECURITY.md feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00
SUPPORT.md feat: accept browser and mail security reports as OTLP logs 2026-09-25 20:23:54 -03:00

Español · Українська

Report Relay

Report Relay accepts the security reports browsers and mail servers send — Reporting API batches, legacy CSP report-uri bodies, network error logs and SMTP TLS reports — and emits one OpenTelemetry log record per report, so they land in the existing Loki, Tempo and Grafana stack instead of a separate collector per report type.

Stand with Ukraine Projectfile inside License Cosign ClamAV scanned PRs welcome REUSE compliance

Project status Last commit on kiota.ch Last commit on Codeberg Last commit on GitHub

Publish pipeline on GitHub Vulnerability audit on GitHub Dependency freshness on GitHub Analysis sweep on GitHub

Publish pipeline on kiota.ch Vulnerability audit on kiota.ch Dependency freshness on kiota.ch Analysis sweep on kiota.ch

Features

  • A slow collector never slows a browser
  • CAA IODEF incident reports
  • Cross-Origin-Embedder-Policy reports
  • Dropped into an OpenTelemetry setup unchanged
  • Cross-Origin-Opener-Policy reports
  • Browser crash reports
  • Legacy CSP report-uri reports
  • Content Security Policy violation reports
  • Deprecation reports
  • Document Policy violation reports
  • Expect-CT violation reports
  • A public intake, guarded by default
  • HPKP pin validation failure reports
  • Subresource Integrity violation reports
  • Browser intervention reports
  • Network Error Logging reports
  • One endpoint for every report a site can send
  • Permissions Policy violation reports
  • SMTP TLS reports
  • Typo reports from your readers
  • A report type nobody has defined yet is still kept

It also inherits the features of B19 / Ubuntu — see Features for the full list.

What this provides

  • Executable report-relay — command report-relay
  • Container image ghcr.io/damian-buho/report-relay:latest
  • Container image damianbuho/report-relay:latest
  • Service relay — listens on 8080 (intake), 8081 (admin) — Report intake and health endpoints

Installation

Container image

Pull the published container image:

Pull from GHCR — linux/amd64, linux/arm64

docker pull ghcr.io/damian-buho/report-relay:latest

Pull from DockerHub — linux/amd64

docker pull damianbuho/report-relay:latest

Stable releases also publish X.Y.Z, X.Y and X tags — pull the precision you want to pin.

If the registries above are unreachable, pull from the origin instead:

Pull from Kiota — linux/amd64

docker pull kiota.ch/damian-buho/report-relay:latest

Prebuilt binary

Download the prebuilt binary for your platform from GitHub Releases:

mkdir -p ~/.local/bin
curl --fail --location --output ~/.local/bin/report-relay https://github.com/damian-buho/report-relay/releases/latest/download/report-relay-linux-$(uname -m)
chmod +x ~/.local/bin/report-relay
~/.local/bin/report-relay --help

Published for: linux/amd64, linux/arm64, linux/riscv64

Usage

Run the service in the background, publishing its ports:

From GHCR

docker run --detach --publish 8080:8080/tcp --publish 8081:8081/tcp ghcr.io/damian-buho/report-relay:latest

From DockerHub

docker run --detach --publish 8080:8080/tcp --publish 8081:8081/tcp damianbuho/report-relay:latest

Then check that it answers:

curl http://localhost:8081/healthz

Building

Clone the repository with its submodules:

git clone --recurse-submodules https://codeberg.org/damian-buho/report-relay report-relay && cd report-relay

Build the container image locally:

make container-build

Run make with no arguments for the default target; run make help to list every target.

For the local dev loop, make dev-container brings up the dev-container.

Pipeline entry points:

  • make analyzed — Run the heavy analysis sweep (mutation testing, benchmarks)
  • make audited — Re-scan the pinned dependencies and published artifacts for new vulnerabilities
  • make check-outdated — Report every pinned dependency that lags upstream
  • make ready-to-publish — Run the pseudo-CI pipeline locally — build, test and scan, without publishing

Documentation

Policies

License

This project is licensed under MIT — see the LICENSE file for details.