Compile Elixir applications into single, easily distributed executable binaries
Do you have Go-envy for how easy it is to distribute commandline utilities? Or maybe your escript grew too much and you hit a wall with a library that required platform-specific code? Or that OTP release seemed so easy to distribute, but somehow running untar was just enough friction to make someone complain about your use of Elixir.
Bakeware addresses these issues by extending Mix releases with the ability to turn Elixir projects into single binaries that can be copied and directly run. No need to install Erlang or untar files. The binaries look and feel like the build-products from other languages.
Here's a quick list of features:
bakewaredependency and the Bakeware assembler to your Mix release settings
How does Bakeware work?
Bakeware combines a compressed OTP release archive with a smart platform-specific self-extractor. The self-extractor expands the OTP release to a cache on first execution and reuses the cache for subsequent invocations. Due to the use of Zstd compression, the expansion is very fast and mostly invisible to the end user.
The best way to try out Bakeware is to clone this repository and try out the examples.
Since the whole point of this project is to avoid needing to install Elixir and
and build the binaries yourself, you can download ones that we built from the
page. We built them
for 64-bit Linux (we're using Debian-based OSs) and MacOS. Download the tarball
for your platform. The binary names correspond to the examples. Please read the
README.md's for information on commandline arguments and what to
# E.g., on MacOS, download and untar bakeware-examples-macos.tgz $ cd MacOS $ ./simple_app Hello, OTP Application! Exiting...
Here's a list of the projects in this repository:
The following projects were a stretch goal of ours. These projects are a client library and an example server for automatically updating binaries. The idea is that applications can ask a server if an update is available. If one is, it is downloaded and the application is automatically restarted with the new version.
bakeware_updater- Small Elixir library to check update server for an available update, download it, and apply it to the existing executable
sous_chef- An example update server for binaries built with Bakeware