1.0.0-beta.23 (2026-07-08)
⚠ BREAKING CHANGES
- remove deprecated
as_slicestdlib methods (#13192) - remove deprecated
std::hash::keccakmodule (#13193) - stop recording trait methods in module scope (#13102)
- ACIR instrumentation and optimization (#13085)
- report ambiguous qualified inherent method calls (#13045)
Features
- acir_gen: Fold predicated constant-index array_set into AcirValue::Array (#13223) (8ece77d)
- acir_gen: Initialize parameter-array memory blocks lazily (#13222) (64f7718)
- acir_gen: Resolve constant-index vector reads at compile time (#13230) (a552266)
- Add
nargo fetchcommand (#12897) (1012df5) - Add max(), min(), and bits() methods for all integer types (#11741) (41259e3)
- Allow assigning through any reference expression with
*(#12951) (9defb61) - Batch spill (#13189) (50b9b52)
- cli:
nargo add(#13134) (84a1d84) - comptime: Coerce to
FunctionDefinitioninhandle_attribute_arguments(#13194) (0addc04) - comptime: Implement
named_attribute_argsfor{Type|Function}DefinitionandModule(#13195) (e0a058b) - debug: Add source locations to
--count-array-copiesflag (#12067) (d3d1686) - fmt: Comments reflow (#12746) (8799409)
- fuzz:
just fuzz-reprorecipe and nargo-project emission for AST fuzzer seeds (#13272) (64e8d78) - Handle
super::superin paths (#12968) (4fd0144) - Impl doc comments (#13050) (c9ac18b)
- Preserve global identifiers in #[abi] contract artifact output (#12660) (7c46f7d)
- Record inherent impls (#12995) (683cded)
- Search in nargo doc (#13175) (40fe6c9)
- ssa: Deduplicate pure Brillig calls from a Brillig caller (#12806) (17be732)
- ssa: Only merge modified array indices (#11512) (e4dcf93)
- ssa: Post-flattening validation pass for escaping side-effects (#13084) (d13cf5e)
- ssa: Validate stated purity against computed purity in parser (#12812) (e26f412)
- stdlib: Add
BoundedVec::set_len(#13136) (8a14aa4) - stdlib: Add
BoundedVec::truncate(#13137) (96542e5) - Validate
array_setin-place mut not followed by read w/oinc_rc(#12707) (ebfbc28) - Validate between SSA passes (#13235) (9adfbec)
Bug Fixes
- acir: Add defensive checks from security audit (#13006) (a09fdbc)
- acir: Handle empty array
value_typesinmake_array_set_result_value(#13035) (16b3034) - acvm: Treat Opcode::Call as a side-effect boundary in RangeOptimizer (#13130) (d62435e)
- Add mono error for functions in globals (#13100) (73cc02b)
- AES-tagged length diagnostics in comptime aes128_encrypt (#13065) (042fd6a)
- Agree on zero-limb field decomposition across all contexts (#12849) (9da3371)
- Allow reference parameters when dispatching brillig functions (#12882) (7438ffe)
- Always restore local_module during elaboration (#12916) (b3fa07d)
- Assume associated-type bounds from a trait's where clause in default methods (#13283) (9db4e14)
- ast_fuzzer: Stop misreporting IndexOutOfBounds and Dynamic string assert errors (#12878) (351ae05)
- Avoid constant-folding ICE on const Brillig calls with ZST array arguments (#13119) (79c9b2c)
- Avoid indent underflow panic when pretty-printing an unmatched right brace (#13177) (45e4c76)
- brillig: Assert checked add/mul destination does not alias operands (#12998) (f3db4f4)
- brillig: Assert opcode is a Call in add_unresolved_external_call (#13001) (a7d6e50)
- brillig: Make unsigned modulo unrepresentable on signed operands (#13000) (e744d00)
- brillig: Reclaim spill slot when a reloaded transient value dies (#12949) (c90321f)
- Check comptime-only types in constructor expressions (#13056) (c70a803)
- Check deferred private import in intermediate segments (#13039) (b829499)
- Check failures in intermediate CheckedCasts in monomorphization (#12919) (510e128)
- Check infix result type during monomorphization (#12917) (e0f6faa)
- Check intermediate
usesegment visibility against its declaring module (#13227) (b550aa9) - Check intermediate path segment visibility against its declaring module (#13204) (b9e47b2)
- Check module visibility for TypedExpr (#13304) (eee1497)
- Check that arrays in the ABI do not exceed the witness size limit (#13252) (357d738)
- Check that msm and embedded_curve_add points are all or nothing (#12658) (83cc0ec)
- ci: Skip benchmark store steps on external PRs (#12932) (83427a1)
- ci: Skip playwright install-deps for chromium-only jobs (#13173) (04903a3)
- Clearer errors for associated item failed accesses (#13182) (d1b5374)
- Comptime as_witness returns unit, not its argument (#12865) (81b4693)
- comptime: Array incorrectly displayed as vector (#13248) (4a587d9)
- comptime: Copy vector pop/remove temporaries to avoid aliasing source (#12887) (62ec6eb)
- comptime: Reject Field division by zero in Integer::Div (#13017) (d3838cf)
- Construct element_type_sizes on demand to avoid unused memory block (#13278) (3771b2e)
- Disallow unpacking in ABI (#12721) (cd55ea9)
- Do not inline in vector ops with dynamic array (#13242) (8167acd)
- docs: Noindex non-default documentation versions (#13072) (3d8b4ea)
- Don't leak private type/value through colliding import (#12848) (fd5a8bc)
- driver: Embed the stdlib in debug builds (#13052) (2cddd32)
- Eager normalization of concrete trait constraints (#12888) (bce9698)
- Elaborate comptime macro call arguments in comptime context (#12953) (6819bcd)
- elaborator: Suppress duplicate ICE when interpreting parser-error nodes in comptime (#12679) (1a5e8b3)
- Enforce caller visibility for trait methods in
as_typed_expr(#12851) (1c0757b) - Ensure index-out-of-bounds for empty-sized arrays (#12807) (7c08b6d)
- enums: Resolve turbofish on enum variants (#13070) (75f36a8)
- Error on oracle functions with reference parameters (1) (#12947) (cb7060d)
- expand: Make it work in the stdlib (#12772) (0b6f6e9)
- Fix 'multiple impls match' error for partially-generic object types (#12899) (bf93ec7)
- Fix grandparent trait associated types (#12890) (3125ff4)
- Fix more overlapping impls (#12850) (0eb306d)
- Fix SSA normalization when the entry block is a back-edge (#13249) (737e5e5)
- Follow bindings on Kind (#12925) (3246b5e)
- frontend: Accept signed integer MIN literals in type position (#13131) (1fb4846)
- frontend: Clean error when
breakinwhilecondition w/o outer loop (#13171) (df368ec) - frontend: Disallow
#[fuzz]attribute onimplmethods (#13143) (5b02de0) - frontend: Disallow
#[fuzz]/#[test]on trait declaration methods (#13205) (bb01f1e) - frontend: Disallow pub on fold function parameters and return (#12895) (d477fd3)
- frontend: Eagerly resolve queued trait constraints at call sites (#9430) (#12397) (a1de3e9)
- frontend: Force unconstrained when monomorphizing into unconstrained fn target (#12831) (85425c7)
- frontend: Keep all captures when lowering comptime fmtstr with duplicate names (#13129) (9e56dc9)
- frontend: Keep signature usage-marks when a meta is resolved inside a speculative probe (#13140) (54fb7a5)
- frontend: Keep singleton tuple arity in comptime pattern reflection (#12879) (e108bab)
- frontend: Key elided associated-type bounds on rigid generic (#13030) (4d9e4b9)
- frontend: Key foreign proxy cache on monomorphized type (#12863) (1b396ed)
- frontend: Pin associated types in assumed trait constraints (#13015) (bc46fb6)
- frontend: Preserve generic args for primitive type aliases in static trait methods (#13042) (ba6b35c)
- frontend: Preserve nested CheckedCast validation obligations (#13018) (27e7af9)
- frontend: Reject #[oracle] attribute on impl methods (#12808) (affc2c0)
- frontend: Reject enum returns across the unconstrained boundary in monomorphization too (#12976) (c5911bf)
- frontend: Reject returning enums from unconstrained to constrained, allow passing them in (#12955) (e20bdd1)
- frontend: Resolve deferred struct fields when elaborating struct patterns (#12880) (f6741be)
- frontend: Resolve trait associated constant accessed via trait name (#13112) (1b9e0d0)
- frontend: Restore full method context on comptime macro re-entry (#13135) (0c4552f)
- frontend: Roll back
GlobalValue::Resolvingsentinel on failed comptime global resolution (#13067) (bab1ec1) - frontend: Tag expr_as_lambda param vector as [(Expr, Option<UnresolvedType>)] (#12971) (0140a14)
- frontend: Use a deterministic hash for comptime hash builtins (#12934) (508db1a)
- frontend: Use resolution scope for trait-in-scope selection in Expr::resolve (#13027) (f0e3473)
- fuzz: Handle
Divoverflow message equivalence (#13036) (a724dd4) - fuzz: Print Program 2 in AST-fuzzer comparison output and remove dead reduce.sh (#13270) (f3797f7)
- Handle zero step for loop termination (#13240) (9cf8778)
- Implement attributes on trait methods (#13144) (97720eb)
- Improve the reporting of global and function name clashes (#12973) (8752ed6)
- Incorrect empty-loop condition for
!=loops (#13057) (d6418fa) - Interpreter maintainability issues (#12999) (1db1bcc)
- interpreter: Clone nested array in array_set in ACIR (#13247) (d4ba2d1)
- licm: Don't use loop bounds as a value range for non-unit-step != loops (#12981) (d320275)
- licm: Guard Div/Mod hoist against inverted induction-variable bounds (#12969) (be37712)
- Limit killed optimization in ownership pass (#13099) (fd5f541)
- Loop induction uses the correct block parameter (#13118) (bd612e8)
- Loop invariant equality check simplification works with non-unit steps (#12861) (c19a510)
- Loop pre-header block collection (#12928) (7e0660d)
- lsp: Show function where clauses in hover (#12985) (eb63bb8)
- Make
FunctionDefinitioncoercion in meta-attributes work with inherent methods (#13259) (0df1491) - Make attr eval order deterministic in impls (#12935) (1aead53)
- Make check_type reuse checks from convert_type (#12950) (e0a4d38)
- Make missing-Brillig-constraint check order-independent (#13113) (61d1c53)
- Missing lazy FuncMeta elaboration in global resolution (#13059) (0e18f89)
- Monomorphization error when calling a disabled function (#13145) (23042de)
- monomorphization: Include closure env (#12775) (f757381)
- monomorphization: Set unconstrained flag on no-capture lambda type (#13005) (f98ff8e)
- nargo_doc: Decode generic trait-impl anchors in search URLs (#13224) (4d5036f)
- nargo: Report dependency cycles using normalized manifest paths (#13048) (ef7c1c5)
- Nested match unreachable warning (#13185) (1c2ec0d)
- Never lookup a path as a value from scracth, in the prefix case (#13210) (9831014)
- Order match struct-pattern fields by declaration, not field name (#12798) (94083b2)
- ownership: Do not confirm/kill on assignment when
breakorcontinueis present (#13153) (83edc2a) - ownership: Tripwire for array/slice match patterns in ownership pass (#12970) (369ff2b)
- Parse parenthesized numeric type expressions before outer operators (#13109) (e0b8f27)
- Parse type-level integers in .as_type (#13043) (53a93a1)
- parser: Preserve tails spliced onto interned lvalues in as_expr (#13032) (39140f1)
- Preserve clone around
str_as_bytes/array_as_str_unchecked(#12815) (3c775dc) - Preserve fully-qualified trait call syntax if it clashes with inherent method (#13207) (2ae554d)
- Preserve hex seeds in nightly fuzz Slack alert (#13094) (d8610fa)
- Preserve non-UTF-8 bytes when rendering comptime values to CtString (#13168) (6456a59)
- Prevent stack overflow on deeply nested blocks (#13184) (f212af7)
- Properly check visibility in
Self::methodpaths (#12747) (a0738c3) - Prune stale folded str<N> assertion error selectors from ABI (#13061) (28a7738)
- Publish msgpack_tagged crates before acir_field (#13273) (7f08967)
- Push comptime interpreter call stack before mutating binding state (#13066) (12c0a03)
- Rebind NamedGeneric when unquoted in a new context (#13238) (2964d57)
- Record trait default method locations for backtraces (#13120) (6f84214)
- Reject comptime oracle functions (#12915) (4a08294)
- Reject macro-spliced private types (#12956) (02f00e9)
- Report "Assertion is always false" diagnostic for contract crates (#12926) (214091e)
- Report ambiguous qualified inherent method calls (#13045) (ecd0282)
- Report logical index in OOB error in dynamic composite arrays (#13237) (d09de15)
- Resolve enum variants and associated constants via a type-path expression (#13241) (9309d1a)
- Resolve shadowed comptime variables in source order (#12867) (c82488b)
- Revalidate resolved TypedExpr values in their final expansion context (#13179) (61b3eee)
- ssa_gen: Always record error type, even for strings (#12858) (a927d68)
- ssa: Add constraint when simplifying zero-sized vector remove (#13069) (4b972fd)
- ssa: Allocate a fresh element-type-sizes block for grown helper tables (#13123) (1e00f5b)
- ssa: Bail out of Brillig array offset when shifted index overflows addressing bits (#13122) (7e07343)
- ssa: Classify VectorPushBack as PureWithPredicate (#12814) (802730c)
- ssa: Correct transposed sha256_compression constant-fold bindings (#12975) (3692122)
- ssa: Do not deduplicate with instruction result potentially modified by vector intrinsic (#12993) (8d3564e)
- ssa: Don't treat skipped equality-guarded loop bodies as executed (#12901) (29265c1)
- ssa: Exclude swapped-in loop siblings from
array_setRC alias-set inarray_set_rc_invariant(#12929) (6e49076) - ssa: Gate squared-zero constraint decomposition on Field or checked Mul (#12544) (79cc04f)
- ssa: Immutable-reference call arguments must keep prior stores live (#12938) (fc74f57)
- ssa: Keep capacity backing in interpreter vector_pop_back (#12936) (fa5c62e)
- ssa: Keep checked overflow check when simplifying +0/-0/*1 on unfit operands (#12982) (18906e1)
- ssa: Keep out-of-bounds constant array-get well-typed for arrays of tuples (#13178) (932383b)
- ssa: Keep sibling loop-bound error through ACIR unroll fallback (#12873) (359f162)
- ssa: Map Brillig-offset constant index back to logical space when folding make_array reads (#13200) (b8a24b5)
- ssa: Only restore unfit operands for signed checked arithmetic (#13221) (8faface)
- ssa: Preserve non-target branch arguments in check_for_double_jmp (#13060) (5450c1e)
- ssa: Preserve out-of-range signed constants in SSA parser roundtrip (#12896) (2521f7b)
- ssa: Preserve shared join block params when unrolling a constant JmpIf (#12964) (dd40bc4)
- ssa: Prevent re-insertion in
load_store_forwardingwhile relying on a frozenAliasAnalysis(#13040) (28540bd) - ssa: Reduce numeric values to range when printing in the SSA interpreter (#13282) (7fdc101)
- ssa: Reject dynamic vector intrinsics over reference elements (#12902) (dac0942)
- ssa: Reject raw narrowing casts in the SSA validator (#13051) (0259e88)
- ssa: Remap loop-header instruction results referenced outside the loop during unrolling (#13245) (78816cf)
- ssa: Restore unfit operands in the interpreter's checked arithmetic (#13142) (c1c4a75)
- ssa: Retain MSM scalar limb range checks for constant infinity points (#12885) (235e1a7)
- ssa: Trap constant out-of-bounds Brillig array ops instead of al… (#13114) (4123bd2)
- ssa: Treat ECDSA predicate as a u1 in simplify_signature (#12974) (6dd90ec)
- ssa: Truncate signed-to-signed narrowing cast constants (#12826) (d09400c)
- stdlib: Absorb tail not prefix in Poseidon2Hasher residual block (#13063) (dfb2f42)
- stdlib: Preserve tail storage in constrained extend_from_bounded_vec (#13098) (2a6b6be)
- Stop AST fuzzer generating constrained deref-assignments of reference-containing values (#12910) (2ce7864)
- Trait vs module-private-impl visibility (#13101) (69d41f6)
- Ts codegen for Unit/void functions (#13183) (536fe15)
- Turbofish when used on a constructor in match patterns (#13236) (8757d13)
- Two-pass trait constraint resolution (#12809) (fe9a60a)
- Undo trait self binding in monomorphization (#12921) (5090141)
- Unify in comptime checked_transmute (#13011) (6150bbc)
- Update forward order to max cost ordering (#13170) (2519cea)
- Use global comptime-value in ABI (#12714) (7a7deaa)
- Use trait impl generics in associated constant lookup (#12758) (21a26c2)
- wasm: Reject unsafe numbers in ABI (#13161) (247356c)
- wasm: Reject unsafe numbers in ABI after decoding them (#13226) (0353770)
- Wrong index increment in databus for nested arrays (#12773) (08479d4)
- Zeroed array of references must not share one allocation (#12869) (780d409)