Getting started
Install the SDK
Download, verify, and configure the coordinated C2Go SDK and runtime module.Maintained byC2Go contributorsThe release archive is a relocatable native SDK. It contains the three command-line tools, C2Go headers, Clang runtime resources, and the license records required for redistribution. It does not contain repository checkouts or source trees.
Requirements
- Go 1.25.x or 1.26.x. Go 1.27 and later fail closed until a newer centralized contract provider validates them.
- The archive matching the OS and architecture of the machine that will run the tools.
- A Go module that pins
github.com/c2gohq/c2go_libctov0.20260809.0-rc.5.
Choose an archive
| Host archive | C2Go target triple |
|---|---|
linux-amd64 |
x86_64-unknown-linux-goabi |
linux-arm64 |
aarch64-unknown-linux-goabi |
windows-amd64 |
x86_64-pc-windows-goabi |
macos-arm64 |
aarch64-apple-darwin |
Download the archive and its same-named .sha256 sidecar from the release page, then verify only the platform archive you downloaded:
archive=c2go-toolchain-v0.20260809.0-rc.5-linux-amd64.tar.gz
sha256sum --check "$archive.sha256"
If you downloaded every release archive, SHA256SUMS can verify the complete set at once. On macOS, use shasum -a 256 -c "$archive.sha256". On Windows PowerShell, compute the hash with Get-FileHash -Algorithm SHA256 and compare it with the sidecar.
Do not skip verification: this release is not signed.
Configure your shell
Extract the archive, then keep its bin/, include/, and lib/ directories together:
export C2GO_HOME=/absolute/path/to/c2go-toolchain-v0.20260809.0-rc.5-<target>
export PATH="$C2GO_HOME/bin:$PATH"
c2go-clang --version
c2go-lto --version
c2go-bind --version
In -fc2go mode, c2go-clang discovers both the top-level c2go-libc headers and its Clang resource directory automatically. Do not add a host libc include directory.
c2go.h belongs to the Clang resource tree at lib/clang/<version>/include/c2go.h. The SDK’s top-level include/ directory contains the tracked public c2go-libc headers.
Pin the runtime module
Inside your project:
go mod init example.com/demo
go get github.com/c2gohq/c2go_libc@v0.20260809.0-rc.5
The Go runtime package is distributed as a module rather than a precompiled archive because Go package archives depend on the exact Go version, dependency build IDs, and build settings.
Schema-v2 generated libraries check both their C2Go ABI epoch and Go-toolchain contract epoch against that module at compile time. A compatible future Go minor release therefore needs a c2go-libc provider update, not regeneration of every generated library. See Versions and compatibility for the complete upgrade rules.
macOS quarantine
The macOS archive is not notarized. After verifying the checksum, remove Gatekeeper quarantine only if macOS blocks the extracted tools:
xattr -dr com.apple.quarantine "$C2GO_HOME"
Do not apply this command to a broader directory.
Confirm the layout
The SDK root should contain:
bin/ c2go-clang, c2go-lto, c2go-bind
include/ c2go-libc public headers
lib/clang/<version>/ Clang resources, including c2go.h
licenses/ component and third-party notices
BUILD-INFO.json exact build and checksum metadata
toolchain.lock.json coordinated source snapshot
You are now ready to build Hello World.