Developer documentation

Developer documentation overview

Using JIPipe in Java

The JIPipe API allows you to run algorithms, graphs, and projects in a pure Java environment without the need for a GUI or through ImageJ1 or ImageJ2 scripts. Prerequisites To use the JIPipe API JIPipe must be initialized first. This requires an ImageJ instance or any other way to load SciJava plugins. The following example […]

Creating a parameter type

JIPipe extensions can register custom parameter types for the use in nodes. JIPipe requires you to register custom parameter types, where they are assigned an unique identifier. This is done to allow future refactoring without breaking a user’s project. A custom parameter type must be JSON-serializable via the Jackson library. It is associated to an […]

Creating a data type

JIPipe Java extensions can define new data types. Custom JIPipe data types must inherit from JIPipeData. Please implement all required functions as suggested by the interface if it is a non-abstract or interface data type. JIPipeData classes have various requirements regarding annotations and static functions. Required: annotations Examples for storage documentations Tip: Feel free to […]

Adding node examples

To teach users about the settings of more complex nodes or to improve the convenience, you can annotate nodes with node examples. These will appear in a dedicated tab “Examples” on selecting a node within the pipeline editor. The standardized example API is based around the “Node templates” functionality. To create an example, follow these […]

Advanced node info

The JIPipe API allows the generation of node types during the registration process via a custom JIPipeNodeInfo objects (node info objects contain all basic information of a node and are basically definitions of node types). The standard mode of registering a new node type via registerNodeType(id, class, icon) utilizes JIPipeJavaNodeInfo. Custom node info types can […]


The current version of JIPipe supports parallelization via a fixed thread pool. Parallelization is done on an per-algorithm-level, meaning that the algorithms are responsible for providing parallelization capabilities. The included base algorithms JIPipeIteratingAlgorithm, JIPipeSimpleIteratingAlgorithm, and JIPipeMergingAlgorithm already come with support for parallelization that has to be manually enabled via code. The inherit from JIPipeParallelizedAlgorithm and […]

Node parameters

You can add parameters to your algorithm by creating a property with a getter and setter. Then you annotate the getter and setter with the same @JIPipeParameter keys. You should also add an @JIPipeDocumentation annotation to either the getter or setter. Parameters are automatically serialized and deserialized. Example code: parameter Changing parameter values from code […]

Advanced slot configurations

In the previous example, we used the @JIPipeInputSlot and @JIPipeOutputSlot annotations with autoCreate = true to automatically configure the slots. This is not sufficient for more complicated algorithms that require A custom JIPipeSlotConfiguration can be used to implement such more advanced behaviors .For many cases, the default implementation JIPipeDefaultMutableSlotConfiguration and its builder are sufficient. The […]

Creating a node

Nodes usually are based on one of three types: There are also additional node types that can be reviewed in the JIPipeAlgorithm JavaDoc. To develop a node, inherit from one of these classes. Annotations are used to provide essential metadata. Example code: simple iterating node Registering the node JIPipe will not automatically register nodes into […]

Creating an extension project

Explains how to create a Java plugin for JIPipe
12 Next