Unreleased
v0.6.0 - 2026-06-19
- Reframe Rusty Elixir as the high-level
defrustauthoring surface. - Add external Rust type specs through ordinary remote types such as
GeneratedOpts.OvalOpts.t(RustQ.Type.lifetime(:a)). - Add ordinary Elixir macro expansion before
defrustlowering so reusable Rusty-Elixir body fragments can usedefmacro,quote, andunquote. - Lower plural alias calls such as
Atoms.fill()to snake-case Rust module calls such asatoms::fill(). - Demote
RustQ.Meta.quotedandRustQ.Type.pathto low-level escape hatches instead of the normal authoring style. - Add small AST reuse bridges for RustQ-owned codegen helpers:
RustQ.Rust.ast_item/1,RustQ.Rust.ast_items/1, and the internalRustQ.Meta.item(module, name)/items(module, names)/ast!(module, name)helpers. - Add Rust AST support for receiver arguments and lifetime-bearing impl blocks,
including Rustler shapes such as
impl<'a> rustler::Decoder<'a> for Typeandfn encode<'a>(&self, env: rustler::Env<'a>) -> rustler::Term<'a>. - Dogfood Rustler helper generation through
defrustand RustQ AST builders: term helpers, opts helpers, term builders, cached atoms, atom decoders, tagged enum decoders/encoders, resources, and term decoder shells no longer rely on hand-written helper templates. Explicit rawNIF_TERMbuilders remain the unsafe escape hatch.
v0.5.1 - 2026-06-15
- Add generic Rust expression builders:
Rust.call_expr/3Rust.some/1Rust.none/0Rust.tuple/1Rust.cast/2Rust.question/1Rust.ref_expr/2
v0.5.0 - 2026-06-15
- Add template includes.
- Add composable RustQ splice groups.
- Use plain keyword splices for composition.
- Add structured include diagnostics.
- Add rustfmt option.
- Add generic Rust body/control-flow builders:
Rust.block/1Rust.let_/2Rust.let_mut/2Rust.assign/2Rust.call_stmt/3Rust.return_if/2Rust.if_/3Rust.if_let/4Rust.match_/2
- Document macro token placeholder limitation.
v0.4.0 - 2026-06-06
- Add generic Rustler builders for atom decoders, atom dispatch functions, and keyword/options helper functions.
v0.3.0 - 2026-06-06
- Remove the generic Rustler schema field group DSL. Prefer explicit fields in RustQ schemas or project-specific macros for domain shorthand.
v0.2.2 - 2026-06-03
- Add
RustQ.Rustler.resource_handle/2for generating a Rustler resource plus a decoder for Elixir-facing resource handle structs/maps. - Add Rustler schema field groups for reusable field sets with
use_fields/1. - Let Rustler schema nodes override generated Rust type names and Elixir module
names with
rust:andmodule:.
v0.2.1 - 2026-06-03
- Add
RustQ.Rustler.nif_export/2andnif_exports/1for generating exported Rustler NIF functions that delegate to handwritten implementation functions.
v0.2.0 - 2026-06-02
- Replace the separate
__expr_,__type_, and__splice_placeholder prefixes with one visually distinct__rq_placeholder prefix. - Templates now use forms like
__rq_Name,__rq_value!(),__rq_fields: (),, and__rq_items!();.
v0.1.2 - 2026-06-02
- Let Rustler schema field types reference schema nodes and tagged enums by
schema name, so examples can use
Contentinstead of generated Rust names likeExContent.
v0.1.1 - 2026-06-02
- Keep the packaged NIF crate out of parent Cargo workspaces when RustQ is used inside workspace-based projects.
v0.1.0 - 2026-06-02
Initial release.
- Parse, validate, render, bind, and splice Rust templates from Elixir.
~Rsigil for inline Rust templates.- Rust fragment builders for functions, structs, enums, impls, fields, constants, uses, modules, and type aliases.
- Rustler helper generators for atoms, NIFs, resources, option decoders, term helpers, term decoders, NIF structs, tagged enums, cached atoms, safe term builders, and explicit raw
NIF_TERMbuilders. rustq.exsmanifest DSL plusmix rustq.genfor generated file syncing and stale checks.- Rustler schema DSL for generating Rust NIF structs and tagged enums from Elixir schema definitions.