Get unlimited free for 30 days!Register for a free account and start syncing 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. It is 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)
options.incrementalbool--incrementalPlan the delta against the prior completed run using only the local database (no destination calls)

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>, asof:<RFC3339|duration>)

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 S3 migration and ongoing synchronization. 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.18

Amazon S3, MinIO, Ceph, Cloudflare R2, Backblaze B2, Wasabi, and all other third-party product names, logos, and trademarks referenced on this site are the property of their respective owners and are used for identification purposes only. Their use does not imply any affiliation with or endorsement by them.