Storage & configuration

Timelake uses the Rust object_store crate for everything: Iceberg metadata, Parquet data and query scans. The warehouse URL picks the backend.

SchemeBackendCredentials
local path, file://Local filesystem—
s3://, s3a://Amazon S3 and S3-compatible storesAWS_* environment variables, plus options
gs://Google Cloud StorageGOOGLE_* environment variables, plus options
az://, abfs://, abfss://Azure Blob Storage / ADLSAZURE_* environment variables, plus options
memory://In-memory (tests)—

Options

Options are object_store configuration keys: -o key=value on the CLI, storage_options in Python. Unknown keys are an error. Common S3 keys:

KeyMeaning
aws_regionBucket region.
aws_access_key_id, aws_secret_access_key, aws_session_tokenStatic credentials (otherwise the environment and instance credentials are used).
aws_endpointCustom endpoint for S3-compatible stores, e.g. http://localhost:9000.
aws_allow_httptrue to allow a plain-HTTP endpoint.
timelake -w s3://lake/wh -o aws_endpoint=http://localhost:9000 -o aws_allow_http=true ls
timelake.Lake("s3://lake/wh", storage_options={
    "aws_endpoint": "http://localhost:9000",
    "aws_allow_http": "true",
})

Read-only HTTPS

An http:// or https:// warehouse (Vercel Blob, a public bucket, a CDN) can be read by the CLI, Python, and the TypeScript client, but not written to. Plain HTTP can't list objects, so tables are found through timelake-tables.json. To publish a warehouse at a URL, build it on local disk with its final URL already in the metadata, then upload the files with their paths unchanged:

timelake -w https://<store>.public.blob.vercel-storage.com/demo          -o timelake_local_root=./site-files          import tsbs.readings readings.parquet --time-column time --series-key tags_id
# upload ./site-files/** to the store, keeping paths (dashboard: bun run upload-demo)

timelake_local_root works with any URL: objects are written under the local directory while every path recorded in Iceberg metadata keeps the URL.

Conditional writes are required

Commits create the next vN.metadata.json with put-if-absent: on S3 that is If-None-Match: *, which AWS S3 has supported since 2024; GCS and Azure use their own preconditions. A store that ignores the condition would let two concurrent writers both believe they committed. Timelake has been tested on local disk and on RustFS; with a store you haven’t tested, check that a second create of the same table fails.

Environment

VariableMeaning
TIMELAKE_WAREHOUSEDefault warehouse for the CLI.