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 up to 10GB. Perfect for testing and small transfers.
Licensed Mode
Up to 10TB of data. 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:
/metrics— Prometheus-format metrics (counters, histograms, ETA)/status— JSON summary of the current run