Install and Verify
gfrm release binaries run on clean machines. You do not need Dart, FVM, Node, or Yarn on the target host.
Verify checksums
# Linux or macOS with sha256sum
sha256sum --check checksums-sha256.txt
# macOS with shasum
shasum -a 256 --check checksums-sha256.txt
macOS Intel
unzip gfrm-macos-intel.zip -d ./gfrm-macos-intel
cd ./gfrm-macos-intel
chmod +x ./gfrm
./gfrm --help
macOS Apple Silicon
unzip gfrm-macos-silicon.zip -d ./gfrm-macos-silicon
cd ./gfrm-macos-silicon
chmod +x ./gfrm
./gfrm --help
Linux
unzip gfrm-linux.zip -d ./gfrm-linux
cd ./gfrm-linux
chmod +x ./gfrm
./gfrm --help
Windows (PowerShell)
Expand-Archive .\gfrm-windows.zip -DestinationPath .\gfrm-windows
.\gfrm-windows\gfrm.exe --help
macOS notes
- Choose
intelorsiliconbased on the machine type. - If Gatekeeper still blocks execution after unzip, use the troubleshooting fallback:
xattr -d com.apple.quarantine ./gfrm
For macOS release signing and notarization details, see macOS Release Artifacts.
Docker
Run gfrm without installing Dart, FVM, or any runtime on the host. Only Docker is required.
Build the image (from the repository root, requires the source clone):
docker build -t gfrm .
Run a migration:
docker run --rm \
-v "$(pwd)/migration-results:/app/migration-results" \
-e GITHUB_TOKEN="$GITHUB_TOKEN" \
-e GITLAB_TOKEN="$GITLAB_TOKEN" \
gfrm migrate \
--source-provider gitlab --source-url https://gitlab.com/owner/repo \
--target-provider github --target-url https://github.com/owner/repo
Mount migration-results/ so artifacts persist after the container exits.
Pass forge tokens via -e — never embed them in the image.
Resume a failed run:
docker run --rm \
-v "$(pwd)/migration-results:/app/migration-results" \
-v "$(pwd)/sessions:/app/sessions" \
-e GITHUB_TOKEN="$GITHUB_TOKEN" \
-e GITLAB_TOKEN="$GITLAB_TOKEN" \
gfrm resume --session-file sessions/last-session.json
Mount sessions/ as well so the saved session file is available for resume.