Command Line Reference
Complete reference for all Godwit Sync commands, flags, and configuration options.
Global Flags
These flags apply to all commands.
| Flag | Type | Default | Config Key | Description |
|---|---|---|---|---|
| --lang | string | en-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 versionGetting 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 --helpVerbose 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
Core Flags
These flags control the sync behavior.
| Flag | Type | Default | Config Key | Description |
|---|---|---|---|---|
| --config, -f | string | none | — | Path to YAML config file |
| --run-id | string | auto-generated | run.run_id | Run identifier for tracking and resuming transfers |
| --source | string | required | source.url | Source endpoint (local path or s3://bucket/prefix) |
| --destination | string | required | destination.url | Destination endpoint (local path or s3://bucket/prefix) |
| --plan-only | bool | false | — | Create sync plan without copying data |
| --resume | bool | false | — | Resume a previously planned transfer |
| --parallel | int | 4 | options.parallel | Number of parallel sync workers |
| --plan-parallel | int | 8 | options.plan_parallel | Number of parallel planning workers |
| --buffer-multiplier | int | 4 | options.buffer_multiplier | Multiplier for the copy queue length |
| --compare-policy | string | size,etag | policy.compare | Comparison policy (size,etag or size,mtime) |
| --multipart-threshold | int | 67108864 | options.multipart_threshold | Size in bytes that triggers multipart uploads (64MB) |
| --rps | float | 0 (disabled) | rate_limit.rps | Requests per second limit |
| --read-bps | int | 0 (disabled) | rate_limit.read_bps | Read bytes per second limit |
| --max-inflight | int | 0 (disabled) | rate_limit.max_inflight | Max concurrent uploads |
| --retry | int | 0 (disabled) | options.retry | Maximum retries per object before it is considered failed (0 = no retries) |
| --retry-backoff | duration | 1s | options.retry_backoff | Base delay between retries; grows exponentially (e.g. 1s, 2s, 4s, …) |
| --override | bool | false | options.override | Overwrite existing objects at the destination (S3 sinks) |
| --skip | stringArray | none | policy.skip | Suffixes or regex to skip (e.g., --skip .md5, --skip re:^logs/) |
| --match | string | none | policy.match | Only include source object keys matching the regexp |
| --skip-tags | bool | false | options.skip_tags | Skip reading object tags from the source (useful when IAM policy denies s3:GetObjectTagging) |
| --unsupported-key-action | string | skip | options.unsupported_key_action | Action when an object key contains characters unsupported by the destination (fail, skip, warn) |
| --version-mode | string | latest | versioning.mode | Version listing mode (latest, all, since:<RFC3339>) |
| --object-lock | bool | false | object_lock.enabled | Replicate Object Lock retention and legal hold settings from source to destination |
| --ram-conflict-check | bool | false | options.ram_conflict_check | Use in-memory map for case-conflict detection instead of SQLite. Faster planning but uses unbounded RAM proportional to the number of unique keys |
| --ui | bool | false | output.ui | Enable verbose console logging |
| --silent | bool | false | output.silent | Suppress all console output |
| --brief | bool | false | output.brief | Show only essential progress messages (planning/upload start and completion) |
| --logs-dir | string | none | run.logs_dir | Directory for observability logs |
| --status-addr | string | none | status.addr | HTTP address for status/metrics server (e.g., :8080) |
| --drain-timeout | int | 15 | status.drain_timeout | Seconds to keep the status/metrics server alive after the operation completes, allowing Prometheus and other readers to scrape final data (requires --status-addr) |
| --state-driver | string | sqlite | run.state_driver | State backend driver |
| --state-path | string | ./godwit-sync.state.db | run.state_path | Path to state DB file |
S3 Source Flags
Configure the S3 source connection.
| Flag | Type | Default | Config Key | Description |
|---|---|---|---|---|
| --source-endpoint | string | required | source.endpoint | S3 source API endpoint |
| --source-access-key | string | required | source.access_key | S3 source access key |
| --source-secret-key | string | required | source.secret_key | S3 source secret key |
| --source-session-token | string | none | source.session_token | Optional session token for temporary credentials |
| --source-region | string | none | source.region | S3 source region |
| --source-secure | bool | true | source.secure | Use TLS for the S3 source endpoint |
| --source-disable-keepalive | bool | false | source.disable_keepalive | Disable HTTP keep-alive for source connections |
S3 Destination Flags
Configure the S3 destination connection.
| Flag | Type | Default | Config Key | Description |
|---|---|---|---|---|
| --destination-endpoint | string | required | destination.endpoint | S3 destination API endpoint |
| --destination-access-key | string | required | destination.access_key | S3 destination access key |
| --destination-secret-key | string | required | destination.secret_key | S3 destination secret key |
| --destination-session-token | string | none | destination.session_token | Optional session token for temporary credentials |
| --destination-region | string | none | destination.region | S3 destination region |
| --destination-secure | bool | true | destination.secure | Use TLS for the S3 destination endpoint |
| --destination-disable-keepalive | bool | false | destination.disable_keepalive | Disable HTTP keep-alive for destination connections |
License Flags
Control licensing behavior. Free mode allows planning up to 10GB.
| Flag | Type | Default | Config Key | Description |
|---|---|---|---|---|
| --license-file | string | license.json | license.file | Path to license file (default: next to binary) |
| --license | string | none | license.inline | Inline base64 license string |
| --register | string | none | — | 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 ...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| Flag | Type | Default | Config Key | Description |
|---|---|---|---|---|
| --config, -f | string | none | — | Path to YAML config file (reuse your sync config for state_path, run_id, etc.) |
| --limit | int | 30 | — | Maximum number of runs to display |
| --status | string | none | — | Filter by run status (completed, failed, running, planned, pending) |
| --json | bool | false | — | Output as JSON array instead of table |
| --state-driver | string | sqlite | run.state_driver | State backend driver |
| --state-path | string | ./godwit-sync.state.db | run.state_path | Path 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| Flag | Type | Default | Config Key | Description |
|---|---|---|---|---|
| --config, -f | string | none | — | Path to YAML config file (reuse your sync config for state_path, run_id, etc.) |
| --run-id | string | required | run.run_id | Run identifier to inspect |
| --json | bool | false | — | Output as JSON object with objects, data, storage classes, and issues |
| --state-driver | string | sqlite | run.state_driver | State backend driver |
| --state-path | string | ./godwit-sync.state.db | run.state_path | Path 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>| Flag | Type | Default | Config Key | Description |
|---|---|---|---|---|
| --config, -f | string | none | — | Path to YAML config file (reuse your sync config for state_path, run_id, etc.) |
| --run-id | string | required | run.run_id | Run identifier |
| --storage-class | string | none | — | Filter by S3 storage class (e.g. STANDARD, GLACIER) |
| --json | bool | false | — | Output as JSON array instead of table |
| --partial-history | bool | false | — | List only keys with partial version history (mixed glacier/copied versions) |
| --case-conflict | bool | false | — | List only objects involved in key case conflicts (e.g. Photo.jpg vs photo.jpg) |
| --unsupported | bool | false | — | List only objects with keys containing characters unsupported on local filesystems |
| --state-driver | string | sqlite | run.state_driver | State backend driver |
| --state-path | string | ./godwit-sync.state.db | run.state_path | Path 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| Flag | Type | Default | Config Key | Description |
|---|---|---|---|---|
| --config, -f | string | none | — | Path to YAML config file |
| --run-id | string | required | run.run_id | Run identifier to verify |
| --resume | bool | false | — | Skip already-verified objects and verify the rest |
| --destination | string | required | destination.url | Destination endpoint (local path or s3://bucket/prefix) |
| --destination-endpoint | string | none | destination.endpoint | S3 destination API endpoint |
| --destination-access-key | string | none | destination.access_key | S3 destination access key |
| --destination-secret-key | string | none | destination.secret_key | S3 destination secret key |
| --destination-session-token | string | none | destination.session_token | Optional session token for temporary credentials |
| --destination-region | string | none | destination.region | S3 destination region |
| --destination-secure | bool | true | destination.secure | Use TLS for the S3 destination endpoint |
| --destination-disable-keepalive | bool | false | destination.disable_keepalive | Disable HTTP keep-alive for S3 destination |
| --parallel | int | 4 | options.parallel | Number of parallel verification workers |
| --rps | float | 0 (disabled) | rate_limit.rps | Requests per second limit |
| --read-bps | int | 0 (disabled) | rate_limit.read_bps | Read bytes per second limit |
| --max-inflight | int | 0 (disabled) | rate_limit.max_inflight | Max concurrent reads |
| --ui | bool | false | output.ui | Enable verbose console logging (shows per-object results) |
| --silent | bool | false | output.silent | Suppress all console output |
| --brief | bool | false | output.brief | Show only verification start and completion summary |
| --state-driver | string | sqlite | run.state_driver | State backend driver |
| --state-path | string | ./godwit-sync.state.db | run.state_path | Path to the state database file |
| --logs-dir | string | none | run.logs_dir | Directory for observability logs |
| --drain-timeout | int | 15 | status.drain_timeout | Seconds 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