Originally I thought I could delay node initialization until the preload stage,
e.g.
frontend.coffee

    preload = ->
      try
        node.initfs("/home/doppio","some/base-web/here","/browser/listings.json","localstorageprefixhere")
        data = node.fs.readFileSync("..."
      catch e
        console.error e

Unfortunately, jvm.coffee currently sets the system properties during module load and this requires the filesystem to be setup.

jvm.coffee

    root.system_properties = {
    ...
    path.separator':':',
    ... many hard-coded properties here but user.dir gives us a depedency:
    'user.dir': path.resolve('.'),'user.home':'.','user.name':'DoppioUser',
    'os.name':'doppio', 'os.arch': 'js', 'os.version': '0',
    }

root.reset_system_properties()

So, instead I allow a global config object to be created before node.js is loaded.

The defaults are shown below (see node.coffee for latest version)
node.coffee

    config = win.node.config ?= {}
    config.home ?= '/home/doppio'
    config.base_url ?= ''
    config.listing_file ?= '/browser/listings.json'
    config.storage_prefix ?= ''
Minor tweaks to the Makefile to support the library target
Note, the concatenated javascript in build/library now contains only the src/ coffee files
Merged Makefile
added natives.coffee
upstream removed natives.coffee
added generated file src/natives.coffee to .gitignore
Added abort check to runtime.coffee
Abort button support
Added abort callback support