Nobody asked for this but decided to make a markdown of the last weeks commits from main
Roc Weekly - December 22-29, 2025
Bug Fixes
Memory & Stability
Fixed memory corruption in unifySharedTags due to slice invalidation
Applied same fix to unifySharedFields for extensible records
Fixed stack overflow in tag union layout computation (#8750 )
Fixed early return value stack corruption in interpreter
Fixed integer overflow in List operations with tuples containing strings
Fixed integer overflow in serialization for large addresses
Parser & Tokenizer
Fixed parse crash with malformed imports
Fixed parse crash with where clauses
Fixed tokenize crash with unicode escapes
Type System
Fixed TypeMismatch when pattern matching on polymorphic function results
Fixed infinite type detection in unification
Fixed opaque type pattern matching in same module
Fixed Box.unbox type resolution with records containing numeric literals (#8765 )
Fixed occurs check recursing into constraints
Fixed value restriction for annotation-only function declarations
Fixed discriminant ordering for tag unions with large payloads (#8773 )
List Operations
Fixed List.map crash on empty lists
Fixed list append for empty records
Fixed handling of list_of_zst (zero-sized types)
Other Fixes
Fixed roc fmt inserting space between ## in doc comments
Fixed pattern matching crash for tag unions with tuple payloads
Fixed closure capture ident translation (#8727 )
Fixed crash when updating var through tuple destructuring in while loop
Fixed runtime type propagation (#8646 )
Fixed tag_union handling in decrefLayoutPtr to fix memory leak
Fixed roc_std sizes, dealloc must be manually managed by host
New Features
break keyword - Added break statement support (#8717 )
Effectful map functions - Added effectful versions of map_ok and map_err (#8736 )
List.sum - Added List.sum method with default constraint
Range functions - Added to and until range functions for all non-float number types
Refactoring & Improvements
Migrated roc_std to new architecture
Converted fx tests to eval snapshot tests for faster execution
Value restriction refactor - only generalize lambda definitions
Added static dispatch for binops
Improved type printing with line breaks and Pair(a, b) syntax
Increased Rank size from u4 to u8 to support deeper nesting
Added heuristics for type store initial capacity
Added combined layoutSizeAlign function for efficiency
Removed unused functions and redundant code
Documentation
Split langref/collections.md into separate files
Improved platform requirements error messages
Expanded language reference documentation
Refined doc comment detection to require ## followed by space
Yeah lot's of progress in many areas. Roc is definitely moving fast.
"Move fast and fix things" :grinning_face_with_smiling_eyes:
Definitely not breaking things over here... :sweat_smile:
Roc Repository - Weekly Commit Summary
Period: December 29, 2025 - January 5, 2026
Summary by Category
Bug Fixes
Recursive type handling : Fixed infinite recursion in layout size computation, tag layout mismatch causing memory corruption, crashes with recursive nominal types
Compiler fixes : Fixed dynamic discriminant offset in comptime_evaluator, correct tag order for mkTagUnion, UNUSED VALUE error for method calls
Parser/Formatter : Fixed formatter idempotence issues for local dispatch, chained zero-arg applications, and field access
Memory issues : Fixed dangling slice causing index out of bounds panic (#8913 ), invalid free panic in non-exhaustive match errors, index out of bounds in closure decref
Number handling : Fixed invalid number literal suffix errors, MONO output defaulting to Dec, method call return type for dbg on extracted Ok values
Fixed crash with recursive nominal type when one variant has no payload (#8901 )
Fixed panic on multiple expects with annotated function (#8897 )
Fixed segfault with recursive nominal types in Box containers (#8816 )
Fixed dbg on U8 extracted from Ok (#8555 )
New Features
Automatic cache invalidation via compile-time struct hashing
Migrated to RocTry instead of RocResult in roc_std_new
Deprecated old numeric suffix syntax (e.g., 123u64) in favor of typed suffix syntax
CI/Infrastructure
Extensive work on kcov coverage: moved between Linux/macOS, fixed DWARF5 issues, added include patterns
Added network error patterns to flaky-retry for CI stability
Coverage enforcement improvements and threshold adjustments
Reverted "smarter nix CI" (#8881 )
Refactoring
Use Blake3 for version hash, removed duplicated code
Simplified header validation in fromMappedMemory
Converted multiple fx tests to eval/layout unit tests for better test isolation
Documentation
Updated implementation completion status and CI results
Deleted outdated planning docs
Changed 'should' to 'must' in statement error messages
Thanks @nandi :)
Changelog (January 5-12, 2026)
Bug Fixes
Type System
Fix Str type Error (#9003 )
Fix type checking for recursive functions with type annotations (#8979 )
Fix type store and regions out of sync in checkPlatformRequirements (#8994 )
Fix stack overflow with recursive nominal type unification (#8931 )
Fix type alias lookup for platform requirements (#8916 )
Fix check reqs rank mismatch (#8995 )
Remove implicit structural-to-nominal type conversion for method calls (#8939 )
Compiler Crashes
Fix crash when calling float literal as function (#8941 )
Fix crash on recursive closures with nested pattern matching (#8933 )
Fix panic on empty match expression (#8932 )
Fix stack overflow with self-referential variable definitions (#8942 , #8943 )
Fix NotNumeric crash when closures capture for-loop elements (#8946 )
Memory Management
Fix Box.unbox memory leak for boxes passed through FFI (#8981 )
Fix memory leak when ? operator causes early return in for loop (#8944 )
Fix memory corruption in error messages when using ? on non-Try types (#8947 )
Fix incref alignment check for recursive tag unions with pointer tagging (#8978 )
Fix tag_union decref with nested layout mismatch (#8754 )
Pattern Matching
Fix wrong exhaustiveness error for match on tuple with list and wildcard (#8924 )
Fix non-exhaustive list pattern not catching empty list case (#8935 )
Formatter
Fix formatter dropping platform header targets section (#8989 )
Fix formatter instability with open tag union blank lines (#8927 )
Parser
Fix minus operator parsing without spaces in function calls (#8930 )
Layouts
Fix record extension causing duplicate fields in layout (#8991 )
Interpreter
Fix instantiation in interpreter
Fix interpreter bugs in hosted lambda handling (#8928 )
Fix static dispatch effect bug
Store identifiers in e_anno_only to fix cross-module hosted functions
REPL & Playground
Fix REPL snapshot for record field ordering
Fix playground underline (#8956 )
Wasm playground fixes (#8952 )
New Features
Compiler
Detect infinite while loops at compile time
Move circular definition detection from runtime to compile-time (#8923 )
Cross-Compilation
Support platform-bundled macOS sysroots for cross-compilation (#8983 )
Standard Library Helpers
Add toWholeInt/fromWholeInt helpers to RocDec (#8966 )
Add readAligned/writeChecked helpers to reduce integer handling boilerplate (#8964 )
Interpreter Improvements
Add asRocList() and setRocList() methods to StackValue (#8955 )
Improve StackValue RocStr methods for idiomatic Zig (#8954 )
Improve asClosure() and add box lifecycle helpers to StackValue (#8958 )
Code Quality
Refactoring
Centralize allocation in Check
Move extra strings allocation to problem store
Extract selectCopyFallbackFn to deduplicate copy function selection (#8963 )
Preserve type annotation on err
Don't generalize top-level after every def + fix instantiation
Cleanup
Remove unused ExtraStringIdx import
Remove unused current_block_statements field
Remove dead createTagUnionLayout function
Test Improvements
Add tests demonstrating correct host layout for entry point arguments
Convert fx tests to cheaper eval/type-checking tests
Add regression tests for various issues
Fix eval test syntax: use strings instead of deprecated i64 suffix
CI/Infrastructure
Avoid flaky nix timeout
Skip kcov coverage on Linux x86_64 (#8961 )
Fix nightly macOS ld64 library not found (#8951 )
Increase Tidy limit to 1.5MB
Dependencies
Bump @remix-run/router and react-router-dom in checkmate/www (#8957 )
Bump react-router and react-router-dom in checkmate/www (#8965 )
Roc Changelog - Week of January 12-19, 2026
Summary
This week saw major improvements to the LSP (Language Server Protocol) implementation, significant work on the dev backend with JIT code generation, and several important bug fixes.
Highlights
:fixing: Bug Fixes
Bool.False displaying as 0 (#9051 ) - Fixed issue where Str.inspect(Bool.False) would show "0" instead of "False" when the Bool value was extracted from a polymorphic opaque type through a method call.
List literal panic in polymorphic for loops (#8905 ) - Fixed panic when creating list literals inside polymorphic for loops.
Record builder map2 chaining (#9035 ) - Fixed record builder to properly chain map2 calls.
roc run target flag (#9008 ) - Fixed roc run to respect --target flag and use platform's default target.
roc run non-platform packages (#9030 ) - Fixed roc run to support non-platform packages in IPC mode.
Memory leaks - Fixed slow memory leak from accumulating constant string arenas and WASM interpreter memory leak in long-running applications.
LSP Improvements
Major LSP enhancements for a better editor experience:
New Features
Document formatting - Wire the Roc formatter to handle textDocument/formatting requests
Document symbols - Show function and variable definitions in editor outline/breadcrumbs
Folding ranges - Enable code folding for records, lists, and grouped expressions
Selection ranges - Semantic selection expansion (Ctrl+Shift+Right) for syntactic structures
Document highlight - Scope-aware highlighting of variable references (handles shadowing correctly)
Goto definition for types - Navigate to type definitions in annotations (e.g., clicking Str in x : Str)
Cross-module semantic tokens - Distinguish Module.function calls from record.field access
Dependency graph - Track module relationships and content hashes for incremental builds
Exports hash tracking - Foundation for smarter cache invalidation
Bug Fixes
Fix goto definition for local types and nested type annotations
Fix goto definition for builtin module lookups like U64.to_str
Fix hover on type annotation lines
Fix document symbols to match correct module by file path
Fix selection range hierarchy to walk AST properly
Preserve content hashes across dependency graph rebuilds
Fix memory leak in Report allocations
Dev Backend / JIT
Significant progress on the development backend with JIT code generation:
JIT infrastructure - Add dev backend JIT infrastructure with numeric evaluation
Binary operations - Add binary operation and unary minus code generation
Control flow - Add if/else expression code generation
Functions - Add function/lambda expression support
Data structures - Add record, tuple, list, block, string, and tag expression support
Record access - Add dot-access handling for record field access
For loops - Implement e_for and e_low_level_lambda support
Compile-time evaluation - Add comptime_value.zig for compile-time evaluation
Cross-compilation - Fix cross-compilation issues for JIT and ELF
Windows support - Fix x86_64 Windows calling convention and VirtualAlloc error handling
Code Quality / Refactoring
Typed payloads migration - Major refactor replacing generic extra_data field with typed payload unions for type-safe data access
Typed lists - Migrate pattern_list, index arrays, statements, diagnostics, and more to typed storage
Remove dead code - Remove separator comments and unused imports per linter rules
CI / Build
Add build release step
More general retry logic for CI
Only run nix CI when needed
Retry on UnknownHostName errors
Pull Requests Merged
PR
Title
#9051
Fix Bool.False showing as 0 when extracted from opaque types via methods
#9050
Comprehensive LSP improvements and goto definition support
#8905
Fix panic when creating list literal in polymorphic for loop
#8888
Fix issue #8885
#8859
Dev backends
#9033
Remove extra data - typed payload migration
#8980
LSP semantic tokens and hover support
#9048
Improve record builder error message
#9036
Fix record builder map2 chaining
#9031
Fix roc run for non-platform packages
#9028
Fix issue #9001
#9023
Fix roc run target flag
#9017
Add build release step
#9016
CI improvements
#9015
Fix retry on UnknownHostName
#9013
Improve expected app header
#9012
Nix CI changes
#9006
Make comptime errors use problem.extra_strings
Was there a decision to have a (jitted?) dev backend instead of/in addition to the interpreter?
Not jitted yet, but yes dev backend in addition to the interpreter
My understanding is that the JIT stuff is purely an intermediate or internal implementation detail so we can compare the current interpreter against the backends that they evaluate to the same thing to support thier development side by side. I think sometime in the future if the dev backends are good enough we might be able to retire the interpreter and cut out a lot of complexity/duplication.
Changelog: January 19 - January 26, 2026
:fixing: Build System & Multi-threading
PR #9072 - Fix Sibling Modules (Luke Boswell)
A major overhaul of the build pipeline:
Migrate roc build to use BuildEnv/Coordinator pipeline (2f032392ea)
Add actor model for multi-threaded compilation (0386fb6817)
Add --jobs flag for roc check with cache tracing telemetry (fd0e946e22)
Unify cache checking for single and multi-threaded builds (7eadaa6520)
Fix platform path resolution for apps in subdirectories (1100efcf24)
Fix allocator mismatch in multi-threaded coordinator cleanup (e2bae59c28)
Fix cache to recursively load sibling module imports (554bb086b3)
Rename trace-cache to trace-build (3a3dc89ade)
Fix cache deserialization for mutable types (1dccbc0b6c)
Add --verbose to build with improved cache statistics (90cb41640c)
Remove legacy GlobalQueue build pipeline (368f31d07a)
Unify roc run IPC path with Coordinator (e3b80581e7)
Enable hosted transform for roc build (fa8887e757)
PR #9085 - Fix Benchmarks Exit 137 (Anton-4)
Reduce macOS shared memory to 8GB and fix munmap cleanup (2e14acf18c)
:bug: Bug Fixes
PR #9077 - Number Literal Static Dispatch Fix (Dan Knutson, Jared Ramirez)
Avoid null error on number literal static dispatch (45ab6b683a)
Instantiate static dispatch methods from other modules (a74f825973)
Track constraint origin for static dispatch errors (294b078f9f)
PR #9066 - Fix Cache Panic (Anton-4)
Fix cache incompatibility between debug and release builds (f06e1b684e) - The module cache now includes build mode in version string to prevent crashes from mismatched struct layouts
PR #9063 - Fix Issue #9043 (Richard Feldman)
Fix self-reference detection for tuple patterns with var elements (8e6c099aaa) - Fixes crash on (_, var $n) = f($n)
PR #9061 - Fix Issue #9056 (Richard Feldman)
Fix formatter dropping module qualifiers in imports (bef18d6853) - import a.B.C was incorrectly formatted as import a.C
Fix handling of imports without qualifiers (2d83d64ca7)
PR #9038 - Fix Issue #9034 (Richard Feldman)
Fix roc check to resolve platform-exposed module types in annotations
:high_voltage: REPL Improvements (Yanni Papandreou)
PR #9081 - REPL Enhancements
Got basic ReplLine working (48f92ea961)
Added basic history support (f929aba34d)
Added cancel line command (c8ade7cf06)
Added TTY detection and top-level doc comments (2c9695f05d)
First attempt at Windows support (f0a4c8939b, 8e40f98dbd, 8f77870dbc)
:broom: Code Quality & Refactoring (Jared Ramirez)
PR #9065 - Unify Improvements
Remove types store snapshotting from unify (9ec0945b72)
Remove early unification pattern (5a77ceac60)
Remove unsound nominal backing type merges (4d62d52c64)
Remove marks (41da1d14b6)
Unify whole function, not arg-by-arg and ret (45755f70e3)
PR #9045 - Improve Recursion & Early Return Errors
Improve expected Try type error message (8b61f97ef4)
Make ? desugar to explicitly nominal Try constructors (26a5444034)
Remove lambda tracking in favor of deferred constraints (4cc17676ee)
Move early return logic tracking to Can (8e07a2c525)
Remove decl_gen (835b9af51a)
Improve self recursive error message (e01456934a)
:silhouettes: Contributors This Week
Luke Boswell - Build system & multi-threading
Jared Ramirez - Type system & unification improvements
Richard Feldman - Bug fixes for formatter and self-reference detection
Anton-4 - Cache fixes and macOS memory improvements
Yanni Papandreou - REPL improvements and Windows support
Dan Knutson - Static dispatch fixes
Total commits: ~80
Merged PRs: #9085 , #9081 , #9077 , #9076 , #9072 , #9066 , #9065 , #9063 , #9061 , #9045 , #9038
Roc Changelog (Jan 26 - Feb 2, 2026)
:sparkles: New Features
?? operator - Implement double question operator (e88b26f7 ) - Luke Boswell
Tuple access - Dot notation for tuple elements (#9073 ) (e23827316b ) - Luke Boswell
RefcountContext helpers & Info types for layout extraction - Luke Boswell
Cross-compile: Thread RocTarget through compilation pipeline (3d6f7ac7d7 ) - Luke Boswell
Error Messages
Recursion, record update, record access error messages - Jared Ramirez
Intelligent hints & improved type module validation - Jared Ramirez, Luke Boswell
:bug: Bug Fixes
Crashes
Segfault when ? on non-Try type (#9118 ) (c3fc86a24d ) - Luke Boswell
Panic on tuple access to non-tuple (8402740aac ) - Luke Boswell
NotNumeric crash with rigid type vars (538a90dab1 ) - Luke Boswell
Alignment panic on 64-bit cross-compile (28fb15f73e ) - Luke Boswell
Compiler panic with concrete platform type in where clause (847bb54f7f ) - Luke Boswell
Type System
Type variable rigidity in closures (#9129 ) (392f77debe ) - Luke Boswell
Wildcard match on open tag unions (e716d9da65 ) - Luke Boswell
Coordinator/Imports
Infinite loop on external import parse failure (3d985fba8d ) - Luke Boswell
Infinite loop on invalid package shorthand (ce83e481ab ) - Luke Boswell
Package-qualified import errors not displayed (bf3d3a8801 ) - Luke Boswell
Cross-file nested module access (#9074 ) (f76de03baf ) - Luke Boswell
WASM/Interpreter
WASM allocator size tracking (d70145a28b ) - Luke Boswell
wasm32 struct layout (f22a429661 ) - Luke Boswell
Interpreter Shim Target layout (347ed2539d ) - Luke Boswell
Hosted effects on opaque types (3ac7dc2ef7 ) - Luke Boswell
Memory leaks in enableRuntimeInserts (5fcbb73b28 ) - Luke Boswell
Formatting
Type annotation trailing commas, import spacing, field access after local dispatch - Luke Boswell
:books: Documentation
?? operator, tuple, loops, modules, static dispatch, types in langref - Luke Boswell
is_eq, plus, minus, times, to_inspect in langref - Luke Boswell
Roc Targets docs, mini-tutorial resources, AFL++ fuzzing docs - Luke Boswell, Anton-4
:fixing: Internal
Migrate list ops to RefcountContext helpers - Luke Boswell
Migrate ptrCast patterns to semantic helpers - Luke Boswell
Centralize unification calls, separate problems & reportings - Jared Ramirez
Snapshot diffs, diff checker cleanup - Jared Ramirez
Tracy logging, typos CLI tool - Jared Ramirez
CI: flaky retry, hyperfine, triggers - Anton-4
While loop demo - Anton-4
:silhouettes: Contributors
Anton-4 · Jared Ramirez · Luke Boswell
Roc changelog (main) — Feb 2 to Feb 9, 2026
Compiler backends
#9161 WebAssembly backend merge and follow-up fixes (Contributor: Richard Feldman)
#9068 more-dev-backend expansion (Contributor: Luke Boswell)
#9145 fix for issue 9143 (Contributor: Luke Boswell)
#9148 Windows ARM64/debug backend work (Contributor: Luke Boswell)
#9134 dev-objects (Contributor: Richard Feldman)
#9164 dev backend fixes (Contributor: Richard Feldman)
Type system / monomorphization / canonicalization
#9152 improve mono pipeline (Contributor: Richard Feldman)
#9155 alias type hashing fix (Contributor: Richard Feldman)
#9156 tag union substitution fix (Contributor: Richard Feldman)
#9157 closure-capture duplication fix (Contributor: Richard Feldman)
#9159 remove unused region tracking (Contributor: Richard Feldman)
#9160 optimize pending specialization lookup (Contributor: Richard Feldman)
Parsing / API consistency
#9141 parse-result API unification (Contributor: Luke Boswell)
#9142 canonicalization API unification (Contributor: Luke Boswell)
Testing / CI / benchmarks
#9130 test coordinator updates (Contributor: Luke Boswell)
#9150 targeted fix branch merge (Contributor: Anton-4)
#9151 all-syntax test improvements (Contributor: Anton-4)
#9146 remove snapshot benchmarks (Contributor: Anton-4)
#9100 enable real benches (Contributor: Anton-4)
Docs
#9136 reorganize docs folder (Contributor: Anton-4)
#9137 mini tutorial updates (Contributor: Anton-4)
Dependencies
#9138 bump bytes (Contributor: dependabot[bot])
#9158 bump webpack (Contributor: dependabot[bot])
#9067 bump lodash (Contributor: dependabot[bot])
Last updated: Feb 20 2026 at 12:27 UTC