1. I completely agree with you, which was a point in one of my talks. Companies want to brand their UI/UX. For instance, Pinterest doesn't want an OSX or Windows button; they want a Pinterest button. Designing once for a universal look is much easier, as different operating systems have different sizes of elements such as tabs, headers, menus, panels, scrollbars, which requires you to consider layouts for each OS. Essentially, you're making a different skin for each OS. Nobody does this! 2. A nice Nim API is a given. Compiling to a DLL is a nice feature. We've thought about this, and it's one of the reasons for 'genny'. It can generate a DLL with a plain C API and a Nim "header" file for use. 'Genny' effectively downcasts all of Nim's cool features to "plain C" and then upcasts them back to full Nim. 3. All widgets are custom now. Even a humble button can have many [hover animations](https://i0.wp.com/codemyui.com/wp-content/uploads/2016/11/3d-parallax-button.gif?fit=880%2C440&ssl=1), [icon transition states](https://dribbble.com/shots/7861076-50-Free-Animated-Icon-Set), [push states](https://css-tricks.com/how-to-recreate-the-ripple-effect-of-material-design-buttons/). I believe you only need to provide a default set of widgets as examples. You need to provide frames, rectangles, and text elements as building blocks, not full-fledged buttons. Instead of offering a low-level API, I feel like it should be mostly a low-level API. 4. Nim still hasn't solved multi-threading. We need to have [Atomic Arc](https://forum.nim-lang.org/t/10177#67447). As it stands now, 'ref objects' can't be passed between threads. Only raw pointers can. This is made even more complex by your DLL requirement. 5. This is one point I don't really agree with. Designing one paradigm well is hard enough. Designing two? In the same library? I think this is way too difficult! I would suggest picking one or the other but not both, and doing it well. 6. Everyone wants a fast, small, and performant solution. But it's hard to achieve. Just opening up an OpenGL context already requires ~20MB, and stripped-down Electron apps are in the ~80MB range. The UI requirements of something like [this](https://dl3.pushbulletusercontent.com/POrVXlpENmHSn7DshdfLn53z9KziYhiU/image.png) are way different from [this](https://dl3.pushbulletusercontent.com/DPopSvvz1ZRGRqYnvLZGirUglWREbMVN/image.png). I think using ~100MB is undesirable but acceptable. With the sheer number of fonts, icons, images, animations a modern app needs to have, it's unavoidable. 7. Modern Text Mode apps can be [really cool](https://dl3.pushbulletusercontent.com/IuIAprdmjtWMGCmcY6mulrrJTLGwOy84/image.png), like [btop](https://github.com/aristocratos/btop) for example. But again, I think it's too hard to cram everything into a single library with two paradigms. I say if you want to do text mode, immediate mode, or embedded well, just do that! Don't try to chase everything!
* * * My wish list would be much simpler and less prescriptive: > A Nim UI library that a startup can use effectively. 1. By 'Nim UI library,' I mean it needs to be pleasant to use from Nim, feel native to Nim, and be predominantly written in Nim. 2. By 'startup,' I mean it's very challenging to have an existing company switch to something new, but startups are created all the time and are open to trying innovative things. Modern startups typically target web, Android, and iOS platforms. 3. By 'effective,' I mean it should be better and faster than writing three separate apps for the web, Android, and iOS. * * * With [fidget](https://github.com/treeform/fidget), I discovered that writing a simple UI library is not that difficult. I have proven that it's possible to target the web (WASM and JS mode), Android, iOS, Windows, Mac, and Linux with a single code base! However, writing a good UI library is significantly more challenging. It's a massive undertaking that will span years. One needs to have many foundational elements first: GPU, OS APIs, vector graphics, raster graphics, fonts, and many more!