Installation and releases
Gale integrates with an Elixir 1.20 / OTP 28 project through mix_gale.
Add :gale before the ordinary Mix compilers and add mix_gale as a build
dependency. The prerelease packages are currently available from this repository.
mix compile locates the compiler in this order:
GALE_PATH.- The project’s
gale: [path: ...]setting. galeonPATH.- A verified release in the user cache, downloading it if necessary.
Until the public release endpoint is configured, set GALE_DOWNLOAD_BASE_URL
to your R2 public URL including its /gale prefix, or use
gale: [download_base_url: "https://your-public-host/gale"] in mix.exs.
Users do not need to install OCaml or manually copy a compiler binary.
Each download requires HTTPS, a matching SHA-256 checksum, and the expected
--version response before installation. A verified cache works offline.
GALE_CACHE_DIR overrides the default OS user cache. Set
gale: [auto_download: false] to require an explicitly installed compiler.
mix gale_std.path prints the resolved compiler path for tools. The VS Code
extension uses it in a Mix workspace and uses mix compile for its compile
command. gale_std.path and GALE_PATH remain available for compiler development.
Release layout
Section titled “Release layout”gale/ 0.1.0/ gale_linux_x86_64_0.1.0 gale_linux_x86_64_0.1.0.sha256 gale_linux_arm64_0.1.0 gale_linux_arm64_0.1.0.sha256 gale_macos_x86_64_0.1.0 gale_macos_x86_64_0.1.0.sha256 gale_macos_arm64_0.1.0 gale_macos_arm64_0.1.0.sha256Linux releases use the Ubuntu 24.04 native toolchain (glibc 2.39 or newer). Alpine/musl and Windows are not release targets yet. macOS releases use macOS 15 runners. These builds must pass the release matrix before a release is announced; local Linux development does not validate the other platforms.
Configure publishing
Section titled “Configure publishing”The manually dispatched gale_build workflow builds and tests all four
platforms, then uploads the binaries and checksum sidecars to R2. It uses native
OCaml toolchains so released executables do not depend on the developer’s Nix
store. Set these in the repository or its release environment:
| Setting | Kind | Value |
|---|---|---|
GALE_R2_BUCKET |
Variable | Bucket name |
GALE_R2_ENDPOINT |
Variable | https://ACCOUNT_ID.r2.cloudflarestorage.com |
GALE_R2_ACCESS_KEY_ID |
Secret | R2 API access key ID |
GALE_R2_SECRET_ACCESS_KEY |
Secret | R2 API secret key |
Enable public reads through an R2 custom domain or public development URL. The private S3-compatible upload endpoint is separate from the public download URL. Never put R2 credentials in project configuration or client downloads. Use a new version for every published build; release objects are served with immutable cache headers.
The workflow fails when configuration is missing. Its requested version must
match gale --version. Uploads remain a CI operation; configuring the workflow
does not publish a release.
Website deployment
Section titled “Website deployment”Select GitHub Actions as the repository’s Pages publishing source. The
tour_deploy workflow validates the examples/tour synchronization and all
standalone snippets, builds the site, and deploys the static Pages artifact.
Pull requests use tour_check and do not deploy. The Pages configuration
supplies the site origin and repository base path.
Proof toolchain
Section titled “Proof toolchain”When source contains proof declarations, mix_gale automatically installs
F* 2026.08.16 with its bundled Z3 from the official release. The per-platform
SHA-256 pins live in libs/mix_gale/priv/fstar.json. mix gale_std.prover installs it
explicitly and prints its executable path; GALE_FSTAR_PATH overrides it.
The full bundle is cached separately from the compiler. Ordinary projects do
not need to download it. Proof failure or a missing verifier prevents emission.