Skip to content

v1.0.0-beta.20

Choose a tag to compare

@noirwhal noirwhal released this 13 Apr 17:20
b4236c1

1.0.0-beta.20 (2026-04-13)

⚠ BREAKING CHANGES

  • remove u1 type from user-facing Noir (#11753)
  • remove unnecessary state_len argument from `poseidon2_permu… (#11610)
  • Remove SignedField entirely (#11710)
  • Default constants to u32 (#11838)
  • remove deprecated StructDefinition (#11859)
  • comptime struct/enum/type (#11698)
  • Treat uses of comptime globals identically to comptime { GLOBAL_NAME } (#11627)
  • stdlib: remove deprecated type Vec from stdlib (#11282)

Features

  • Allow immrefs to go from acir to brillig (#12035) (6c53b58)
  • Avoid duplicated calculation of CFG (#12164) (fe15bae)
  • brillig: Block param coalescing (#11621) (7d07e18)
  • brillig: Function specialization for constant arguments (#11872) (20cd7b2)
  • brillig: Live intervals (#11725) (774f73c)
  • brillig: LRU-based register spilling (#11556) (39f25c9)
  • Clarify type mismatch errors when base names are equal (#12074) (3a0508e)
  • cli: Add --overwrite-return option (#11697) (4c95deb)
  • Comptime struct/enum/type (#11698) (abf4a87)
  • Group repeating sequences of call stack frames (#11691) (5fc2c79)
  • Implement Eq and Ord for tuples of up to length 12 (#11681) (5f7b06b)
  • Improve error location of necessary/unnecessary visibility (#11460) (12ecac9)
  • lsp: Show Nargo.toml errors as diagnostics and watch for file changes (#12153) (1a92d6f)
  • Only print SSA optimization result if it produced changes (#11587) (4e26919)
  • opt: Add simpler mem2reg pass (#11500) (2b09b8b)
  • opt: Change stdlib array methods to take immutable references (#11991) (39f39a5)
  • Primitive type aliases (#11882) (37725f5)
  • Remove u1 type from user-facing Noir (#11753) (f190e78)
  • Show function names in backtraces (#11483) (0adcf74)
  • Simplify vector_push_back when length is known for complex types (#11717) (95fc5e9)
  • ssa_fuzzer: Poseidon + compilation errors logging (#11877) (882d7cc)
  • ssa: Collapse redundant nested merges when flattening (#12116) (294a558)
  • ssa: Immutable reference type (#12182) (091a2f7)
  • ssa: Iterative dominance frontiers for mem2reg_simple (Cytron et. al 1991) (#12091) (2d3e6c6)
  • ssa: More aggressive Brillig loop unrolling (#7236) (8e57c6b)
  • ssa: Remove redundant block params (#12047) (c033e48)
  • ssa: Replace most usage of old mem2reg pass (#11935) (b48edd4)
  • stdlib: Add #[foreign(poseidon2_config_state_size)] and use static_assert in poseidon2_permutation (#11716) (4c33f8a)
  • Warn on unnecessary mut on variables (#11678) (f2116b0)

Bug Fixes

  • <Type>::trait_method and Type::trait_method fixes (#11636) (65c3939)
  • acir: Do not create an input witness when there are no input parameters (#11672) (f8685f7)
  • acir: Handle inserting into an empty vector at index 0 in ACIR (#11703) (0e02b0c)
  • acir: Just refer to pop in error message when the vector is empty (#11890) (4f7a709)
  • acir: Prevent mixed constant/witness scalar pairs in MSM opcode (#12039) (a9587c8)
  • acir: Unify empty vector handling in pop (#11688) (79e5f95)
  • acir: Use flat_element_types to set the value_types of AcirDynamicArray (#11719) (64b1b82)
  • Add killed set to fix regressions in reversed last use pass (#12174) (e63aa50)
  • Add type checking for constructor patterns in match expressions (#11887) (c10d1ea)
  • All or nothing for ECAdd (#11939) (97dec75)
  • Allow AsTraitPath in type expression arithmetic (#11960) (d3f1efe)
  • Allow user-defined items to collide with prelude items (#12112) (7878559)
  • Apply check on truncating output of unchecked sub only to signed types (#11814) (7104fb7)
  • Avoid duplicates when removing then inserting in hashmap (#12084) (ed8c124)
  • Avoid nondeterminism when reporting "Type annotation needed" (#12087) (279aafb)
  • Avoiding panic from cyclic global (#11537) (34e3758)
  • brillig: Differentiate LHS and RHS bit size in SHL and SHR (#11997) (24911f5)
  • brillig: Do not ignore the returned semantic length (#11878) (2446095)
  • brillig: Handle the 4th case in SpillManager::ensure_permanent_spill (#12027) (c90e834)
  • brillig: Mark ConditionalMov::destination as write in brillig_check (#11891) (3d8d3aa)
  • brillig: Prevent premature register deallocation in coalesced pairs (#11652) (824f568)
  • brillig: Protect against memory address overflows (#11864) (3a5091b)
  • brillig: Reuse transient spill slots when re-spilling an unmarked value (#11862) (f60c8ef)
  • brillig: Use LessThanEquals instead of LessThan in check_max_stack_depth procedure (#11895) (a2c2730)
  • brillig: Use reserved_len and returns_len in the stack frame bounds assertion in codegen_call (#11918) (44a6dd2)
  • Check a capture was inserted when computing the capture index (#11868) (f115dcc)
  • Check dominators when removing truncate instructions (#12095) (5939e7b)
  • Check for overlapping implementations (#11328) (de7e439)
  • Check mutability in *&mut x elaboration optimization (#12079) (8e1bf36)
  • Check oracle return type on any function expr, not only on calls (#12158) (1de1152)
  • Check types before globals when resolving named types (#11919) (679b429)
  • cli: Fail when interpret output or results change across SSA passes (#12138) (3964f5f)
  • cli: Wrap the DAP server input reader to fix JSON payloads (#12154) (04cba8d)
  • Clone generic binding values in comptime (#11765) (c9652be)
  • comptime: Follow bindings when interpreting format string (#11853) (363fc8a)
  • comptime: Implement Hash and PartialEq for TraitConstraint (#11809) (f1db02c)
  • Copy lambda env in comptime evaluation (#11731) (d6a4564)
  • Correct bit size assumption for bound constraint (#11654) (38bb8a4)
  • Correct comptime handling of bindings/generics in call_closure (#11732) (013636e)
  • Correct confirmed-moves optimization in ownership pass for cross-loop assignments (#12156) (f83ac7c)
  • Correct ECDSA doc comments and add curve order edge case tests (#12016) (b8e8f0d)
  • Correct index out of bounds location (#11685) (fffdad0)
  • Correct token conversion for Integer::Field in comptime (#11786) (0adc7fb)
  • Deduplicate traits (#11907) (79453fd)
  • Default constants to u32 (#11838) (53f935e)
  • Desugar op-assign during elaboration to avoid double evaluation of lvalues (#12123) (89f0a75)
  • Detect unconstrained callees via type for indirect calls (#11657) (2f24b9a)
  • Disallow mutating non-mutable references (owernship feature) (#11674) (f179cc0)
  • Disallowimpl Trait in invalid type positions (#11944) (1f71261)
  • Do not nest semi-colon inside Comptime statements (#11640) (26d12a0)
  • doc: Double-reexport can lead to empty module (#11665) (85aae28)
  • docs: Add v1.0.0-beta.19 versioned docs (#11724) (fa33ce4)
  • docs: Resolve #include_code macros in v1.0.0-beta.19 versioned docs (#11812) (da53c8f)
  • Don't panic on ABI tuple length mismatch (#12096) (4b1d34b)
  • Don't simplify x | MAX if x is signed (#12100) (49c7691)
  • Don't skip clone for vector operations in Brillig (#11485) (efc4e62)
  • Don't update the bindings when checking functions (#11844) (764aca4)
  • elaborator: Replace generics with fresh type variables in add_prepared_trait_implementation (#11598) (fb7837b)
  • Eliminate unnecessary clones on array indexing at last use (#12134) (36a8119)
  • Error on struct pattern syntax for enum variants (#11930) (974c3d4)
  • Error when missing trait items (#11922) (f7a7e6c)
  • Fix casting negative fields to Field (#11618) (d45f2b1)
  • Fix cycle in lookup_associated_type_in_parent_impls (#12160) (7245cf8)
  • Fix LICM hoisting failing constraints out of loops (#11771) (b79712e)
  • fmt: Indent block inside index assignment (#12133) (784afa2)
  • fmt: Off by one error when wrapping comments (#11847) (c7fe615)
  • frontend: Always validate macro calls (#11836) (26af3f7)
  • frontend: Avoid spurious errors on turbofish generic count mismatch (#11861) (7861de2)
  • frontend: Block private inherent impl methods from leaking across modules (#11839) (b99d3c9)
  • frontend: Check that Type::Forall has no fewer generics than the function (#11940) (b380733)
  • frontend: Concrete impl dual turbofish binding (#11848) (efc4f28)
  • frontend: Follow bindings in Type::substitute to avoid infinite loop (#11624) (6868747)
  • frontend: Handle various overflows (#11947) (dee9c0f)
  • frontend: Numeric type alias validation (#11845) (ef7a218)
  • frontend: Reject #[oracle] returning a vector containing a str (#11881) (5ddd28c)
  • frontend: Resolve turbofish in numeric type aliases (#11840) (a47c381)
  • fuzzer: Correct type when assigning ref (#11988) (fa67e0b)
  • fuzz: Make the distance metric symmetric (#11995) (a61b8b4)
  • Guard against mutations from external crates in TypeDefinition methods (#11632) (a9d8b61)
  • Handle &self in formatter to avoid producing & self (#11996) (87f2fc5)
  • Immutable references do not require mutability (#11908) (69abd3d)
  • Improve error reporting for runtime variables in comptime code (#11986) (5fa6131)
  • Improve stdlib docs with doc comments (#11998) (a3f88ea)
  • Incorrect cast between signed integers simplification (#12104) (9405c29)
  • Keep vector length for zero types (#11601) (1177456)
  • Let comptime string value hold Vec<u8> (#11743) (9f2785b)
  • Look for associated types on parent traits and impls (#11745) (e3904eb)
  • lsp: Autocomplete in type generics (#12080) (4e1fb40)
  • lsp: Correct self param when generating trait impl stub (#12098) (a90eb42)
  • lsp: Don't zip_eq in inlay hints (#12081) (b37a537)
  • lsp: Hover on numeric generic (#12097) (a00155d)
  • lsp: When two exprs exist at a location, prefer the type of the expression that came first (#12108) (64115fc)
  • mem2reg: Insert make_array elements into aliased_references if array aliases are unknown (#11854) (02b1193)
  • Missing monomorphization visit of constrain message (#12159) (48fe6a4)
  • Missing Type::Vector in array_zero_value (#11683) (803a56b)
  • noirc_frontend: Improve error for struct literal in if condition (#11557) (721d7ab)
  • Only trigger debugger on things from the debugger crate (#12163) (842974f)
  • ownership: Consider the index to be the first and collection to be the last use (#12149) (d538b93)
  • Parse &&x and &&mut x as nested references (#11920) (bff6227)
  • parser: Handle member access in Parser::parse_statement_or_expression_or_lvalue (#11822) (d100770)
  • Perform abi check on struct on declaration, not usage (#11628) (a4c32f0)
  • Perserve comptime struct field order (#11804) (cd41829)
  • Preserve comptime string bytes (#12068) (16c225b)
  • Preserve side-effects predicate for heterogeneous vector_push_back (#11664) (325fd70)
  • Prevent crash when resolving method in trait impl with unknown t… (#11656) (7cff3a6)
  • Prevent CSE from hoisting instructions into loop headers (#12044) (d5b6fad)
  • Prevent cyclic recursion in trait bound resolution (#11901) (3d29746)
  • Prevent double register deallocation in coalescing hub pattern (#11706) (733c373)
  • Prevent force_unroll blowup for large zero-useful-cost loops (#12155) (18e996a)
  • Prevent infinite constant term movement during unification (#11867) (d837fac)
  • Prevent infinite recursion by erroring on cyclic type aliases (#11871) (f7b9d20)
  • Prevent potential overflow for i128 (#12115) (5f93d49)
  • Proper field comparison in comptime (#11748) (28c3b5f)
  • Quoted eq/hash consistency (#11733) (c603e3c)
  • Remove most comptime mut functions (#11825) (f78444a)
  • Remove stale u1 references from error messages (#12165) (46a5eb7)
  • Resolve enum variant globals with generics in comptime interpreter (#11924) (21e3f32)
  • Resolve imports in batches (#11583) (48245f6)
  • Restore current_item after type alias definition (#11912) (da19a54)
  • Simplify before simulate (#11645) (c4c43e7)
  • Skip empty AssertZero opcodes in ACVM optimizer (#11780) (a48028f)
  • Ssa interpreter unchecked sub was checked (#12113) (28d61db)
  • ssa_fuzzer: Fix non-deterministic iteration order (#12041) (4bcbec9)
  • ssa: Aliasing issues in load/store forwarding (#12125) (f4ead98)
  • ssa: Check induction var when fetching const upper bound (#11896) (eb65201)
  • ssa: Count params as loop header defined variables when folding (#11630) (8e35c63)
  • ssa: Do not fold ArraySet to MakeArray in simplifier (#11659) (ebb5ff1)
  • ssa: Fully simplify CFG by exploring new successors and cascading invalidation (#11619) (8aa2809)
  • ssa: Make get_bit_size_from_ssa_type match ssa_type_to_parameter for Function (#11860) (70dcc2f)
  • ssa: Prevent false merge collapses when inner IfElse simplifies to its condition (#12189) (5cc82dc)
  • ssa: Remove dead Brillig stores to local allocations in DIE (#12020) (69b2a09)
  • ssa: Simplify boolean AND with max value and harden simplify_cfg (#11602) (1f771be)
  • ssa: Track instruction results when hoisting to loop header (#11634) (9dec202)
  • ssa: Try not to hoist into loop headers during constant folding (#11616) (ea8f830)
  • ssa: Unrolling blocks with multiple parameters and constant JmpIf (#12071) (63aee18)
  • ssa: Verify jmpif condition matches header instruction in get_const_upper_bound (#11615) (8bdc389)
  • stdlib: Correct misleading doc comment on UHashMap::linear_probe (#12023) (e62f39e)
  • Track aliases during ownership pass to avoid moves (#12118) (9e82927)
  • Traverse transitive coalescing chains in has_live_partner (#12062) (69f9bc7)
  • Treat uses of comptime globals identically to comptime { GLOBAL_NAME } (#11627) (947f6a3)
  • Type alias in closure environment (#11941) (b9e99b9)
  • Unwrap expr in comptime is_break/is_continue/has_semicolon (#11805) (17f185d)
  • Update rustls-webpki to 0.103.10 (RUSTSEC-2026-0049) (#11942) (66086a0)
  • Use 0, 0 for point at infinity (#11925) (33d3de7)
  • Use correct types for Prover.toml template (#11693) (71c0384)
  • Use repeated array literal in monomorphization zeroed (#12105) (bd62a75)

Miscellaneous Chores