Get 50 GB free!Register for a free account and start migrating today — no credit card required.Register now →
GodwitGodwit Sync
HomePricingDownloadsDocs
Customer PortalGet Started
Get Started
Config File Reference

Configuration File Reference

Godwit Sync supports YAML configuration files as an alternative to CLI flags. Use --config (-f) to load a config file.

Basic Usage

godwit sync --config my-sync.yml
godwit sync -f my-sync.yml

# Override a config value with a CLI flag
godwit sync -f my-sync.yml --parallel 8

CLI Precedence

CLI flags always take precedence over config file values. If a flag is set on the command line, the corresponding config value is ignored.

Environment Variables

Config file values support environment variable expansion. Use $VAR or ${VAR} syntax to reference environment variables. Variables are resolved when the config file is loaded.

source:
  endpoint: minio.example.com:9000
  access_key: $AWS_ACCESS_KEY_ID
  secret_key: ${AWS_SECRET_ACCESS_KEY}
  session_token: ${AWS_SESSION_TOKEN}

Unset environment variables expand to an empty string.

Config File Structure

The configuration file uses YAML format with these top-level sections:

Source

Configure the source endpoint - local path or S3 bucket.

YAML KeyTypeCLI FlagDescription
source.urlstring--sourceSource path or S3 URI (s3://bucket/prefix)
source.endpointstring--source-endpointS3 API endpoint (host:port)
source.auth_modestring--source-authSource credential mode (static, env, profile, iam, assume-role, web-identity, anonymous, auto)
source.access_keystring--source-access-keyS3 access key. Required when auth_mode is static; optional for assume-role (omit to resolve caller from the default chain). Ignored for env, profile, iam, web-identity, anonymous, auto.
source.secret_keystring--source-secret-keyS3 secret key. Paired with access_key — set both or neither.
source.session_tokenstring--source-session-tokenOptional session token for temporary credentials
source.profilestring--source-profileAWS profile name (used with auth_mode: profile)
source.role_arnstring--source-role-arnIAM role ARN for STS AssumeRole or AssumeRoleWithWebIdentity
source.role_sessionstring--source-role-sessionSession name for STS AssumeRole (CloudTrail). Honored by assume-role; web-identity uses an auto-generated session name.
source.token_filestring--source-token-filePath to a web-identity / OIDC JWT file on disk (used with auth_mode: web-identity). Falls back to AWS_WEB_IDENTITY_TOKEN_FILE. For EKS IRSA, Kubernetes projected tokens, IAM Roles Anywhere — not for CI platforms that expose the JWT via HTTP (use the platform's credential action plus auth_mode: env).
source.regionstring--source-regionS3 region
source.securebool--source-secureUse TLS for S3 connections
source.disable_keepalivebool--source-disable-keepaliveDisable HTTP keep-alive

Destination

Configure the destination endpoint - local path or S3 bucket.

YAML KeyTypeCLI FlagDescription
destination.urlstring--destinationDestination path or S3 URI
destination.endpointstring--destination-endpointS3 API endpoint (host:port)
destination.auth_modestring--destination-authDestination credential mode (static, env, profile, iam, assume-role, web-identity, anonymous, auto)
destination.access_keystring--destination-access-keyS3 access key. Required when auth_mode is static; optional for assume-role (omit to resolve caller from the default chain). Ignored for env, profile, iam, web-identity, anonymous, auto.
destination.secret_keystring--destination-secret-keyS3 secret key. Paired with access_key — set both or neither.
destination.session_tokenstring--destination-session-tokenOptional session token for temporary credentials
destination.profilestring--destination-profileAWS profile name (used with auth_mode: profile)
destination.role_arnstring--destination-role-arnIAM role ARN for STS AssumeRole or AssumeRoleWithWebIdentity
destination.role_sessionstring--destination-role-sessionSession name for STS AssumeRole (CloudTrail). Honored by assume-role; web-identity uses an auto-generated session name.
destination.token_filestring--destination-token-filePath to a web-identity / OIDC JWT file on disk (used with auth_mode: web-identity). Falls back to AWS_WEB_IDENTITY_TOKEN_FILE.
destination.regionstring--destination-regionS3 region
destination.securebool--destination-secureUse TLS for S3 connections
destination.disable_keepalivebool--destination-disable-keepaliveDisable HTTP keep-alive

Policy

Comparison and skip policies for object filtering.

YAML KeyTypeCLI FlagDescription
policy.comparestring--compare-policyComparison policy (size,etag or size,mtime)
policy.skipstring[]--skipList of suffixes or patterns to skip
policy.matchstring--matchRegexp used to include only matching source object keys

Options

Transfer behavior settings - parallelism, retries, overrides.

YAML KeyTypeCLI FlagDescription
options.parallelint--parallelNumber of parallel sync workers
options.plan_parallelint--plan-parallelNumber of parallel planning workers
options.buffer_multiplierint--buffer-multiplierMultiplier for the copy queue length
options.multipart_thresholdint64--multipart-thresholdMultipart upload threshold in bytes
options.overridebool--overrideOverwrite existing destination objects
options.skip_tagsbool--skip-tagsSkip reading object tags from source
options.unsupported_key_actionstring--unsupported-key-actionAction for unsupported S3 object keys: fail, skip, or warn
options.retryint--retryMaximum retries per object
options.retry_backoffstring--retry-backoffBase delay between retries
options.ram_conflict_checkbool--ram-conflict-checkUse in-memory map for case-conflict detection (faster but unbounded RAM)

Run

Run tracking - run ID, state driver and state file path.

YAML KeyTypeCLI FlagDescription
run.run_idstring--run-idRun identifier for tracking
run.state_driverstring--state-driverState backend driver
run.state_pathstring--state-pathPath to state database file
run.logs_dirstring--logs-dirDirectory for observability logs

Output

Console output mode - UI, brief, or silent.

YAML KeyTypeCLI FlagDescription
output.uibool--uiEnable verbose console logging
output.briefbool--briefShow only essential progress messages
output.silentbool--silentSuppress all console output

License

License file path or inline license string.

YAML KeyTypeCLI FlagDescription
license.filestring--license-filePath to license file
license.inlinestring--licenseInline base64 license string

Rate Limit

Throttling controls - RPS, bandwidth, and concurrency.

YAML KeyTypeCLI FlagDescription
rate_limit.rpsfloat64--rpsRequests per second limit (0 = disabled)
rate_limit.read_bpsint64--read-bpsRead bytes per second limit (0 = disabled)
rate_limit.max_inflightint--max-inflightMax concurrent uploads (0 = disabled)

Status

HTTP server address for metrics and status endpoint.

YAML KeyTypeCLI FlagDescription
status.addrstring--status-addrHTTP address for status/metrics server
status.drain_timeoutint--drain-timeoutSeconds to keep the status/metrics server alive after the operation completes, allowing readers to scrape final data (default: 15)

Versioning

Version listing and source-key matching settings.

YAML KeyTypeCLI FlagDescription
versioning.modestring--version-modeVersion listing mode (latest, all, since:<RFC3339>)

Object Lock

Object Lock replication settings for retention and legal hold.

YAML KeyTypeCLI FlagDescription
object_lock.enabledbool--object-lockReplicate Object Lock retention and legal hold from source to destination

Sample Configurations

Local Filesystem → S3

Upload a local directory to an S3-compatible bucket.

source:
  url: "./data"

destination:
  url: "s3://my-bucket/backup"
  endpoint: localhost:9001
  access_key: access_key
  secret_key: secret_key
  secure: false

options:
  parallel: 3

output:
  ui: true

status:
  addr: ":8080"

S3 → Local Filesystem

Download objects from an S3 bucket to a local directory.

source:
  url: "s3://my-bucket/data"
  endpoint: localhost:9001
  access_key: access_key
  secret_key: secret_key
  secure: false

destination:
  url: "./downloads"

policy:
  skip:
    - .md5

options:
  parallel: 6

output:
  ui: true

S3 → S3

Copy data between two S3-compatible endpoints.

source:
  url: "s3://source-bucket/data"
  endpoint: localhost:9001
  access_key: access_key
  secret_key: secret_key
  secure: false

destination:
  url: "s3://dest-bucket/backup"
  endpoint: localhost:9101
  access_key: access_key
  secret_key: secret_key
  secure: false

policy:
  skip:
    - .md5

options:
  parallel: 9

output:
  ui: true

status:
  addr: ":8080"

Full Example (All Sections)

A complete configuration file showing every available option.

source:
  url: "s3://source-bucket/prefix"
  endpoint: source.storage.example.com
  access_key: SOURCE_ACCESS_KEY
  secret_key: SOURCE_SECRET_KEY
  region: us-east-1
  secure: true

destination:
  url: "s3://dest-bucket/backup"
  endpoint: localhost:9000
  access_key: access_key
  secret_key: secret_key
  secure: false

policy:
  compare: "size,etag"
  skip:
    - .md5
    - .tmp
  match: "^data/.*\.txt$"

options:
  parallel: 4
  plan_parallel: 8
  buffer_multiplier: 4
  multipart_threshold: 67108864
  override: false
  skip_tags: false
  unsupported_key_action: "skip"
  retry: 3
  retry_backoff: "1s"

run:
  run_id: "daily-backup"
  state_driver: sqlite
  state_path: "./godwit-sync.state.db"
  logs_dir: "./logs"

output:
  ui: true
  brief: false
  silent: false

license:
  file: "./license.json"

rate_limit:
  rps: 50
  read_bps: 104857600
  max_inflight: 10

versioning:
  mode: "all"

object_lock:
  enabled: true

status:
  addr: ":8080"

CLI-Only Flags

These flags have no config file equivalent and must be passed on the command line:

FlagDescription
--config (-f)Selects which config file to load
--plan-onlyPlan transfer without copying data
--resumeResume a previously planned transfer
--registerRegister a license to disk

CLI Reference

See the complete list of all CLI flags with types, defaults, and descriptions.

View CLI Reference
← GuidesCLI Reference →

On this page

  • Basic Usage
  • CLI Precedence
  • Environment Variables
  • Config File Structure
    • Source
    • Destination
    • Policy
    • Options
    • Run
    • Output
    • License
    • Rate Limit
    • Status
    • Versioning
    • Object Lock
  • Sample Configurations
  • CLI-Only Flags
Godwit Sync

Production-grade data migration and synchronization for large object storage. Control, predictability, and safety at scale.

Product

  • Pricing
  • Documentation
  • Changelog

Legal

  • Terms of Service
  • User Agreement
  • Privacy Policy

© 2026 Godwit Sync. All rights reserved.

Version v1.1.6