ImageJ: Public Domain Scientific Image Analysis in Java
Public domain software for processing and analyzing scientific images
At a glance
- What is it?
- ImageJ is free, public domain software for processing and analyzing scientific images, written in Java for cross-platform use. It runs as a desktop application, embeds as a Maven library, and underpins Fiji and ImageJ2, but the codebase targets Java 1.6 bytecode and does not build with OpenJDK 17, 21, or 25.
- Who is it for?
- Life scientists and bioimage analysis researchers who need a free, platform-independent tool for fluorescence quantification, particle counting, or western blot densitometry should use ImageJ. Developers who want to embed image analysis in their own software can pull it as a Maven dependency at net.imagej:ij.
- Can I use it commercially?
- Check first. The repository uses a licence we do not classify automatically, so read its LICENSE file before any commercial use.
- Is it still maintained?
- Yes. The repository last received commits 71 days ago.
- What is it written in?
- Mainly Java, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 1, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What ImageJ Is Used For and Who Runs It
ImageJ was developed at the National Institutes of Health and is used primarily in life science research. Common applications include cell counting, measuring the area or length of structures in microscopy images, quantifying band intensity in western blots, and analyzing particle size distributions. Because it is written in Java, it runs on Windows, macOS, and Linux without platform-specific builds.
The software is released into the public domain. There is no license fee and no restriction on commercial use. Researchers, core imaging facilities, and developers who embed image analysis in Java applications all use it. The README directs new users to the ImageJ website at https://imagej.nih.gov/ij/, the ImageJ wiki at https://imagej.net/, and the Image.sc Forum for community support.
Java Architecture and the Macro Language
ImageJ's cross-platform behavior follows from its Java foundation. A single JAR file produced by the build process runs on any platform with a compatible JVM. The repository targets Java 1.6 as its minimum bytecode version, which is a deliberate choice that preserves compatibility with older JVMs still used in some research environments.
The software includes a macro language that allows researchers to automate repetitive analysis tasks. The repository contains a macros/ directory with macro examples. Users who want to extend ImageJ through Java code can write plugins. The plugins/ directory in the repository is the standard location for plugin classes. The README does not detail the plugin API; the ImageJ wiki covers that.
The repository also includes an IJ_Props.txt configuration file, an images/ directory with sample images, and a functions.html reference file for the macro language.
Installing ImageJ and Building from Source
The primary distribution channel is the download page at https://imagej.nih.gov/ij/. For developers building from source, the README recommends OpenJDK 8 or 11. Building with OpenJDK 17, 21, or 25 is not currently supported because of the Java 1.6 bytecode target.
To build and package ImageJ into a JAR using Maven:
mvnTo compile and launch the application directly:
mvn -PexecTo generate the project Javadoc:
mvn javadoc:javadocThe repository also supports Apache Ant through a build.xml file. The README notes that a Windows-specific version of Ant packaged with an appropriate JVM is available at https://imagej.nih.gov/ij/download/tools/ant/ant.zip, which simplifies building on Windows without a separate JDK installation.
After building with mvn, the resulting JAR lands in the target/ directory. Running it opens the ImageJ toolbar, from which you can open images, apply built-in filters, and run macros.
Using ImageJ as a Maven Library Dependency
Projects that need programmatic image analysis can pull ImageJ as a Maven library. Add the following to your pom.xml:
<dependency>
<groupId>net.imagej</groupId>
<artifactId>ij</artifactId>
<version>1.53j</version>
</dependency>The README notes that versions up to 1.48q are available in the SciJava Maven repository at https://maven.scijava.org/, while versions starting at 1.48r are on Maven Central. The README also warns that versions before 1.53k may not identically match the corresponding release tags in the repository, which is relevant when reproducing an exact build from source.
This embedding path is commonly used in automated microscopy pipelines and bioinformatics workflows that need image measurements without a graphical user interface.
Limitations: JDK Version Constraint, Feature Depth, and Headless Operation
The JDK version constraint is the most immediate limitation for new adopters. The README states that building with JDK 17, 21, or 25 is not currently supported. In practice this means a developer building with a modern JDK must either install an older JDK alongside it or switch to a derivative like ImageJ2 or Fiji, which have updated their build requirements.
ImageJ's feature set reflects its long history. Some capabilities available in commercial image analysis tools, such as machine-learning-based segmentation or deep learning integration, are not part of the core application but are provided by plugins. Finding and installing the right plugin requires consulting the ImageJ wiki or the Image.sc Forum rather than the repository.
Headless operation, running ImageJ without a display for batch processing on a server, is possible but is not documented in the README. The wiki covers the necessary JVM flags. Developers who need headless image processing at scale should evaluate whether ImageJ's headless support meets their requirements before committing to it.
ImageJ vs. Fiji: When to Choose Each
Fiji is the community distribution of ImageJ. Both the Fiji and ImageJ2 projects are documented at https://imagej.net/ and are linked from the ImageJ repository README. Fiji bundles a large collection of plugins, supports several scripting languages beyond the ImageJ macro language (including Python, Groovy, and Beanshell), and uses a modern update mechanism for managing plugins and dependencies.
The ImageJ repository itself is the original, minimal codebase. It is the right choice when you want a stable, auditable core with no bundled plugins, or when embedding image analysis as a library dependency in a Java project where you control the dependency graph. Fiji is the right choice when you need a ready-to-use desktop application with a broad plugin ecosystem for domain-specific assays, or when you want scripting beyond the macro language.
ImageJ2 is a separate rewrite that maintains API compatibility with ImageJ but extends the architecture for more complex workflows. The ImageJ repository README links to all three projects.
Maintenance and License
The last push to the repository was on 2026-07-22. The project has no GitHub releases listed in the repository; distributions are published through the ImageJ website at https://imagej.nih.gov/ij/ and through Maven Central under the net.imagej:ij artifact. The software is in the public domain, with the full disclaimer at https://imagej.nih.gov/ij/disclaimer.html.
The repository includes a GitHub Actions CI workflow visible through the build status badge in the README, which indicates that automated builds run on pushes. There is also a mailing list at https://imagej.nih.gov/ij/list.html and the Image.sc Forum at https://forum.image.sc/tag/imagej for community support. Contributing guidance is documented on the ImageJ wiki at https://imagej.net/contribute/.
The project has been maintained for many years without switching to a more restrictive license, and the public domain status means any downstream use, including commercial redistribution and modification, requires no permission. The Maven Central publication under a stable group ID and artifact ID (net.imagej:ij) means the artifact is reliably resolvable without custom repository configuration.
Editorial conclusion
Life scientists and bioimage analysis researchers who need a free, platform-independent tool for fluorescence quantification, particle counting, or western blot densitometry should use ImageJ. Developers who want to embed image analysis in their own software can pull it as a Maven dependency at net.imagej:ij. Before adopting it for a new build, verify that your environment uses OpenJDK 8 or 11: the README explicitly states that JDK 17, 21, and 25 are not currently supported. For workflows that require scripting languages, expanded file format support, or a broader plugin ecosystem, Fiji is the community distribution that adds those capabilities on top of ImageJ's core.
Frequently asked questions
What is ImageJ used for?
ImageJ is used to process and analyze scientific images. Common tasks include measuring cell area and length, quantifying western blot bands, counting particles, and analyzing fluorescence microscopy images.
Is ImageJ software free?
Yes. ImageJ is released into the public domain. There is no license fee and no restriction on commercial use. The public domain disclaimer is available at https://imagej.nih.gov/ij/disclaimer.html.
How do I install ImageJ?
The primary download is at https://imagej.nih.gov/ij/. Developers who want to build from source should use OpenJDK 8 or 11 and run mvn or mvn -Pexec in the repository directory. Maven and Ant builds are both documented in the README.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/imagej-imagej)