About this Series
If you haven't read the intro, I discuss a lot of the core information about this, I have included the Raw Stats in each of the blog posts so you can easily reference it while reading about each of the products.
Raw Stats
Platform | AppImage File Size | Hello Memory AppImage | Hello Memory Unbundled | Graphic AppImage | Graphic Unbundled |
Electron | 97 Megs | 203 | 129 | 401 | 316 |
NW.JS | 110 Megs | 274 | 163 | 515 | 389 |
Tauri | 71 Megs | 192 | 52 | 364 | 301 |
NodeGui | 47 Megs | 437 | 53 | 760 | 467 |
Yue | 19 Megs | 59 | 43 | 302 | 292 |
Node-GTK | 100 Megs | 85 | 70 | 90 | 89 |
Flutter | 70 Megs | 124 | 53 | 337 | 321 |
Thoughts on Node-Yue
Yue is one of the two JavaScript Gui systems that has to replace node with its own custom version of Node.js. which makes it a tad bit harder to deploy. It uses a custom node called "yode" which basically adds the event loop so that the graphic UI can run properly on all platforms.
Unfortunately, Yue was the least usable system in the group. I ran into the same issue reported over a year ago in the Yode github issue tracker where the GUI would just disappear. Sure enough somewhere between 5-10 seconds after the app started and was working, bam the entire GUI was just gone. Yode was still running, and even had a setInterval console logging out still. This made getting the numbers very hard, I had to script the code to start the app, and then grab all the process numbers and output the memory of everything all before 5 seconds was up... As once the GUI went away the memory usage dropped dramatically...
In addition it supposedly supports being ran in Electron so that you can start an app I believe without a chrome gui. Unfortunately neither the pre-compiled version nor the version I manually compiled actually worked. Both crashed out (w/ different errors) virtually immediately at startup. So I was unable to try Yue on Electron.
Developing in it...
The docs aren't great, and the examples are old. It actually took a lot more time to get Yue to display the images properly as there is no dedicated "ImageView" control, but instead you load the images and then you have to paint the image onto a container in its onDraw event. Fortunately, based on a couple issues in the Yue github, I was able to finally figure out all the pieces to test this out.
Once I figured out how everything worked, it was a easy to use system, and the Yoga flex layout system it uses made laying things out very simple and nice looking. This app also started very fast, it was neck-in-neck with Node-GTK.
Summary
It had the lowest "Hello World" memory usage of all the frameworks. And I believe if I re-orchestrated the image system to cache the scaled images at 200x200 like the GTK design did (by default), the memory usage on Yue might be the lowest of all the frameworks. However, since the docs were difficult to use, I wasn't even sure where to start on this idea. It is fast, but due to its instability that seems to be on both Linux and Windows since Aug of 2000, this appears to be not a very viable project at this point.