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
CLI Reference

Command Line Reference

Complete reference for all Godwit Sync commands, flags, and configuration options.

Global Flags

These flags apply to all commands.

FlagTypeDefaultConfig KeyDescription
--langstringen-US—Language for help and console output (e.g. en-US, ua-UA)

Basic Usage

godwit sync --source <source> --destination <destination> [flags]

Check Version

godwit version

Getting Help

You can use the help command with any Godwit command to see its full usage, available flags, and examples. Use godwit help <command> or godwit <command> --help.

# Show general help
godwit help

# Show help for a specific command
godwit help sync
godwit help plan

# Use --help flag on any command
godwit sync --help
godwit plan list --help

Verbose Mode

Enable verbose mode with --ui to get detailed real-time progress information. This displays transfer statistics, file-by-file progress, estimated time remaining, and license information.

godwit sync \
  --source ./data \
  --destination s3://my-bucket/backup \
  --ui
Godwit Sync verbose mode CLI output showing real-time transfer progress

Core Flags

These flags control the sync behavior.

FlagTypeDefaultConfig KeyDescription
--config, -fstringnone—Path to YAML config file
--run-idstringauto-generatedrun.run_idRun identifier for tracking and resuming transfers
--sourcestringrequiredsource.urlSource endpoint (local path or s3://bucket/prefix)
--destinationstringrequireddestination.urlDestination endpoint (local path or s3://bucket/prefix)
--plan-onlyboolfalse—Create sync plan without copying data
--resumeboolfalse—Resume a previously planned transfer
--parallelint4options.parallelNumber of parallel sync workers
--plan-parallelint8options.plan_parallelNumber of parallel planning workers
--buffer-multiplierint4options.buffer_multiplierMultiplier for the copy queue length
--compare-policystringsize,etagpolicy.compareComparison policy (size,etag or size,mtime)
--multipart-thresholdint67108864options.multipart_thresholdSize in bytes that triggers multipart uploads (64MB)
--rpsfloat0 (disabled)rate_limit.rpsRequests per second limit
--read-bpsint0 (disabled)rate_limit.read_bpsRead bytes per second limit
--max-inflightint0 (disabled)rate_limit.max_inflightMax concurrent uploads
--retryint0 (disabled)options.retryMaximum retries per object before it is considered failed (0 = no retries)
--retry-backoffduration1soptions.retry_backoffBase delay between retries; grows exponentially (e.g. 1s, 2s, 4s, …)
--overrideboolfalseoptions.overrideOverwrite existing objects at the destination (S3 sinks)
--skipstringArraynonepolicy.skipSuffixes or regex to skip (e.g., --skip .md5, --skip re:^logs/)
--matchstringnonepolicy.matchOnly include source object keys matching the regexp
--skip-tagsboolfalseoptions.skip_tagsSkip reading object tags from the source (useful when IAM policy denies s3:GetObjectTagging)
--unsupported-key-actionstringskipoptions.unsupported_key_actionAction when an object key contains characters unsupported by the destination (fail, skip, warn)
--version-modestringlatestversioning.modeVersion listing mode (latest, all, since:<RFC3339>)
--object-lockboolfalseobject_lock.enabledReplicate Object Lock retention and legal hold settings from source to destination
--ram-conflict-checkboolfalseoptions.ram_conflict_checkUse in-memory map for case-conflict detection instead of SQLite. Faster planning but uses unbounded RAM proportional to the number of unique keys
--uiboolfalseoutput.uiEnable verbose console logging
--silentboolfalseoutput.silentSuppress all console output
--briefboolfalseoutput.briefShow only essential progress messages (planning/upload start and completion)
--logs-dirstringnonerun.logs_dirDirectory for observability logs
--status-addrstringnonestatus.addrHTTP address for status/metrics server (e.g., :8080)
--drain-timeoutint15status.drain_timeoutSeconds to keep the status/metrics server alive after the operation completes, allowing Prometheus and other readers to scrape final data (requires --status-addr)
--state-driverstringsqliterun.state_driverState backend driver
--state-pathstring./godwit-sync.state.dbrun.state_pathPath to state DB file

S3 Source Flags

Configure the S3 source connection.

FlagTypeDefaultConfig KeyDescription
--source-endpointstringrequiredsource.endpointS3 source API endpoint
--source-access-keystringrequiredsource.access_keyS3 source access key
--source-secret-keystringrequiredsource.secret_keyS3 source secret key
--source-session-tokenstringnonesource.session_tokenOptional session token for temporary credentials
--source-regionstringnonesource.regionS3 source region
--source-securebooltruesource.secureUse TLS for the S3 source endpoint
--source-disable-keepaliveboolfalsesource.disable_keepaliveDisable HTTP keep-alive for source connections

S3 Destination Flags

Configure the S3 destination connection.

FlagTypeDefaultConfig KeyDescription
--destination-endpointstringrequireddestination.endpointS3 destination API endpoint
--destination-access-keystringrequireddestination.access_keyS3 destination access key
--destination-secret-keystringrequireddestination.secret_keyS3 destination secret key
--destination-session-tokenstringnonedestination.session_tokenOptional session token for temporary credentials
--destination-regionstringnonedestination.regionS3 destination region
--destination-securebooltruedestination.secureUse TLS for the S3 destination endpoint
--destination-disable-keepaliveboolfalsedestination.disable_keepaliveDisable HTTP keep-alive for destination connections

License Flags

Control licensing behavior. Free mode allows planning up to 10GB.

FlagTypeDefaultConfig KeyDescription
--license-filestringlicense.jsonlicense.filePath to license file (default: next to binary)
--licensestringnonelicense.inlineInline base64 license string
--registerstringnone—Register a base64 license to disk

Skip Patterns

Use --skip to exclude files by suffix or regex pattern.

# Skip by suffix
godwit sync --skip .md5 --skip .tmp ...

# Skip by regex pattern
godwit sync --skip "re:^logs/" --skip "re:\.bak$" ...

# Combine both
godwit sync --skip .md5 --skip "re:^temp/" ...

Match Patterns

Use --match to include only source object keys that match a regexp pattern. When set, objects whose key does not match are excluded from the plan. Can be combined with --skip for fine-grained filtering.

# Only sync objects whose key matches a regex
godwit sync --match "^images/" ...

# Match a specific file extension
godwit sync --match "\.parquet$" ...

# Combine with --skip for fine-grained control
godwit sync --match "^data/" --skip .tmp ...

Skip Tags

Use --skip-tags to skip reading object tags from the source. This is useful when the IAM identity does not have the s3:GetObjectTagging permission.

# Skip reading object tags (e.g., when IAM lacks s3:GetObjectTagging)
godwit sync --skip-tags \
  --source s3://my-bucket/data \
  --source-endpoint source.storage.example.com \
  --source-access-key ACCESS_KEY \
  --source-secret-key SECRET_KEY \
  --destination ./downloads \
  --state-path ./state.db

Comparison Policy

The --compare-policy flag determines how files are compared:

  • size,etagsize,etag - Compare file size and ETag (default, best for S3)
  • size,mtimesize,mtime - Compare file size and modification time (for local filesystems)

Plan Management

Godwit Sync tracks every sync run in its state database. Use the plan subcommands to list past runs and inspect their progress.

plan list

List recorded runs with status, object count, transferred bytes, duration, and failures.

# List recent runs with stats
godwit plan list --state-path ./tmp/state.db

# Show last 10 runs
godwit plan list --limit 10

# Show only failed runs
godwit plan list --status failed

# Machine-readable output for scripts
godwit plan list --json
FlagTypeDefaultConfig KeyDescription
--config, -fstringnone—Path to YAML config file (reuse your sync config for state_path, run_id, etc.)
--limitint30—Maximum number of runs to display
--statusstringnone—Filter by run status (completed, failed, running, planned, pending)
--jsonboolfalse—Output as JSON array instead of table
--state-driverstringsqliterun.state_driverState backend driver
--state-pathstring./godwit-sync.state.dbrun.state_pathPath to the state database file

plan inspect

Show a detailed summary for a specific run - object counts (total, pending, finished, failed), data transferred vs. remaining, storage class breakdown, and version history completeness (complete, partial, fully skipped).

godwit plan inspect --run-id <run-id> --state-path ./tmp/state.db

# Machine-readable JSON output
godwit plan inspect --json --run-id <run-id> --state-path ./tmp/state.db
FlagTypeDefaultConfig KeyDescription
--config, -fstringnone—Path to YAML config file (reuse your sync config for state_path, run_id, etc.)
--run-idstringrequiredrun.run_idRun identifier to inspect
--jsonboolfalse—Output as JSON object with objects, data, storage classes, and issues
--state-driverstringsqliterun.state_driverState backend driver
--state-pathstring./godwit-sync.state.dbrun.state_pathPath to the state database file

plan list objects

List objects for a given run, filtered by status. Available filters: all, pending, running, finished, skipped, failed, excluded, glacier, unsupported_key. Combine multiple statuses with + (e.g. pending+running). Use --storage-class to further filter by S3 storage class. Use --partial-history to list only keys with partial version history (mixed glacier/copied versions).

# List all objects in a run
godwit plan list objects all --run-id <run-id> --state-path ./tmp/state.db

# List only running objects
godwit plan list objects running --run-id <run-id>

# Combine statuses with +
godwit plan list objects pending+running --run-id <run-id>

# Filter by storage class
godwit plan list objects all --storage-class GLACIER --run-id <run-id>

# List glacier-skipped objects
godwit plan list objects glacier --run-id <run-id>

# List keys with partial version history (mixed glacier/copied)
godwit plan list objects all --partial-history --run-id <run-id>

# List objects with case-conflicting keys (e.g. Photo.jpg vs photo.jpg)
godwit plan list objects all --case-conflict --run-id <run-id>

# List objects with keys unsupported on local filesystems
godwit plan list objects all --unsupported --run-id <run-id>

# Machine-readable JSON output
godwit plan list objects all --json --run-id <run-id>
FlagTypeDefaultConfig KeyDescription
--config, -fstringnone—Path to YAML config file (reuse your sync config for state_path, run_id, etc.)
--run-idstringrequiredrun.run_idRun identifier
--storage-classstringnone—Filter by S3 storage class (e.g. STANDARD, GLACIER)
--jsonboolfalse—Output as JSON array instead of table
--partial-historyboolfalse—List only keys with partial version history (mixed glacier/copied versions)
--case-conflictboolfalse—List only objects involved in key case conflicts (e.g. Photo.jpg vs photo.jpg)
--unsupportedboolfalse—List only objects with keys containing characters unsupported on local filesystems
--state-driverstringsqliterun.state_driverState backend driver
--state-pathstring./godwit-sync.state.dbrun.state_pathPath to the state database file

plan verify

Verify completed objects by comparing their MD5 checksum against the .md5 sidecar files at the destination. Supports --resume to skip already-verified objects.

godwit plan verify --run-id <run-id> --destination s3://bucket/prefix --state-path ./tmp/state.db
FlagTypeDefaultConfig KeyDescription
--config, -fstringnone—Path to YAML config file
--run-idstringrequiredrun.run_idRun identifier to verify
--resumeboolfalse—Skip already-verified objects and verify the rest
--destinationstringrequireddestination.urlDestination endpoint (local path or s3://bucket/prefix)
--destination-endpointstringnonedestination.endpointS3 destination API endpoint
--destination-access-keystringnonedestination.access_keyS3 destination access key
--destination-secret-keystringnonedestination.secret_keyS3 destination secret key
--destination-session-tokenstringnonedestination.session_tokenOptional session token for temporary credentials
--destination-regionstringnonedestination.regionS3 destination region
--destination-securebooltruedestination.secureUse TLS for the S3 destination endpoint
--destination-disable-keepaliveboolfalsedestination.disable_keepaliveDisable HTTP keep-alive for S3 destination
--parallelint4options.parallelNumber of parallel verification workers
--rpsfloat0 (disabled)rate_limit.rpsRequests per second limit
--read-bpsint0 (disabled)rate_limit.read_bpsRead bytes per second limit
--max-inflightint0 (disabled)rate_limit.max_inflightMax concurrent reads
--uiboolfalseoutput.uiEnable verbose console logging (shows per-object results)
--silentboolfalseoutput.silentSuppress all console output
--briefboolfalseoutput.briefShow only verification start and completion summary
--state-driverstringsqliterun.state_driverState backend driver
--state-pathstring./godwit-sync.state.dbrun.state_pathPath to the state database file
--logs-dirstringnonerun.logs_dirDirectory for observability logs
--drain-timeoutint15status.drain_timeoutSeconds to keep the status/metrics server alive after verify completes, allowing Prometheus and other readers to scrape final data (requires --status-addr)

Config File Reference

Prefer YAML config files? See the full config file reference with sample configurations.

View Config Reference

On this page

  • Global Flags
  • Basic Usage
  • Check Version
  • Getting Help
  • Verbose Mode
  • Core Flags
  • S3 Source Flags
  • S3 Destination Flags
  • License Flags
  • Skip Patterns
  • Match Patterns
  • Skip Tags
  • Comparison Policy
  • Plan Management
    • plan list
    • plan inspect
    • plan list objects
    • plan verify
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.0.29