Rekindle makes Mix the entry point for a Rust UI project without replacing Cargo. Elixir owns installation, target selection, development supervision, and artifact publication. Cargo owns Rust dependencies, compilation, profiles, target directories, and incremental caches.
Application-owned client
Installation creates a Cargo project inside the Elixir application:
client/
├── Cargo.toml
├── rust-toolchain.toml
├── build.rs # Slint build script, when selected
├── public/
├── ui/ # Slint UI sources, when selected
└── src/
├── app.rs # eframe application, when selected
├── lib.rs
└── bin/
├── web.rs
└── desktop.rsThe application owns and edits this project. Rekindle does not hide it behind a global cache or a generated dependency.
Shared UI and application logic remains outside the target binaries. GPUI keeps
it in client/src/lib.rs, eframe uses client/src/app.rs, and Slint uses
client/ui/app-window.slint with bindings in client/src/lib.rs. The binaries
under client/src/bin select the browser or native platform and call that
shared code. Cargo features let one crate include only the platform dependencies
required for each target.
Development and release
In development, Rekindle owns the client watcher, Cargo builders, and selected
target runtime. The Rekindle.DevServer Plug starts Web development on the
first request and serves successful generations, so the normal Phoenix command
remains mix phx.server. mix rekindle.dev provides the same runtime without
an HTTP server and is the entry point for desktop development, which starts and
replaces the selected native process.
For production, Rekindle runs the configured Cargo release profile and publishes an immutable Web generation or a desktop executable and manifest. The resulting artifacts belong to the host application's ordinary deployment or packaging process.