Skip to content

Latest commit

 

History

History
61 lines (50 loc) · 2.77 KB

README.md

File metadata and controls

61 lines (50 loc) · 2.77 KB

ImageJ via Electron

Electron is a technology enabling desktop apps using the Node.js JavaScript runtime.

This repository is an attempt to package ImageJ as an Electron app, so that it can be combined with JavaScript user interface elements, with an eventual possible goal of recasting the core ImageJ UI in JavaScript.

Why Electron

  • User interface. The Node.js community has produced much UI awesomeness, and will continue to do so. ImageJ would benefit from UI components such as image viewers that target a broad array of use cases including both web and desktop.

  • Polyglot. ImageJ is grounded in the Java ecosystem, but strives for universal accessibility. There is a vast breadth of powerful software, and the ability to combine tools across ecosystems may mean the difference between a successful scientific workflow and a costly software development endeavor.

  • Packaging. ImageJ and its sister project Fiji currently use a custom native launcher and custom packaging system which pose numerous challenges relating to native integration. The Node.js / Electron ecosystem has solved native desktop application packaging in a more modern way, which is likely to continue to work for many years to come.

    • The current ImageJ launcher is ~4000 lines of C code with many platform-specific #defines. This code must be regularly maintained and updated to accommodate the constantly evolving requirements and restrictions of operating systems and Java versions.

Installation

npm install
npm run rebuild
npm run postinstall
npm start

Technical challenges and questions

A sloppy list of questions and technical issues follows. To be cleaned up and organized soon!

  • Integration - How to pass options to the JVM via node-java
  • Integration - How to mix in Python
  • Electron - How to process Electron CLI args
  • Electron - Bundle JVM and/or JAR libraries into the app
  • Electron - How to override native things e.g. icon, systray
  • Electron - Splash screen while app is loading
  • Electron - JS menu builder - add IJ menu items but also support JS plugins that register menu items
  • JS dev practices - Is there a good JS editor with autocomplete? (WebStorm, I guess)
  • JS dev practices - How to organize sources, code style, multiple files, clean methods, etc
  • Infrastructure - Travis CI builds, AppVeyor builds
  • ImageJ - Integrate a JS script editor plugin? Atom? Something else?
  • ImageJ - What about ImageJ plugins dirs? (set imagej.dir property?)
  • Viewers - VTK.js viewer
  • Viewers - ivvv viewer