Wrenlift

Linux

Wrenlift ships as a static binary on Linux — no runtime install, no glibc version dance. AOT compiled programs are real ELF executables you can drop into any container, .deb, or .rpm.

Install

The one-liner works on every distro:

curl -fsSL https://wrenlift.com/install.sh | bash

Drops wlift, hatch, and wlift-lsp into ~/.local/bin. See the install page for the full set of env-var knobs.

Distro packages

Per-distro packages aren't published yet. For now grab the binaries from the release page and bake them into your own .deb / .rpm / PKGBUILD — the binaries are statically linked and have no runtime deps.

Runtime dependencies

The wlift and hatch binaries are statically compiled — no glibc version pin, no dynamic libraries to track. Programs built with wlift --aot link the same way.

Build an AOT binary

wlift my_app.wren --aot ./my_app
./my_app

The output is a regular ELF executable. Inspect it with file:

$ file ./my_app
my_app: ELF 64-bit LSB executable, x86-64, ...

AOT binaries embed the full WrenLift runtime, so the file is in the 2–5 MiB range for a hello-world. Strip symbols with strip ./my_app to drop a megabyte or so on release builds.

Cross-compile from a Linux host

wlift --aot respects the standard Rust --target triples once the matching libwren_lift.a staticlib is on disk. The simplest path is to install Wrenlift on the target machine directly; cross-compiling from a build host requires the matching Rust toolchain to be installed:

rustup target add aarch64-unknown-linux-gnu
WLIFT_TARGET=aarch64-unknown-linux-gnu \
  wlift my_app.wren --aot ./my_app-arm64

Packaging

For container builds, the static binary needs no base:

FROM scratch
COPY ./my_app /my_app
ENTRYPOINT ["/my_app"]

For Debian / RPM, drop the binary in /usr/local/bin with no Depends: line. The runtime is fully self-contained.