Skip to content

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:

  1. GALE_PATH.
  2. The project’s gale: [path: ...] setting.
  3. gale on PATH.
  4. 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.

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.sha256

Linux 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.

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.

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.

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.