Packaging a node.js webapp as a normal desktop app

Alex Wayne picture Alex Wayne · Jul 26, 2011 · Viewed 35.8k times · Source

I've searched a bit but 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 aswesome if I could double click MySnazzyThing.app instead of installing nodejs, and npm and running node mysnazzyapp.js on the command line.

The .app executable would spool up the node 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 app could then, say, be distributed through the mac app store. And bam, a node.js desktop app.

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

Answer

Tracker1 picture Tracker1 · Sep 19, 2012

Option 1: electron (aka atom-shell)

This is the shell that github's Atom editor uses. 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 JS engine for you to write a web-based app supporting node's extended object model, and modules... you then package your package.json start.html modules and js files into a zip (with the .nw extension) and run it with nw(.exe) .. there are windows, mac and linux builds available.


Option 3: Carlo chrom(ium) shell from Node.

This will allow you to launch the locally installed Chrome as a shell that can connect to a locally running server application. It does require a local chrome, but is very close to what was asked for.


Option 4: MacGapNode (OSX Only)

MacGap with Node integration (Seems to be getting stale)


Aside: Services...

I can't speak for OSX on this as a .App, but it could well be possible to create a background service install in NodeJS 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 OSX in particular, but in windows you can use NSSM to run anything as a service, and I have used it for NodeJS 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, these references are mostly for updating convenience.