Nim version 2.2.10 released
24 April 2026 The Nim Team
The Nim Team is happy to announce version 2.2.10, the fifth patch release for our stable release, Nim 2.2.
It comes two months after the 2.2.8 release and it contains 76 commits, bringing bugfixes and improvements.
If you’re still on Nim 1.6, take a look at the version 2.0 release article to see all the features you’re missing. If you’ve been using Nim 2.0, the version 2.2 release article shows the improvements available in Nim 2.2.
The Nim 2.2.10 changelog is available here.
NimConf 2026
We would like to remind you about NimConf 2026. If you have anything you would like to share with the Nim community, you have two more weeks (until May 10th) to submit your talk proposal. More details available here.
Installing Nim 2.2.10
Check out if the package manager of your OS already ships version 2.2.10 or install it as described here.
If you have installed a previous version of Nim using choosenim,
getting Nim 2.2.10 is as easy as:
$ choosenim update self
$ choosenim update stable
NOTE: We recommend that you install and use the latest version of choosenim, v0.8.16, available in our choosenim repo.
Alternatively, you can download Nim 2.2.10 from our nightlies builds.
Bugfixes
- Fixed “
newdoesn’t work withref object” (#25005) - Fixed “Switch default mangling back to cpp” (#25338)
- Fixed “
unhandled exception: field 'sym' is not accessiblewithtype W[N] = seq[tuple[b: N]]” (#25509) - Fixed “
proc f(x: static[auto])doesn’t treatxasstatic” (#21281) - Fixed “Invalid codegen for accessing tuple in array” (#25553)
- Fixed “
proc v[T: typedesc]() = discard/v[0]()compiles even though0isn’t atypedesc” (#25262) - Fixed “ICE evaluating closure iter with object conversion” (#25572)
- Fixed “Regression from v2.2.6 to v2.2.8 and also
develin refc{.align.}pragma where each 16-byte-aligned heap objects gets its own page” (#25566) - Fixed “Nim v2.2.x ORC adds extra
nimZeroMem/nimCopyMem/stack usage over refc” (#25552) - Fixed “Regression from 2.0 to
version-2-2/develwithrefc, LTO and-fstack-usage” (#24746) - Fixed “
internal error: getTypeDescAux(tyVoid)with eitherdiscard default(tuple[b: void])ordiscard default((void,))” (#25508) - Fixed “parseFloat/parseBiggestFloat lose sign of
-NaN(signbit is negative)” (#25597) - Fixed “ARC/ORC SIGSEGV with captured variables and closure iterators in
reset/nimDecRefIsLastCyclicStatic” (#25596) - Fixed “
discard mapIt([0], 0)results inlib/pure/collections/sequtils.nim(1095, 11) Hint: 'it' is declared but not used [XDeclaredButNotUsed]” (#25626) - Fixed “
proc r(_: typedesc, _: static uint | static int) = discard; r(uint, 0)causescannot generate code for: mStatic” (#25642) - Fixed “two overflowed
*=causes program deadloopsysFatalon –exceptions:goto” (#25658) - Fixed “commands: –maxLoopIterationsVM validation used wrong condition (not/bind precedence)” (#25671)
- Fixed “docgen: cmpDecimalsIgnoreCase uses wrong index in max() for digit window” (#25670)
- Fixed “parsecfg: IndexDefect in replace() when value ends with ‘\c’” (#25674)
- Fixed “Regression: object with self-referential lent proc field fails to compile” (#25677)
- Fixed “
proc g() {.exportc, error: "".} = (; let a = 0)causesError: internal error: expr(nkIdent); unknown node kind” (#25632) - Fixed “Doc comment makes nimvm ignore assignment through template” (#25682)
- Fixed “orc: seq assignment slow” (#25687)
- Fixed “Regression from v2.2.6 to v2.2.8 and also
develin refc{.align.}pragma where each 32-byte-aligned heap objects gets its own page” (#25577) - Fixed “nimsuggest –v3 and –v4 “outline” output does not list methods” (#25710)
- Fixed “{.borrow.} on iterator for distinct seq triggers internal error” (#25697)
- Fixed “template with overload redefines proc” (#25290)
- Fixed “Invalid C code generation with
iterator/nimvm” (#25724) - Fixed “std/parseopt no longer support
-when shortNoVal is given” (#25738) - Fixed “Using sum types with module specifiers typechecks inconsistently” (#18095)
- Fixed “Conversion from distinct in
forforces a copy of underlying instance” (#25469) - Fixed “
static: (for f in [0]: discard a.b == f)causesnim checkunhandled exception: field 'intVal' is not accessible for type 'TFullReg' using 'kind = rkNone' [FieldDefect]” (#25732) - Fixed “JS backend crashes when returning Option[T] with custom =destroy” (#25751)
- Fixed “
setLenUnitslow, actually initializes seq (refc)” (#25718) - Fixed “Stack overflow/materialization-based segfault in refc and ORC with large object initialization and heap assignment” (#25695)
The complete list of changes is available here.