Packaging a Node.js web application as a normal desktop application

JavascriptMacosnode.jsDesktop Application

Javascript Problem Overview


I've searched a bit, but I can't find an existing tool for this.

I have a Node.js web server that is designed to run on your own computer that does some snazzy things for you. It would be pretty awesome if I could double click MySnazzyThing.app instead of installing Node.js, and npm and running node mysnazzyapp.js on the command line.

The .app executable would spool up the Node.js server and open a simple native WebKit window which would show what would normally be on localhost:3000 if I were running on the command line.

This native application could then, say, be distributed through the Mac App Store. And bam, a Node.js desktop application.

Does any such tool exist? Or are there any technical reasons that this wouldn't work as I imagine it?

Javascript Solutions


Solution 1 - Javascript

Option 1: Electron (formerly atom-shell)

This is the shell that GitHub's Atom and Microsoft's Code editors use. It’s very similar to node-webkit, though it will run the script first, and you have to create a view/window for the user. There are some other minor differences, but it's worth looking at.


Option 2: NW.js formerly node-webkit

The gist is that it basically extends the JavaScript engine for you to write a web-based application supporting Node.js' extended object model, and modules... you then package your package.json start.html modules and JavaScript files into a ZIP file (with the .nw extension) and run it with nw(.exe) .. there are Windows, Mac and Linux builds available.


Option 3: Neutralinojs Github

Neutralinojs is a lightweight and portable desktop application development framework. It lets you develop lightweight cross-platform desktop applications using JavaScript, HTML and CSS. You can extend Neutralinojs with any programming language (via extensions IPC) and use Neutralinojs as a part of any source file (via child processes IPC).


Option 4: MacGapNode (OS X only)

MacGap with Node.js integration (it seems to be getting stale)


Option 5: Tauri Github

Tauri is a toolkit that helps developers make applications for the major desktop platforms - using virtually any frontend framework in existence. The core is built with Rust and the CLI leverages Node.js making Tauri a genuinely polyglot approach to creating and maintaining great apps.


Aside: Services...

I can't speak for OS X on this as a .App, but it could well be possible to create a background service install in Node.js and a link to a "local" site on the desktop. Most browsers have an option to not show all the features (I know Firefox in particular does).

I know your question is to OS X in particular, but in Windows you can use NSSM to run anything as a service, and I have used it for Node.js-based services in Windows. I think some of the other options above are better depending on your needs though.


Removed:


This answer is copied for multiple questions, and these references are mostly for updating convenience.

Solution 2 - Javascript

You can accomplish this using AppJS.

Solution 3 - Javascript

I suggest looking into Topcube. Its goal is to give Node.js developers a way to have a desktop GUI to their Node.js servers using HTML5 + CSS 3 as the GUI platform.

Topcube at GitHub.

Solution 4 - Javascript

Currently there are a plethora of ways to accomplish this.

The clear winner in the space of packaging a Node.js + HTML5 application, is currently Electron (used by Atom, Visual Studio Code, Slack, Discord, etc.).

You can also use any other language packaged as an application (using tools for those languages/stacks), and check for a node installation, launch the "server" script with Node.js, then launch the default browser (or some web view component, by some other means), finally set location to the Node.js service. This is a very lightweight and efficient method, however not as well integrated with the OS as a solution like Electron.

The primary competitor to Electron here, is NW.js. As far as I can tell, the main feature that NW.js has that Electron does not (yet) is compilation/obfuscation. While Electron makes auto updates easy.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionAlex WayneView Question on Stackoverflow
Solution 1 - JavascriptTracker1View Answer on Stackoverflow
Solution 2 - JavascriptMotinView Answer on Stackoverflow
Solution 3 - JavascriptBrian HeeseView Answer on Stackoverflow
Solution 4 - JavascriptDevView Answer on Stackoverflow