5 ms·
https://windowjs.org https://windowjs.org is a very similar concept -- it wraps Skia and exposes it as the Canvas API, but also embeds v8 for a very small runti
by silvajoao 2y ago
https://windowjs.org https://windowjs.org is a very similar concept -- it wraps Skia and exposes it as the Canvas API, but also embeds v8 for a very small runtime instead of using Node.
It was my first open-source project, released about 3 years ago.
I had plans to also expose WebGL, audio, etc and make it a viable platform for Javascript-based games on desktop.
Life and other projects happened instead, and development was discontinued. Happy to see this project also making Canvas accessible outside the browser!
- njtransit 2y agoThat’s pretty cool! But v8 alone kind of sucks unless you specifically want isolation. Sometimes you just want to make a network request, you know?
- xnorswap 2y ago> Sometimes you just want to make a network request In a drawing tool / library? That's just asking for trouble. By spec, SVG allows for XXE shenanigans. I'd rather not worry that any image file I process might exfiltrate my data.
- silvajoao 2y agoThat makes total sense in many applications, including games. The idea was to have TCP sockets and Websockets to enable that. Basically, have the same APIs you're familiar with in a Browser, but in a much smaller package that you can ship independently of the Browser. (this is very similar to Electron)
- wis 2y agoAmazing project! > but also embeds v8 for a very small runtime instead of using Node. By how much does embedding just V8 instead of using Node.js decrease the binary size? Node.js uses V8, does most of Node's binary size come from its runtime and not V8? I tried browsing the website and GitHub repo to find how many kBs or MBs typically is a Window.js binary, but didn't find an answer.
- silvajoao 2y agoSee the binary sizes in the (obsolete) releases page: https://github.com/windowjs/windowjs/releases https://github.com/windowjs/windowjs/releases About 8 MiB in the end. Note that these builds have a binary trimmed by UPX.
- wis 2y agoWow, 8 MiB, that's impressively small IMO. I expected a program that embeds V8 (let alone also having windowing and Skia) to have a binary size much bigger. something closer to Node's or Deno's binary size 40MiB+. Using the Window.js approach of embedding V8, instead of using a windowing library + a Skia Canvas library in Node.js ─really makes sense if you would like to keep the binary size minimally small and only pay for the libraries/modules you actually pull in and use, instead of having them statically linked in the binary by default. For example, an offline app/game that doesn't use the network doesn't need to have a "net" or "http" module in the binary. These may be bad examples though, I don't know how much do those Node runtime modules constitute out of the final Node binary, it may be an insignificant fraction.