Typed programs.
Resilient systems.
Make your intent checkable
Section titled “Make your intent checkable”Model your data with unions and structs. Handle every case. Describe the messages your processes receive. Let the compiler check the connections before your application starts.
pub type Job = Queued(id: Integer) | Running(id: Integer) | Finished
pub fn describe(job: Job) -> Binary { match job { Queued(id) -> "Job #{id} is waiting" Running(id) -> "Job #{id} is running" Finished -> "All done" }}At home on the BEAM
Section titled “At home on the BEAM”Elixir interop. Generated modules are ordinary Elixir. Use Mix, OTP, and existing libraries through explicit typed interfaces.
Types for concurrent systems. Typed mailboxes and OTP behaviours make process protocols visible in the code. Supervision keeps its native BEAM semantics.
Built for readable changes. Explicit public signatures and compiler errors give people and coding agents concrete feedback as a codebase grows.
Try the prerelease
Section titled “Try the prerelease”Gale is under active development. Start with this repository’s Dev Container, which includes the compiler and the Elixir toolchain:
git clone https://github.com/mvkvc/gale_std.gitcd gale# Open in VS Code → Dev Containers: Reopen in ContainerThen run an example:
cd examples/numbersmix testFollow the tour, read the language reference, or explore typed JSON schemas. Every tour chapter has a matching, tested example project.