tonic

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.

Source → Native

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!

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

Bundles for macOS arm64 and Linux x86-64 are on the GitHub release.

Full installation guide

Installation

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