Skip to main content

MinIO

MinIO is an S3-compatible object store. The MinIO destination writes each stream run to an object in a MinIO bucket.

Prerequisites​

  • A reachable MinIO endpoint URL (for example, https://minio.example.com or http://localhost:9000)
  • A MinIO access key + secret key with permission to read and write to the target bucket (the connector validates access by performing a HeadBucket and a small test PutObject/DeleteObject during login)

Setup​

  1. Create a MinIO user/access key that has at least:
    • s3:ListBucket on the bucket
    • s3:PutObject, s3:DeleteObject on the target prefix
  2. In Extract, configure the connector:
    • Endpoint URL
    • Access Key ID / Secret Access Key
    • Bucket Name
    • Bucket Key template (see below)

Connection Settings​

The Key (object path) supports the same macros as the S3 destination (for example: {stream_name}, {timestamp}, {connection_id}, {connection_run_id}, {stream_run_id}, {extension}, and cursor-derived placeholders).

TLS / self-signed certificates​

If your MinIO uses HTTPS with a self-signed/invalid certificate, enable Insecure TLS (Skip Certificate Verification).

This disables TLS certificate verification and should only be used in trusted networks.

Configuration​

Provide the following settings when configuring the MinIO destination:

  • Endpoint URL: The MinIO server URL (for example, https://minio.example.com).
  • Region: The S3 region to use (often us-east-1 for MinIO unless your deployment requires a different value).
  • Access key ID / Secret access key: Credentials for an account with access to the target bucket.
  • Bucket: The bucket to write to. The connector validates access on connect by:
    • calling HeadBucket (read/metadata access), and
    • uploading and deleting a small test object (write/delete access).
  • Key: The object key (path) to write to in the bucket. This is a template and can include placeholders (see the Notes section for available variables).
  • Output format: jsonl, csv, or parquet.
  • Compress: When enabled, output is gzip-compressed for jsonl and csv (files end in .gz). Parquet is not additionally gzip-compressed.
  • Force path style: Enable if your MinIO deployment requires path-style addressing.
  • Insecure TLS: Enable only if you need to connect with TLS verification disabled (for example, when using self-signed certificates). See TLS / self-signed certificates.

If your workspace/run is configured to prevent overwriting existing files, the destination will fail if the resolved Key already exists in the bucket.

Notes​

  • During connection testing, the destination validates both read and write access to the target bucket by:

    • Calling HeadBucket on the configured bucket.
    • Uploading a small test object under extract_login_test/<uuid>.txt, then attempting to delete it. Ensure the credentials/policy allow s3:ListBucket, s3:GetBucketLocation, s3:PutObject, and s3:DeleteObject (or equivalent MinIO permissions) for the configured bucket/prefix.
  • When using output_format: csv, the connector writes a header row.

Troubleshooting​

  • Login fails with head_bucket errors

    • Verify the bucket name exists and the credentials have permission to access it.
    • Confirm the endpoint URL is correct and reachable from where Extract is running.
    • If you’re using a non-AWS S3-compatible endpoint, ensure the connection settings (such as region and path-style addressing) match your MinIO configuration.
  • Login fails with put_object failed during login test

    • The connector validates write access during login by uploading a small test object and then deleting it. If this step fails:
      • Ensure the credentials have s3:PutObject permission for the bucket (and s3:DeleteObject if your policy restricts deletes).
      • Check bucket policies that block writes (for example, requiring specific prefixes, encryption headers, or object lock settings).
  • Upload fails because the object/key already exists

    • Some runs may be configured to prevent overwriting existing files. In that case, uploads will fail if the resolved key already exists in the bucket.
    • Fix by changing the destination key template to produce unique paths per run (for example, include a run identifier or timestamp), or remove/rename the existing object in MinIO before re-running.
  • TLS / certificate errors

    • If you’re using self-signed certificates, follow the guidance in TLS / self-signed certificates to trust the certificate chain used by your MinIO endpoint.