Get Started with Godwit Sync
Fast, reliable and predictable data sync - for teams who depend on S3 every day. Get up and running in minutes.
What is Godwit Sync?
Godwit Sync is a high-performance S3 transfer utility supporting multiple transfer modes:
- S3 → Local filesystem
- Local filesystem → S3
- S3 → S3 (fully on-the-fly, no local storage required)
It builds a deterministic sync plan first (or only creates the plan with --plan-only), supports safe interruption and continuation via --resume, and gives you precise control over throughput using --rps and --read-bps.
Step 1: Installation
Download the latest release for your platform and extract the binary:
# Install with Homebrew
brew tap godwitio/packages https://github.com/godwitio/packages
brew install godwit-sync
# Verify installation
godwit versionOr install manually:
# Download for Linux (x86_64)
curl -LO https://downloads.godwit.io/godwit-sync/latest/godwit-sync_linux_amd64.tar.gz
# Or for ARM64
curl -LO https://downloads.godwit.io/godwit-sync/latest/godwit-sync_linux_arm64.tar.gz
# Extract and move to PATH
tar -xzf godwit-sync_linux_*.tar.gz
sudo mv godwit /usr/local/bin/godwit# Install with Scoop
scoop bucket add godwit https://github.com/godwitio/packages
scoop install godwit-sync
# Verify installation
godwit versionOr install manually with PowerShell:
Invoke-WebRequest -Uri "https://downloads.godwit.io/godwit-sync/latest/godwit-sync_windows_amd64.zip" -OutFile "godwit-sync.zip"
Expand-Archive -Path godwit-sync.zip -DestinationPath .
New-Item -ItemType Directory -Force -Path "C:\Program Files\godwit"
Move-Item godwit.exe "C:\Program Files\godwit\godwit.exe"
# Add to PATH (run as Administrator)
[Environment]::SetEnvironmentVariable("Path", $env:Path + ";C:\Program Files\godwit", "Machine")# Install with Homebrew
brew tap godwitio/packages https://github.com/godwitio/packages
brew install godwit-sync
# Verify installation
godwit versionOr install manually:
# Download for Apple Silicon (M1/M2/M3/M4)
curl -LO https://downloads.godwit.io/godwit-sync/latest/godwit-sync_darwin_arm64.tar.gz
# Or for Intel
curl -LO https://downloads.godwit.io/godwit-sync/latest/godwit-sync_darwin_amd64.tar.gz
# Extract and move to PATH
tar -xzf godwit-sync_darwin_*.tar.gz
sudo mv godwit /usr/local/bin/godwit# Download for FreeBSD (x86_64)
fetch https://downloads.godwit.io/godwit-sync/latest/godwit-sync_freebsd_amd64.tar.gz
# Extract the archive
tar -xzf godwit-sync_freebsd_*.tar.gz
# Move to PATH
sudo mv godwit /usr/local/bin/godwit
# Verify installation
godwit version# Multi-arch tags include both linux/amd64 and linux/arm64.
# Docker will automatically pull the correct image for your machine.
IMAGE="godwitio/godwit-sync:latest"
# IMAGE="godwitio/godwit-sync:v1.0.1" # specific version (also multi-arch)
# Pull the image
docker pull "$IMAGE"
# Run godwit sync via Docker
docker run --rm -v $(pwd)/data:/data -v $(pwd)/state:/state "$IMAGE" sync \
--source /data \
--destination s3://my-bucket/backup \
--destination-endpoint localhost:9000 \
--destination-access-key s3key \
--destination-secret-key s3secret \
--state-path /state/state.db
# Verify installation
docker run --rm "$IMAGE" versionView all available tags on Docker Hub
Step 2: Licensing
Godwit Sync offers a free mode for evaluation and paid licenses for production use:
Free Mode
Plan migrations and syncs up to 50 GB. Perfect for testing, small transfers, and incremental sync trials.
Licensed Mode
From 2 TB per run up to unlimited capacity. Full feature access. Commercial use. Contact us if you need more.
# Register a license (saves beside the executable)
godwit sync --register <base64-license-key>
# Or provide license file per-run
godwit sync --license-file ./license.json ...
# Or provide inline base64 license
godwit sync --license <base64-string> ...Step 3: Your First Sync
Start with a simple local folder to S3 sync:
godwit sync \
--source ./data \
--destination s3://my-bucket/backup \
--destination-endpoint localhost:9000 \
--destination-access-key access_key \
--destination-secret-key secret_key \
--destination-secure=false \
--state-path ./tmp/state.db \
--logs-dir ./tmp/logs \
--uiPlan First
Use --plan-only to see what will be transferred before moving any data:
# Create a plan without executing
godwit sync \
--source ./data \
--destination s3://my-bucket/backup \
--destination-endpoint localhost:9000 \
--destination-access-key access_key \
--destination-secret-key secret_key \
--destination-secure=false \
--state-path ./tmp/state.db \
--plan-only
# Review, then execute with resume
godwit sync \
--source ./data \
--destination s3://my-bucket/backup \
--destination-endpoint localhost:9000 \
--destination-access-key access_key \
--destination-secret-key secret_key \
--destination-secure=false \
--state-path ./tmp/state.db \
--resumeStep 4: Enable Observability
Add --status-addr to expose metrics and status endpoints:
godwit sync \
--source ./data \
--destination s3://my-bucket/backup \
--destination-endpoint localhost:9000 \
--destination-access-key access_key \
--destination-secret-key secret_key \
--destination-secure=false \
--status-addr :8080This exposes:
/metricsPrometheus-format metrics (counters, histograms, ETA)/statusJSON summary of the current run