Storage & artifacts

Where kinora stores trace.zip artifacts: a local volume by default, or any S3-compatible store.

kinora stores binary artifacts (trace.zip, screenshots, videos) through a storage interface with two backends. Test metadata always lives in Postgres; this page is only about the binary artifacts.

Local volume (default)

With the S3_* variables empty, artifacts are written to a local directory, mounted as the kinora-artifacts named volume in the self-host compose. This is the zero-config default and keeps everything on your box.

Back it up like any Docker volume - see Upgrading & backups.

S3-compatible store

Set all five S3_* variables to store artifacts in any S3-compatible object store instead of the local volume. Works with AWS S3, Cloudflare R2, MinIO, and Hetzner Object Storage.

S3_ENDPOINT=https://s3.example.com
S3_REGION=auto
S3_BUCKET=kinora-artifacts
S3_ACCESS_KEY_ID=...
S3_SECRET_ACCESS_KEY=...

If any of the five is missing, kinora falls back to the local volume.

CORS

The dashboard’s embedded trace viewer fetches trace.zip from the artifact URL via a service worker, so a bucket serving artifacts to browsers needs CORS to allow GET (and the Range header) from your PUBLIC_URL origin. Configure this on the bucket, once, in your object store’s settings.