I'm too new in this area of computing to be able to tell what your understanding is of either of those terms. Nim can do memory management with any backend depending on what you mean by it. You can allocate and deallocate memory regions with pointers and manage those yourself entirely manually (I do this sometimes with the C backend). You can manually call the automatic hooks that nim inserts to manipulate ref-counters and deallocate memory when that counter reaches 0. You can also use hooks more generally to manage how that memory is treated (https://nim-lang.org/docs/destructors.html#about-this-document).