My experience with Nim: The core of the **language** is mature and good (I personally would like to have a more auto infer, but it's ok as it is).
**Macros** is mature, but hard to use for a seasonal developer (who use Nim only 20% of the time). Every time I use complex macros I regret it later. You look at macros code you wrote couple of months ago and thinking "how it works?" or "how to fix or modify it?". Too hard to use. I try to avoid macros as much as possible. **STD** not bad, better than Java/JS, but nowhere near as good as say Ruby/Elixir. **Parallel** seems immature, it kinda works, but there are surprises and in its current state it's mostly for experts, not ordinary developers. **Fast IO** currently available as Async IO. Works, but too many surprises. What you do with Node.JS in an hour may require days spent on debug in Nim Async IO. **Servers** immature, too much unexpected crashes, don't know if it's my mistakes or some leaks.