Nim version 2.2.10 released

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 “new doesn’t work with ref object” (#25005)
  • Fixed “Switch default mangling back to cpp” (#25338)
  • Fixed “unhandled exception: field 'sym' is not accessible with type W[N] = seq[tuple[b: N]]” (#25509)
  • Fixed “proc f(x: static[auto]) doesn’t treat x as static” (#21281)
  • Fixed “Invalid codegen for accessing tuple in array” (#25553)
  • Fixed “proc v[T: typedesc]() = discard / v[0]() compiles even though 0 isn’t a typedesc” (#25262)
  • Fixed “ICE evaluating closure iter with object conversion” (#25572)
  • Fixed “Regression from v2.2.6 to v2.2.8 and also devel in 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/devel with refc, LTO and -fstack-usage” (#24746)
  • Fixed “internal error: getTypeDescAux(tyVoid) with either discard default(tuple[b: void]) or discard 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 in lib/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) causes cannot generate code for: mStatic” (#25642)
  • Fixed “two overflowed *= causes program deadloop sysFatal on –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) causes Error: 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 devel in 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 for forces a copy of underlying instance” (#25469)
  • Fixed “static: (for f in [0]: discard a.b == f) causes nim check unhandled 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 “setLenUnit slow, 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.