Skip to content


Repository files navigation Forum developer chat Open in Gitpod

This is the repository for ImageJ2, a rewrite of the original ImageJ for multidimensional image data, with a focus on scientific imaging. Its central goal is to broaden the paradigm of ImageJ beyond the limitations of the original ImageJ application, to support a wider range of multidimensional scientific image data.

To ensure backwards compatibility, ImageJ2 has been designed to fully integrate into the original ImageJ user interface. This allows users to keep using ImageJ in familiar ways, while providing the ability to migrate toward more powerful new features as needed.

Under the hood, ImageJ2 completely isolates the image processing logic from the graphical user interface (UI), allowing ImageJ2 commands to be used in many contexts, including headless in the cloud or on a server such as OMERO, from within another Java application such as KNIME or Icy, or even from Python-based applications such as CellProfiler and napari via PyImageJ.

ImageJ2 has an N-dimensional data model driven by the powerful ImgLib2 library, which supports image data expressed in an extensible set of numeric and non-numeric types, and accessed from an extensible set of data sources. ImageJ2 is driven by a collaborative development process; for details, see the Contributing page.

We collaborate with related projects such as Fiji, SCIFIO, CellProfiler, and OME, and are striving to deliver a coherent software stack reusable throughout the life sciences community and beyond. For more details, see the SciJava web site.

For more details on the project, see the ImageJ wiki.


ImageJ2 is distributed under a Simplified BSD License; for the full text of the license, see LICENSE.txt.


From Java

This repository is the main ImageJ2 application, which brings together all of ImageJ2 under the artifact net.imagej:imagej. It is the easiest entry point if you are looking to use ImageJ2 as a library from your own software. E.g., in your Maven pom.xml:


We recommend inheriting from the pom-scijava parent, although it is not required. (If you do not, you will need to include the <version> of ImageJ2 in your <dependency> declaration, and you may be bitten by this bug in Maven regarding the versions of ImageJ2's dependencies that you inherit.)

From other languages

  • JavaScript: Use the imagej module on npm to call ImageJ2 in-process from node.js code.
  • Python: Use the PyImageJ module on PyPi to call ImageJ2 in-process from Python code.
  • Ruby, R, LLVM and beyond: Use GraalVM to combine ImageJ2 with Truffle-based languages in the same VM, with shared objects and memory on a single VM heap.
  • Interprocess: Use the ImageJ Server to work with ImageJ2 via a RESTful web services API, between processes on the same machine, or between multiple machines.


This component depends on other, lower level components, each of which lives in its own repository:

It also includes various "plugin" components at runtime:

See the pom.xml for a complete list of dependencies.


For a list of known issues, see the GitHub issues.

Please report any bugs by following the instructions online.