This is about where MVS stores its own data, not where you ingest from. To connect a bucket as an ingestion source, see Object Storage Integrations. The managed shared plane uses Mixpeek-operated storage; BYO object storage applies to single-tenant and self-hosted deployments and is configured at the deployment level (not a per-namespace setting).
Supported providers
MVS speaks the S3 API (via boto3) and the native GCS API. Any S3-compatible store works through the same code path — the only per-provider differences are the endpoint, region, and path-style addressing.
See all providers in the Object Storage overview.
Local and parallel filesystems, including Lustre, are in private beta.
Configuration
The API, coordinator, and Ray worker pods read the object-store backend from these environment variables. The shard reads its own set, listed under Shard settings.Credentials
Credentials are never stored in config — they’re resolved from the deployment environment:- S3-compatible: the standard AWS credential chain. Prefer an IAM role attached to the pods; otherwise set
AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY. R2/Tigris/Wasabi/B2 issue S3 access keys you use the same way. - GCS: Application Default Credentials (workload identity /
GOOGLE_APPLICATION_CREDENTIALS), or a service-account JSON supplied as a secret.
Endpoint and addressing notes
- Endpoint required: R2 (
https://<account_id>.r2.cloudflarestorage.com), Tigris, and Wasabi have no usable default — setMVS_OBJECT_STORE_ENDPOINTor MVS fails fast with a clear message rather than silently hitting AWS. - Path-style addressing is applied automatically for B2, MinIO, Ceph, and LocalStack (they only serve path-style); AWS/R2/Tigris/Wasabi use virtual-hosted style.
Shard settings
Set these on the MVS shard, and point them at the same bucket as the variables above. With the Helm chart, setmvs.objectStore in your values file. The chart writes the shard variables for you:
s3 and gcs. Use s3 for MinIO, R2, and every other S3-compatible store. Keep credentials out of the values file. Put them in the Secret that secretRef names, as MVS_S3_ACCESS_KEY_ID and MVS_S3_SECRET_ACCESS_KEY (or AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY).
Without the chart, set these on each shard container:
Local and parallel filesystems (private beta)
MVS can store its data on a POSIX filesystem, such as local NVMe, NFS, or Lustre. This backend is in private beta and opt-in. To enable it for your deployment, contact us.
Encryption at rest
SetMVS_ENCRYPTION_KEY (base64-encoded 32 bytes) to transparently encrypt every object with AES-256-GCM. The object’s storage key is used as additional authenticated data (AAD), binding each ciphertext to its path. Migration needs no backfill: existing unencrypted objects stay readable while new writes are encrypted, so you can enable it on a populated bucket without a backfill.
Examples
Write extraction outputs to your bucket
A bucket can name adestination: a storage connection you own with write access enabled. Extraction outputs and derived assets (segments, thumbnails, transcodes, renders) are then written under your prefix, each object carrying its lineage as object metadata, and Mixpeek’s storage keeps no copy. This works on every deployment, including the shared plane.
Enable writes on the connection first:
Related
- Object Storage Integrations — connect a bucket as an ingestion source
- Single-Tenant Deployments — fully isolated data plane with a dedicated bucket
- Vector Store Overview — using MVS as a standalone vector store

