The front end is written with Karax (compiled to JS) and the backend with Jester.
Like, if I wanted to make my own C compiler, how much would I have to implement for it to be usable with Nim-generated code?
Does it use a fairly constrained subset or does it use a lot of C and the standard library?
I imagine the latter but just curious.
Full disclosure, not everything works - different backends tend to have slightly different bugs/coverage, but this also applies to c++ and js backends. But I use tcc as my default backend (in my nim.cfg file) every day and only run into problems like a time or two per year.
I think it's no longer maintained, but there's a kernel that boots on metal written in Nim. Furthermore, people are running Nim on ESP32, Nintendo Switch, JS (Browser, Node), iOS, Android and more; From that alone its clear that the C library can't be a significant dependency.
(And ... just about any C compiler around, including GCC, LLVM, TCC, MS C, Intel C, Zig C are supported when using C as a backend).