We’ve used basically every feature of Electron. Of course, the main benefit for us is that the WebTorrent JavaScript code just works right out of the box in Electron, and it kind of autodetects the capabilities of the environment that it’s in, the networking capabilities. It sees the Web RTC object is there in the global namespace, so it’s like “Okay, we can do Web RTC connections. Great!” Then it sees that it can require the Node.js, the Net Module and the Dgram Module for TCP and UDP low-level socket connections, so that’s great. So it uses both of those in the same process, in the same environment. Then Electron itself adds on top of all the web and Node stuff, with its own kind of OS integrations, that are really nice. Things like desktop notifications, menu bar and task bar and doc integration, menus on all those things… Electron comes with an autoupdater that goes with Chrome’s, so you can have silent autoupdates in the background, so the user’s always on the latest version, always has the latest and greatest code, without needing to manage that themselves, or be notified or be bothered with it. It can do delta updates, so it only downloads the diff between the current version and the new version, so it’s really fast to download a new version. There’s probably more things I’m forgetting… It has crash reporting, and a bunch of other stuff.

[ ] You can even build installer files for Windows, so the user double-clicks the thing and the app installs itself. On Mac, you do the little DMG thing where the user drags the app into the application folder, and all that stuff. So there’s modules for all that stuff. You can really have a very polished experience that’s literally indistinguishable from a native app. I’m not exaggerating… You can’t tell that it’s really a web page there. It’s actually indistinguishable.

You need to do some things slightly differently, so if you’re a developer you have to kind of change some habits. It’s very common on the web, for example, to make buttons have a little hand, the pointer hand that shows up when you hover over the button to show you that it’s clickable, but that doesn’t happen in native apps. Native apps don’t do that. So if you keep doing that, then it’s gonna feel a little weird, but it’s just small things like this.

There’s certain kind of differences in how apps behave across OS too that you have to kind of think about… Like on Mac, when you close all the windows of an application, the application continues to run in the doc, but it doesn’t have any windows visible. But on Windows and Linux, when you close the last window, the app kills itself, so you have to think about that, and you have to be aware of the differences. There will be some if-statements throughout your code, like “Do this one thing, do this other thing on this other platform”, but it’s totally manageable, it’s not that bad, really.