Skip to main content
This is the one capability that is optional: uploads work with nothing configured. The checklist reports mode: "local" and lists the S3 variables as missing — information, not a fault.

Local directory (default)

Files land under the runtime root: All three are resolved against RUNTIME_ROOT when they are relative — a single setting moves everything the server writes to disk.
A local directory lives inside the container. Without a mounted volume, an imported CSV disappears at the next restart — and so does the dashboard that reads it. On Docker Compose, mount a volume; on Kubernetes, the chart’s persistence.enabled claims one and points RUNTIME_ROOT at it. See Helm chart.

S3, or any S3-compatible storage

The capability flips to mode: "s3" only when all six are set: a bucket without credentials would fail on the first upload, which is exactly the failure this checklist exists to prevent. S3 keys keep their own namespace (uploads/{agent}/{file}); RUNTIME_ROOT and the directory settings do not affect them.

Check

Import a CSV under BI → Data. In local mode the file appears under bi_store; in S3 mode it appears in the bucket, and the banner about the local directory disappears from the screen.