Version 0.1.0-beta.3 / Beta
tonic
Elixir. Now casting native.
Your .ex modules. Your .exs scripts.
Compiled into native executables with LLVM.
Familiar language. A different destination.
Tonic takes supported Elixir source all the way to a standalone native program.
Open your spellbook.
Write Elixir. Run it anywhere supported.
hello.exs
defmodule Greeter do
def greet(name), do: "Hello, #{name}!"
end
IO.puts(Greeter.greet("world"))Your terminal
$ tonic run hello.exs
Hello, world!
$ tonic build hello.exs -o hello
$ ./hello
Hello, world!Your existing project
my_app/
├── mix.exs
├── mix.lock
├── config/
└── lib/Keep your project structure.
Mix and Hex still manage dependencies.
Your terminal
$ mix deps.get
$ mix tonic check
$ mix tonic build
$ mix tonic runThe installer adds the Mix tasks when Mix is present.
Same language
Elixir syntax, modules, scripts, and compile-time macros.
Your usual toolkit
Mix projects. Hex dependencies. Native build and run tasks.
A native runtime
Concurrent processes, supervision, and a moving garbage collector.
Equip Tonic
Ready to cast?
Start with a script or a small application. Install with Homebrew, a one-line script, or a Debian package. Each gets you the compiler, native runtime, and Mix tasks.
Get 0.1.0-beta.3Bundles for macOS arm64 and Linux x86-64 are on the GitHub release.
Full installation guideInstallation
macOS on Apple Silicon, or Linux x86-64.
brew install wess/packages/tonic
tonic --version
Compile with clang: the Xcode Command Line Tools on macOS, clang 18+ on Linux. Mix projects also require Elixir 1.18 / OTP 27. Linux builds require glibc 2.39+.
An early adventure.
Tonic 0.1.0-beta.3 is a beta. Compatibility is growing.
Tested package scenarios
Decimal 3.0.0 / Jason 1.4.4
NimbleOptions 1.1.1 / DeepMerge 1.0.0
Specific tests, not a guarantee that every package function works.
Know the boundaries
Distributed BEAM, hot code loading, arbitrary NIFs, custom dependency build managers, and umbrella root builds are outside this release.
Read the compatibility report