Skip to content

v0.13.0

Latest

Choose a tag to compare

@github-actions github-actions released this 13 Aug 13:50
· 9 commits to main since this release
v0.13.0
aa68bfc

Added

  • Single-binary distribution via Burrito. The new Packaging with Burrito guide walks through wrapping any ExRatatui.App into a self-contained native binary per OS/arch — Linux x86_64, macOS x86_64, macOS aarch64, and Windows x86_64. End users download one file, run it, and the BEAM + ex_ratatui + Rust NIF unpack into a per-user cache on first launch. On Linux the wrapper runs a musl runtime, so releases build with TARGET_ABI=musl and bundle the musl NIF — self-contained since the 0.12.0 fix for #83. examples/burrito_demo/ is the reference consumer, and .github/workflows/burrito_demo.yml is the regression CI proving the linux (musl), macOS apple-silicon, and windows targets build + smoke-test green on every push — intel macOS builds the same way, it just has no CI leg.

  • ExRatatui.Burrito — runtime support for wrapped TUIs. start_link/3 is the supervised entry point the scaffolded CLI delegates to. Inside a wrapped binary (detected via the __BURRITO env var burrito's wrapper sets) it runs the TUI synchronously, blocking application startup for the TUI's lifetime — burrito boots the release with :elixir.start_cli, which halts the node the moment boot's -s call returns, so a TUI spawned into an async task would be killed before it drew a frame; blocking the boot keeps the VM alive until the TUI exits (which is why it stops the VM with System.halt/1 — a graceful System.stop/1 would deadlock against the still-starting application). Outside a wrapped binary (consumer mix test/iex -S mix) it is an async no-op that never takes over the session. The underlying main/3 handles --version anywhere in argv for TTY-less smoke tests (forcing the NIF dlopen first, so a NIF/host mismatch fails loudly), and maps every failure path — TUI crash, failed start, or a raise in the entry point — to a stderr message and a non-zero VM exit. Living in the library, protocol fixes reach existing consumers with a dep upgrade instead of freezing in generated code. verify_linux_nif/2 is a release step wired between :assemble and &Burrito.wrap/1 that fails the linux build with the exact fix when the NIF the release loads is glibc — the forgotten-TARGET_ABI=musl mistake becomes a build error rather than a shipped binary that hangs at NIF load on every end-user machine. It scans only that one NIF: priv/native accumulates the artifacts of every version and ABI resolved there over a project's life, and all of them ride into the release, so a stale glibc sibling must not fail a correct build.

  • mix ex_ratatui.gen.burrito — Igniter-based generator. Patches a consumer's mix.exs (adds {:burrito, "~> 1.6"}, merges the four standard targets plus the verify_linux_nif step into releases: without disturbing existing entries — a non-literal value it cannot patch, or an existing entry for the app, produces a warning instead), drops a thin CLI shim (use Task, keyed on the CLI module so the wiring stays idempotent) delegating to ExRatatui.Burrito.start_link/3, and adds a .mise.toml pinning zig 0.16.0 (Burrito 1.6's required Zig; 0.15.2 cannot link on macOS 26 "Tahoe" — ziglang/zig#31658). --ci github additionally scaffolds a .github/workflows/release.yml that builds + publishes binaries to GitHub Releases on tag push. Igniter is declared optional: true; projects that never run the generator pay nothing for it, and invoking the task without Igniter installed prints an install hint and exits cleanly. examples/burrito_demo's CLI and .mise.toml are pinned byte-for-byte to the generator's output by tests, so the demo cannot drift from what consumers scaffold.