Added
-
Single-binary distribution via Burrito. The new Packaging with Burrito guide walks through wrapping any
ExRatatui.Appinto 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 withTARGET_ABI=musland 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.ymlis 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/3is the supervised entry point the scaffolded CLI delegates to. Inside a wrapped binary (detected via the__BURRITOenv 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-scall 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 withSystem.halt/1— a gracefulSystem.stop/1would deadlock against the still-starting application). Outside a wrapped binary (consumermix test/iex -S mix) it is an async no-op that never takes over the session. The underlyingmain/3handles--versionanywhere in argv for TTY-less smoke tests (forcing the NIFdlopenfirst, 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/2is a release step wired between:assembleand&Burrito.wrap/1that fails the linux build with the exact fix when the NIF the release loads is glibc — the forgotten-TARGET_ABI=muslmistake 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/nativeaccumulates 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'smix.exs(adds{:burrito, "~> 1.6"}, merges the four standard targets plus theverify_linux_nifstep intoreleases: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 toExRatatui.Burrito.start_link/3, and adds a.mise.tomlpinningzig 0.16.0(Burrito 1.6's required Zig; 0.15.2 cannot link on macOS 26 "Tahoe" — ziglang/zig#31658).--ci githubadditionally scaffolds a.github/workflows/release.ymlthat builds + publishes binaries to GitHub Releases on tag push. Igniter is declaredoptional: 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.tomlare pinned byte-for-byte to the generator's output by tests, so the demo cannot drift from what consumers scaffold.