Skip to content

Configuration

All configuration lives in fdl.toml. Secrets are handled via ${VAR} environment variable expansion.

fdl config

Read and write fdl.toml from the command line:

# Set a value
fdl config targets.default.url 's3://${FDL_S3_BUCKET}'

# Get a value
fdl config targets.default.url

# List all settings
fdl config

fdl.toml

Located at the project root and tracked in Git. Auto-generated by fdl init.

name = "my_dataset"
catalog = "duckdb"

[targets.default]
url = "s3://${FDL_S3_BUCKET}"
public_url = "https://data.example.com"
s3_endpoint = "${FDL_S3_ENDPOINT}"
s3_access_key_id = "${FDL_S3_ACCESS_KEY_ID}"
s3_secret_access_key = "${FDL_S3_SECRET_ACCESS_KEY}"
Key Description
name Datasource name
catalog Catalog format (duckdb or sqlite, default: duckdb)
targets.<name>.url Target storage URL or path
targets.<name>.public_url Public base URL for HTTP access
targets.<name>.s3_endpoint S3-compatible endpoint URL
targets.<name>.s3_access_key_id S3 access key
targets.<name>.s3_secret_access_key S3 secret key

All values support ${VAR} environment variable expansion. Set the actual values via direnv (.envrc), CI secrets, or shell exports.

Targets

All fdl commands require a target name (e.g. fdl push default, fdl sql default "..."). Direct URLs are not accepted:

# Good
fdl push default

# Bad — error
fdl push s3://my-bucket

You can define multiple targets for different environments:

[targets.default]
url = "s3://${FDL_S3_BUCKET}"
public_url = "https://data.example.com"
s3_endpoint = "${FDL_S3_ENDPOINT}"
s3_access_key_id = "${FDL_S3_ACCESS_KEY_ID}"
s3_secret_access_key = "${FDL_S3_SECRET_ACCESS_KEY}"

[targets.local]
url = "~/.local/share/fdl"
public_url = "http://localhost:4001"