Skip to content

[EXPERIMENTAL] Electron app embedding ImageJ + JS image visualization tools

License

Notifications You must be signed in to change notification settings

imagej/imagej-electron-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

61 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

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

About

[EXPERIMENTAL] Electron app embedding ImageJ + JS image visualization tools

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published