Skip to main content
ReferenceApplies to: Unified engine deployments
Unified uses one storage_root for its durable state. Use an S3 URL for remote workers, or an absolute local directory for a local deployment.
For local development:

Storage layout

All engine-owned durable locations are computed below the root. Metadata uses SlateDB. Result payloads use object storage. These backends and their prefixes are computed from the root. Separate location settings such as database.backend, result_storage.backend, iceberg.root_url, and secrets.master_key_file are rejected. Changing the root selects a different store. It does not move existing data. Keep the whole root, including the secret key, together when moving or restoring data. Each service database needs one active controller writer.

S3 connection

S3 uses the process’s bootstrap AWS identity. This can come from the AWS environment or the platform identity attached to the controller and worker. A saved credential cannot bootstrap access to its own metadata store. Set AWS_REGION or AWS_DEFAULT_REGION. The default Region is us-east-1. For an S3-compatible endpoint, set AWS_ENDPOINT_URL_S3 or AWS_ENDPOINT_URL. An http:// endpoint enables HTTP for that connection. These are connection settings; the bucket and prefix still come only from storage_root. Controller and workers must reach the same bucket and prefix. The controller needs access to all engine state. Workers need the table, result, and source access used by their tasks. The secret key object must stay private. Its contents are created once and reused after restart. A missing key for an existing secret store causes startup to fail.

Temporary files

Spill files and Python runtime files use <local root>/tmp/ with local storage. With S3 they use the system temporary directory under laminar/, normally /tmp/laminar/. These files are temporary. A container with a read-only root filesystem needs a writable /tmp mount, but no persistent local data mount for S3 state. Hub runs sample services in Docker Compose. Its data uses separate Docker volumes.

Sources and external tables

file_sources describes external input and output connections. External catalog tables can also have their own locations and credentials. These locations are not engine-owned state and do not move when storage_root changes. table_storage.options.part_bytes and result_storage.options.part_bytes remain transfer-size settings. They do not set the Parquet file size. See Iceberg write options. This root setting applies only to Unified.
Last modified on November 4, 2026