CINXE.COM
Contributing to Fiji
<!DOCTYPE html> <html> <head> <title>Contributing to Fiji</title> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=3" /> <meta content="ImageJ Wiki" property="og:site_name"> <meta content="Contributing to Fiji" property="og:title"> <meta content="article" property="og:type"> <meta content="The ImageJ wiki is a community-edited knowledge base on topics relating to ImageJ, a public domain program for processing and analyzing scientific images, and its ecosystem of derivatives and variants, including ImageJ2, Fiji, and others." property="og:description"> <meta content="https://imagej.github.io/contribute/fiji" property="og:url"> <meta content="https://imagej.github.io/media/icons/imagej2.png" property="og:image"> <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png"> <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="16x16" href="/favicon-16x16.png"> <link rel="manifest" href="/site.webmanifest"> <link rel="mask-icon" href="/safari-pinned-tab.svg" color="#5bbad5"> <meta name="msapplication-TileColor" content="#da532c"> <meta name="theme-color" content="#ffffff"> <link rel="stylesheet" href="/assets/css/lightbox.min.css" /> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/instantsearch.css@7/themes/algolia-min.css"/> <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/dygraphs@2.1.0/dist/dygraph.min.js"></script> <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/dygraphs@2.1.0/dist/dygraph.min.css" /> <link rel="stylesheet" href="/assets/css/main.css" /> <link rel="stylesheet" href="/assets/css/layout.css"/> <link rel="stylesheet" href="/assets/css/includes.css" /> <link rel="stylesheet" href="/assets/css/dock.css"/> <noscript><link rel="stylesheet" href="/assets/css/noscript.css" /></noscript> <link rel="stylesheet" href="/assets/css/page.css" /> </head> <body class="is-preload"> <!-- Top bar --> <section id="top-bar"> <a href="/"><img id="site-logo" src="/media/icons/imagej2.png"></a> <div id="search-panel"> <div id="search-box"></div> </div> </section> <!-- Page-info --> <div class="page-info"> <a href="https://github.com/imagej/imagej.github.io/commits/main/_pages/contribute/fiji.md">Page history</a> <a href="https://github.com/imagej/imagej.github.io/edit/main/_pages/contribute/fiji.md">Edit this page</a> <a href="/editing">How do I edit this website?</a></div> <section id="left-column" class="sidebar dock"> <!-- Menu --> <div class="menu dockable"> <div class="drag-handle"></div><h3>ImageJ Docs</h3> <ul> <li><a href="/downloads">Download</a></li> <li><details><summary>Learn</summary><ul> <li><details><summary><a href="/learn">ImageJ Basics</a></summary><ul> <li><a href="/tutorials">Tutorials</a></li> <li><a href="/learn/user-guides">User Guides</a></li> <li><a href="/learn/keyboard-shortcuts">Keyboard Shortcuts</a></li> <li><a href="/learn/tips-and-tricks">Tips and Tricks</a></li> <li><a href="/learn/troubleshooting">Troubleshooting</a></li> <li><a href="/learn/faq">Frequently Asked Questions</a></li> <li><details><summary><a href="/platforms">Supported Platforms</a></summary><ul> <li><a href="/platforms/windows">Windows</a></li> <li><a href="/platforms/macos">MacOS</a></li> <li><a href="/platforms/linux">Linux</a></li> <li><a href="/platforms/pi">Raspberry Pi</a></li> <li><a href="/platforms/android">Android</a></li> </ul></details></li> <!-- Learn/ImageJ Basics/Supported Platforms --> <li><details><summary><a href="/formats">File Formats</a></summary><ul> <li><a href="/formats/bio-formats">Bio-Formats</a></li> <li><a href="/formats/video">Video formats</a></li> <li><a href="/formats/quicktime">QuickTime</a></li> <li><a href="/formats/tiff">TIFF</a></li> <li><a href="/formats/pdf">PDF</a></li> <li><a href="/formats/dicom">DICOM</a></li> <li><a href="/formats/lsm">Zeiss LSM</a></li> <li><a href="/formats/olympus">Olympus VSI</a></li> <li><a href="/formats/lurawave">Opera Flex</a></li> <li><a href="/formats/fib-sem">FIB-SEM</a></li> </ul></details></li> <!-- Learn/ImageJ Basics/File Formats --> </ul></details></li> <!-- Learn/ImageJ --> <li><details><summary><a href="/imaging">Scientific Imaging</a></summary><ul> <li><a href="/imaging/principles">Principles of Scientific Imaging</a></li> <li><a href="/imaging/annotating-images">Annotating Images</a></li> <li><a href="/imaging/colocalization-analysis">Colocalization</a></li> <li><a href="/imaging/color-image-processing">Color Image Processing</a></li> <li><a href="/imaging/deconvolution">Deconvolution</a></li> <li><a href="/imaging/image-intensity-processing">Image Intensity Processing</a></li> <li><a href="/imaging/particle-analysis">Particle Analysis</a></li> <li><a href="/imaging/registration">Registration</a></li> <li><a href="/imaging/segmentation">Segmentation</a></li> <li><a href="/imaging/stack-slice-manipulations">Stack-slice Manipulations</a></li> <li><a href="/imaging/t-functions">T-functions</a></li> <li><a href="/imaging/tracking">Tracking</a></li> <li><a href="/imaging/visualization">Visualization</a></li> <li><a href="/imaging/z-functions">Z-functions</a></li> </ul></details></li> <!-- Learn/Scientific Imaging --> </ul></details></li> <!-- Learn --> <li><details><summary><a href="/plugins">Extend</a></summary><ul> <li><a href="/list-of-extensions">List of Extensions</a></li> <li><details><summary><a href="/update-sites">Update Sites</a></summary><ul> <li><a href="/list-of-update-sites">List of Update Sites</a></li> <li><a href="/update-sites/following">Following an Update Site</a></li> <li><a href="/update-sites/setup">Creating an Update Site</a></li> <li><a href="/update-sites/tos">Terms of Service</a></li> <li><a href="/update-sites/automatic-uploads">Automatic Upload</a></li> <li><a href="/update-sites/core-uploads">Uploading to Core Sites</a></li> <li><a href="/update-sites/faq">Update Sites FAQ</a></li> <li><a href="/update-sites/stats">Statistics</a></li> </ul></details></li> <!-- Extend/Update Sites --> <li><details><summary><a href="/scripting">Scripting</a></summary><ul> <li><a href="/scripting/basics">Scripting Basics</a></li> <li><a href="/scripting/script-editor">Script Editor</a></li> <li><a href="/scripting/parameters">Parameters</a></li> <li><a href="/scripting/user-input">User Input</a></li> <li><a href="/scripting/auto-imports">Auto Import</a></li> <li><a href="/scripting/templates">Templates</a></li> <li><a href="/scripting/batch">Batch Processing</a></li> <li><a href="/scripting/headless">Running Headlessly</a></li> <li><a href="/scripting/comparisons">Scripting Comparisons</a></li> <li><a href="/scripting/toolbox">Toolbox</a></li> <li><details><summary>Languages</summary><ul> <li><a href="/scripting/beanshell">BeanShell Scripting</a></li> <li><a href="/scripting/groovy">Groovy Scripting</a></li> <li><a href="/scripting/macro">ImageJ Macro</a></li> <li><a href="/scripting/javascript">JavaScript</a></li> <li><a href="/scripting/clojure">Lisp (Clojure)</a></li> <li><a href="/scripting/matlab">MATLAB</a></li> <li><a href="/scripting/jython">Python (Jython)</a></li> <li><a href="/scripting/python">Python (native)</a></li> <li><a href="/scripting/renjin">R (Renjin)</a></li> <li><a href="/scripting/jruby">Ruby (JRuby)</a></li> <li><a href="/scripting/scala">Scala Scripting</a></li> </ul></details></li> <!-- Extend/Scripting/Languages --> </ul></details></li> <!-- Extend/Scripting --> <li><details><summary><a href="/develop">Development</a></summary><ul> <li><a href="/develop/philosophy">Philosophy</a></li> <li><a href="/develop/architecture">Architecture</a></li> <li><a href="/develop/source">Source code</a></li> <li><a href="/develop/project-management">Project management</a></li> <li><a href="/develop/coding-style">Coding style</a></li> <li><a href="/develop/javadoc">Using Javadoc</a></li> <li><a href="/develop/debugging">Debugging</a></li> <li><a href="/develop/wish-list">Wish list</a></li> <li><details><summary>Tools</summary><ul> <li><a href="/develop/github">GitHub</a></li> <li><a href="/develop/maven">Maven</a></li> <li><a href="/develop/ci">CI/CD</a></li> <li><a href="/develop/dotfiles">Dotfiles</a></li> <li><details><summary><a href="/develop/ides">IDEs</a></summary><ul> <li><a href="/develop/eclipse">Eclipse</a></li> <li><a href="/develop/netbeans">NetBeans</a></li> <li><a href="/develop/intellij">IntelliJ IDEA</a></li> <li><a href="/develop/command-line">Command Line</a></li> </ul></details></li> </ul></details></li> <!-- Extend/Development/Tools --> <li><details><summary>Guides</summary><ul> <li><a href="/develop/plugins">Writing plugins</a></li> <li><a href="/develop/improving-the-code">Contributing to a plugin</a></li> <li><a href="/develop/releasing">Development lifecycle</a></li> <li><a href="/develop/building-a-pom">Building a POM</a></li> <li><a href="/develop/debugging-exercises">Hands-on debugging</a></li> <li><a href="/develop/writing-ops">Adding new ops</a></li> <li><a href="/develop/formats">Adding new formats</a></li> <li><a href="/develop/native-libraries">Using native libraries</a></li> <li><a href="/develop/tips">Tips for developers</a></li> <li><a href="/develop/cpp-tips">Tips for C++ developers</a></li> <li><a href="/develop/ij1-plugins">ImageJ 1.x plugins</a></li> <li><a href="/develop/versioning">Versioning</a></li> <li><a href="/develop/logging">Logging</a></li> <li><a href="/develop/uber-jars">Uber-JARs</a></li> </ul></details></li> <!-- Extend/Development/Guides --> <li><details><summary><a href="/develop/git">Git</a></summary><ul> <li><a href="/develop/git/eclipse">Git in Eclipse (EGit)</a></li> <li><a href="/develop/git/mini-howto">Git mini howto</a></li> <li><a href="/develop/git/workshop">Git workshop</a></li> <li><a href="/develop/git/conflicts">Git conflicts</a></li> <li><a href="/develop/git/topic-branches">Git topic branches</a></li> <li><a href="/develop/git/notes">Git notes</a></li> <li><a href="/develop/git/reflogs">Git reflogs</a></li> <li><a href="/develop/git/submodules">Git submodules</a></li> <li><a href="/develop/git/pinpoint-regressions">How to pinpoint regressions</a></li> <li><a href="/develop/git/publish-a-repository">How to publish a git repository</a></li> <li><a href="/develop/git/extract-a-subproject">How to extract a subproject</a></li> </ul></details></li> <!-- Extend/Development/Git --> </ul></details></li> <!-- Extend/Development --> </ul></details></li> <!-- Extend --> <li><details open><summary><a href="/contribute">Contribute</a></summary><ul> <li><a href="/contribute/citing">Citing</a></li> <li><a href="/people">Contributors</a></li> <li><a href="/orgs">Organizations</a></li> <li><a href="/contribute/governance">Governance</a></li> <li><a href="/contribute/funding">Funding</a></li> <li><a class="current-page">Contributing to Fiji</a></li> <li><details><summary><a href="/licensing">Licensing</a></summary><ul> <li><details><summary><a href="/licensing/open-source">Open Source</a></summary><ul> <li><a href="/licensing/apache">Apache</a></li> <li><a href="/licensing/bsd">BSD</a></li> <li><a href="/licensing/epl">EPL</a></li> <li><a href="/licensing/gpl">GPL</a></li> <li><a href="/licensing/lgpl">LGPL</a></li> <li><a href="/licensing/mit">MIT</a></li> <li><a href="/licensing/public-domain">Public domain</a></li> <li><a href="/licensing/big">BIG</a></li> </ul></details></li> <!-- Contribute/Licensing/Open Source --> <li><a href="/licensing/closed-source">Proprietary</a></li> </ul></details></li> <!-- Contribute/Licensing --> <li><details><summary><a href="/editing">Editing the Wiki</a></summary><ul> <li><a href="/editing/advanced">Advanced Editing</a></li> <li><a href="/editing/buttons">Buttons</a></li> <li><a href="/editing/citations">Citations</a></li> <li><a href="/editing/code">Source Code</a></li> <li><a href="/editing/debugging">Debugging</a></li> <li><a href="/editing/headers">Headers</a></li> <li><a href="/editing/icons">Icons</a></li> <li><a href="/editing/images">Images</a></li> <li><a href="/editing/keys">Keyboard Shortcuts</a></li> <li><a href="/editing/linking">Linking</a></li> <li><a href="/editing/math">Math Expressions</a></li> <li><a href="/editing/menu-paths">Menu Paths</a></li> <li><a href="/editing/navigation">Navigation</a></li> <li><a href="/editing/notices">Notices</a></li> <li><a href="/editing/people">People</a></li> <li><a href="/editing/pitfalls">Pitfalls</a></li> <li><a href="/editing/quizzes">Quizzes</a></li> <li><a href="/editing/statbox">Statbox</a></li> <li><a href="/editing/symbols">Symbols</a></li> <li><a href="/editing/tables">Tables</a></li> <li><a href="/editing/tooltips">Tooltips</a></li> <li><a href="/editing/videos">Videos</a></li> <li><a href="/editing/whitespace">Whitespace</a></li> </ul></details></li> <!-- Contribute/Editing the Wiki --> </ul></details></li> <!-- Contribute --> <li><details><summary><a href="/discuss">Discuss</a></summary><ul> <li><a href="/discuss/bugs">Reporting Issues</a></li> <li><a href="/discuss/mailing-lists">Mailing Lists</a></li> <li><a href="/discuss/chat">Chat</a></li> </ul></details></li> <!-- Discuss --> <li><details><summary>Explore</summary><ul> <li><a href="/news">News</a></li> <li><details><summary><a href="/events">Events</a></summary><ul> <li><a href="/events/presentations">Presentations</a></li> <li><a href="/events/conferences">Conferences</a></li> <li><a href="/events/hackathons">Hackathons</a></li> <li><a href="/events">More...</a></li> </ul></details></li> <!-- Discuss/Events --> <li><details><summary><a href="/libs">Libraries</a></summary><ul> <li><a href="/libs/imagej-ops">ImageJ Ops</a></li> <li><a href="/libs/imagej-common">ImageJ Common</a></li> <li><a href="/libs/imagej-legacy">ImageJ Legacy</a></li> <li><a href="/libs/scijava">SciJava</a></li> <li><a href="/libs/scifio">SCIFIO</a></li> <li><details><summary><a href="/libs/imglib2">ImgLib2</a></summary><ul> <li><a href="/libs/imglib2/getting-started">Getting Started</a></li> <li><a href="/libs/imglib2/accessors">Accessors</a></li> <li><a href="/libs/imglib2/accessibles">Accessibles</a></li> <li><a href="/libs/imglib2/examples">Examples</a></li> <li><a href="/libs/imglib2/workshop-introductory">Introductory Workshop</a></li> <li><a href="/libs/imglib2/workshop-advanced">Advanced Workshop</a></li> <li><a href="/libs/imglib2/matlab">ImgLib2 images in MATLAB</a></li> <li><a href="/libs/imglib2/benchmarks">Benchmarks</a></li> <li><a href="/libs/imglib2/faq">FAQ</a></li> <li><a href="/libs/imglib2/developing">Developing ImgLib2</a></li> <li><a href="/libs/imglib2/discussion">ImgLib2 Discussion</a></li> </ul></details></li> <!-- Explore/Libraries/ImgLib2 --> <li><a href="/libs">More...</a></li> </ul></details></li> <!-- Explore/Libraries --> <li><details><summary><a href="/software">Software</a></summary><ul> <li><a href="/software/nih-image">NIH Image</a></li> <li><a href="/software/imagej">ImageJ</a></li> <li><a href="/software/imagej2">ImageJ2</a></li> <li><a href="/software/fiji">Fiji</a></li> <li><a href="/software">More...</a></li> </ul></details></li> <!-- Explore/Software --> </ul></details></li> <!-- Explore --> </ul> </div> </section> <section id="right-column" class="sidebar dock"> <!-- Vital stats --> <!-- Table of contents --> <div id="toc" class="toc menu dockable"> <div class="drag-handle"></div> <h3>Page contents</h3> <ul data-toc="#content" data-toc-headings="h1,h2,h3,h4,h5,h6"></ul> </div> </section> <!-- Page title --> <div class="container"> <header class="major special"> <a class="project-icon shadowed-box" href="/software/fiji"><span class="tooltip"><img src="/media/icons/fiji.svg"><span class="tooltiptext" style="top: 80%; left: 25%; width: 20em">This page describes content relating to the Fiji distribution of ImageJ. Click the logo for details.</span></span></a> <h1>Contributing to Fiji</h1> <span class="project-counterweight"> </span> </header> </div> <!-- Nav bar --> <div id="nav-bar"><ul class="shadowed-box"><li><a href="/contribute/index">Contributing</a></li><li><a href="/contribute/citing">Citing</a></li><li><a href="/contribute/distributing">Distribution</a></li><li>Fiji</li><li><a href="/contribute/funding">Funding</a></li><li><a href="/contribute/governance">Governance</a></li><li><a href="/contribute/project-ideas">Project Ideas</a></li></ul></div> <!-- Main content --> <section id="page" class="main style1"> <div class="container"> <div class="box alt"></div> <div id="content" class="page-content"> <div class="notice" style="font-size: 2; background: #ebf2f8; border-left: 10px solid #67a1fe"><div class="notice-icon"><img src="/media/icons/info.svg" width="32" /></div><div class="notice-content"><p>There is another good way to distribute your extension: your own <a href="/update-sites">update site</a>. See the <a href="/contribute/distributing">Distribution</a> page for details.</p> </div> </div> <p>Distributing your software component as part of <a href="/software/fiji">Fiji</a> is an effective way to immediately and easily put it into the hands of many users, as well as to actively participate in the community of ImageJ software development. However, doing so comes with a few corresponding rules.</p> <p>The following document describes these requirements, as well as associated best practices, for shipping your component as part of the <a href="/software/fiji">Fiji</a> update site.</p> <h1 id="definition">Definition</h1> <p>A “core” <a href="/software/fiji">Fiji</a> project is one distributed on the <a href="http://update.fiji.sc">Fiji update site</a>. Such projects are subject to the requirements discussed below. Conversely, if you distribute your extension on a separate update site, this page does not apply.</p> <h1 id="requirements">Requirements</h1> <h2 id="freely-accessible-source-code">Freely accessible source code</h2> <p>A key principle of the Fiji project is:</p> <blockquote> <p>If you want to go fast, go alone. If you want to go far, go together.</p> <p>- African proverb</p> </blockquote> <p>There are many corollaries to this wisdom, the most prominent: if you write software in your endeavor to discover new insights, <a href="/licensing/open-source">Open Source</a> is the way that brings you farthest. Withholding the source code—like any other method to obstruct other researchers’ work, e.g. refusing to share materials and methods—will <a href="/licensing/closed-source">invariably have the opposite effect</a> in the long run. Likewise, working with interested parties to improve one’s project will invariably lead to a much better and stronger result.</p> <p>As such, components distributed with Fiji must be licensed in a way <a href="https://www.gnu.org/licenses/license-list.html">compatible with the GNU General Public License</a>.</p> <h2 id="source-hosted-on-github">Source hosted on GitHub</h2> <p>Core Fiji development takes place on <a href="/develop/github">GitHub</a>. This ensures continuity and visibility, and facilitates collaboration.</p> <p>There are two possibilities for where to host your project:</p> <ol> <li><strong>Standard.</strong> Repository is hosted in the <a href="https://github.com/fiji">fiji organization</a>, or a descendant organization (e.g., <a href="https://github.com/trakem2">trakem2</a>). <a href="/contribute/governance">Fiji maintainers</a> help maintain the project.</li> <li><strong>External.</strong> Repository is hosted in a GitHub organization you control. You alone maintain the project (though Fiji maintainers may submit PRs to help).</li> </ol> <h3 id="standard-projects">Standard projects</h3> <p>The following criteria apply to projects hosted in the <a href="https://github.com/fiji">fiji organization</a>:</p> <ul> <li>Each component (i.e., JAR file) lives in its own repository.</li> <li>Components use <a href="/develop/maven">Maven</a> to build: <ul> <li>As single-module projects</li> <li>With the standard Maven directory layout</li> <li>Extending the <a href="/develop/architecture#maven-component-structure">pom-scijava parent POM</a></li> </ul> </li> <li>Components use the groupId <code class="language-plaintext highlighter-rouge">sc.fiji</code>.</li> <li>Components are <a href="/develop/versioning">versioned according to SemVer</a>.</li> <li>The project uses <a href="/develop/project-management#issue-tracking">GitHub Issues</a> for issue tracking.</li> <li>The project has a dedicated page here on the ImageJ wiki.</li> <li>The <a href="/contribute/governance">Fiji maintainers</a> may make commits and <a href="/develop/releasing">release new versions</a> of the component as needed, so that Fiji as a whole continues to work as intended.</li> <li>The <code class="language-plaintext highlighter-rouge">master</code> branch is considered <em>release ready</em> at all times, meaning it compiles with passing tests, and is ready for downstream consumption.</li> </ul> <h3 id="external-projects">External projects</h3> <p>Projects that reside outside the <a href="https://github.com/fiji">fiji organization</a> are not subject to the requirements above. But it is then the project maintainer’s responsibility to ensure the project continues to function properly in up-to-date installations of Fiji. This might entail code changes as ImageJ and Fiji evolve.</p> <h2 id="continuous-integration-github-actions">Continuous integration: GitHub Actions</h2> <p>To verify that the Fiji components build without problems, and that all regression tests pass, every Fiji project’s source code repository is connected to a <a href="/develop/github-actions">GitHub Actions</a> job that builds and tests the source code, and deploys the <a href="#maven-artifacts">Maven artifacts</a>, whenever a new revision is made available.</p> <p>Have a look at the <a href="/develop/github-actions">GitHub Actions</a> page for instructions on setting it up.</p> <h2 id="versioning-and-dependency-convergence">Versioning and dependency convergence</h2> <p>Most Fiji projects use the <a href="/develop/versioning">SemVer versioning scheme</a>: a standard to encourage API consistency without obstructing API improvements.</p> <p>The minimum requirement for core Fiji projects is to abide by the <strong>MAJOR</strong> digit portion of <a href="http://semver.org/">SemVer</a>—i.e., if the first digit of the version string increases, it means that the new version is <em>not</em> backwards compatible with the old version. Conversely, if any later digit of the version string increases, it means that the new version <em>is</em> backwards compatible.</p> <p>This requirement exists to facilitate automated tooling for dependency convergence: the use of compatible dependency versions across all of Fiji. When two (or more) components of Fiji depend on different versions of the same component, it must be possible to verify which version is newer, and whether the newer version is backwards compatible with the old one. As long as the newest required dependencies are indeed backwards compatible, those dependencies are said to <em>converge</em>.</p> <p>From example, Apache Commons Math v3.x breaks backwards compatibility with Apache Commons Math v2.x. Since both versions share the same package and class names, only one of these versions can be shipped with Fiji. Therefore, all components of Fiji must rely on the same major version: either v2 or v3.</p> <p>In general, if the rest of the Fiji distribution upgrades to a new major version of a library on which your component depends, your component must also be upgraded to use the new version. Such decisions are typically reached after <a href="/discuss/#ways-to-get-help">discussion on public channels</a>.</p> <h3 id="best-practice-version-constants">Best practice: version constants</h3> <p>Many plugins in Fiji contain explicit version constants. Without <a href="/develop/maven">Maven</a>, in-code constants may make sense as a way to track compatibility. But by Mavenizing for contribution to Fiji, the pom.xml provides a standard mechanism for versioning, allowing migration away from constants in the source code.</p> <p>Versioning through the pom.xml has several advantages to facilitate <a href="/develop/architecture#reproducible-builds">reproducible builds</a>, including:</p> <ul> <li>Standardized scripts to increment versions appropriately.</li> <li>No risk of accidentally double-releasing a given version.</li> <li>Users and developers see the same version information.</li> </ul> <p>Furthermore, for backwards-compatibility a version can be automatically deduced:</p> <ul> <li>From the POM. This is the most reliable option. For convenience, <a href="https://github.com/scijava/scijava-common">scijava-common</a> provides a utility class to assist in version retrieval: <a href="https://github.com/scijava/scijava-common/blob/scijava-common-2.39.0/src/main/java/org/scijava/util/VersionUtils.java#L51">VersionUtils</a>.</li> <li>Alternatively, the <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Package.html#getSpecificationVersion%28%29">specification</a> or <a href="http://docs.oracle.com/javase/7/docs/api/java/lang/Package.html#getImplementationVersion%28%29">implementation</a> version can be used - for example, as in the <a href="https://github.com/fiji/LSM_Reader/commit/a6b26290ad71667efd75d77f3eef95d445d6eaff">LSMReader</a>. Core Fiji libraries follow a convention of setting these versions to match the pom version, and they are set at the manifest level to ensure they are they same for all packages in a given component. <strong>However</strong>, the two versions are allowed to differ - each package is allowed its own specification and implementation version! Furthermore, classes in a default package will not be able to retrieve either version. So these functions can not be relied on as a general solution.</li> </ul> <h2 id="maven-artifacts">Maven artifacts</h2> <p><a href="/software/fiji">Fiji</a> and related <a href="/libs/scijava">SciJava</a> software uses <a href="/develop/maven">Maven</a>, an industry standard to declare metadata about a project, to build projects using said metadata, and to <em>deploy</em> the resulting artifacts to a <a href="/develop/project-management#maven">Maven repository</a>. Such repositories are essentially for developers what <a href="/update-sites">update sites</a> are for users.</p> <ul> <li>The minimum requirement for core Fiji projects is to use a build system (e.g., <a href="/develop/maven">Maven</a> or Gradle) that automatically deploys required artifacts to the <a href="/develop/project-management#maven">SciJava Maven repository</a>, such that they can be consumed by downstream code, including other Fiji projects. Required artifacts to deploy include the main JAR and POM files, <code class="language-plaintext highlighter-rouge">-tests</code> JAR, <code class="language-plaintext highlighter-rouge">-sources</code> JAR and <code class="language-plaintext highlighter-rouge">-javadoc</code> JAR.</li> <li>To facilitate this, most Fiji projects inherit a common Maven configuration from the <a href="https://github.com/fiji/pom-fiji">pom-fiji</a> parent project. This configuration ensures that not only the compiled <em>.jar</em> files are deployed, but also the Javadocs and the sources. Therefore, it is strongly encouraged to extend this parent; see the <a href="/develop/architecture#maven-component-structure">Maven component structure</a> section for details.</li> <li>All of Fiji’s components are deployed by <a href="/develop/ci">CI/CD</a> to the <a href="/develop/project-management#maven">SciJava Maven repository</a> or to <a href="http://oss.sonatype.org/">OSS Sonatype</a>. That way, all Fiji components can be added easily as dependencies to downstream projects.</li> <li>All Fiji components are declared in the toplevel <a href="https://github.com/fiji/fiji">fiji</a> project’s POM as dependencies, and declared in the <a href="https://github.com/fiji/pom-fiji">pom-fiji</a> parent as <em>managed dependencies</em>, as part of Fiji’s <a href="/develop/architecture#bill-of-materials">Bill of Materials</a>.</li> </ul> <h1 id="guidelines">Guidelines</h1> <p>The following guidelines are less technical and more philosophical, but represent best practice for core Fiji components.</p> <h2 id="open-development-process">Open development process</h2> <p>Developers of Fiji components should invite others to contribute. That entails welcoming developers, acknowledging and working on pull requests, encouraging improvements, working together, enhancing upon each others’ work, share insights, etc.</p> <p>To leverage the power of <a href="/licensing/open-source">open source</a>, the default for discussions should be to use <a href="/discuss/#ways-to-get-help">public channels</a>. In other words, the question to ask should be “Is there any good reason why this conversation should be private?” instead of the opposite.</p> <h2 id="active-bug-management">Active bug management</h2> <p>Bug reports need to be acknowledged, participation in resolving bugs should be encouraged whenever possible, bugs should not go uncommented for months (we all have times when we are busy e.g. writing a paper; a little message helps the involved people understand), explanations are due when bugs go unresolved for years, etc</p> <h2 id="reusability-and-reliability">Reusability and reliability</h2> <p>Whenever possible, source code should be reused. If necessary, improve the existing source code. Only rewrite from scratch when absolutely necessary.</p> <p>Make code reusable, i.e. define APIs to use the functionality. This requires a little bit of discipline so that third parties can rely on the interfaces.</p> <h2 id="regression-tests">Regression tests</h2> <p>Writing regression tests is <a href="https://github.com/junit-team/junit/wiki/Getting-started">easy</a>: create a class in the <em>src/test/java/</em> directory structure and annotate methods with <em>@Test</em>, testing for various <a href="https://github.com/junit-team/junit/wiki/Assertions">assertions</a> (the most common ones are <em>assertEquals()</em>, <em>assertTrue()</em> and <em>assertNotNull()</em>).</p> <p>In particular when fixing a bug, it is a good idea to write a regression test <em>first</em>, making sure that it actually fails. After that, one should develop the fix, getting a cozy and warm feeling once the regression test passes.</p> <h2 id="separation-of-concerns">Separation of concerns</h2> <p>New features should be put into the appropriate component. E.g., when adding a general purpose utility, consider contributing to <a href="/libs/scijava#scijava-common">SciJava Common</a> or <a href="/libs/imagej-common">ImageJ Common</a> instead of bundling it with your specific extension.</p> <h1 id="examples">Examples</h1> <p>The following table provides a few examples of how various Fiji components are structured.</p> <table> <tbody> <tr> <td style="text-align: center"> <p><strong>Basics</strong></p> </td> <td></td> <td></td> <td></td> <td></td> <td> <p><strong><a href="/develop/github">GitHub</a></strong></p> </td> <td></td> <td> <p><strong><a href="/develop/maven">Maven</a></strong></p> </td> </tr> <tr> <td> <p><strong>Classification</strong></p> </td> <td> <p><strong>Component</strong></p> </td> <td> <p><strong>Core?<sup>1</sup></strong></p> </td> <td> <p><strong>Update site</strong></p> </td> <td> <p><strong>License<sup>2</sup></strong></p> </td> <td> <p><strong>Organization</strong></p> </td> <td> <p><strong>Repository</strong></p> </td> <td> <p><strong>groupId</strong></p> </td> </tr> <tr> <td rowspan=4> <p><strong>Standard</strong></p> </td> <td> <p><a href="/plugins/3d-viewer">3D Viewer</a></p> </td> <td> <p>✅</p> </td> <td style="text-align: center"> <p><a href="http://update.fiji.sc/">Fiji</a></p> </td> <td> <p><a href="/licensing/gpl">GPLv3</a></p> </td> <td> <p><a href="https://github.com/fiji">fiji</a></p> </td> <td> <p><a href="https://github.com/fiji/3D_Viewer/">3D_Viewer</a></p> </td> <td> <p><code>sc.fiji</code></p> </td> </tr> <tr> <td> <p><a href="/plugins/coloc-2">Coloc 2</a></p> </td> <td> <p>✅</p> </td> <td style="text-align: center"> <p><a href="http://update.fiji.sc/">Fiji</a></p> </td> <td> <p><a href="/licensing/gpl">GPLv3</a></p> </td> <td> <p><a href="https://github.com/fiji">fiji</a></p> </td> <td> <p><a href="https://github.com/fiji/Colocalisation_Analysis/">Colocalisation_Analysis</a></p> </td> <td> <p><code>sc.fiji</code></p> </td> <td></td> </tr> <tr> <td> <p><a href="/plugins/snt">Simple Neurite Tracer</a></p> </td> <td> <p>✅</p> </td> <td style="text-align: center"> <p><a href="http://update.fiji.sc/">Fiji</a></p> </td> <td> <p><a href="/licensing/gpl">GPLv3</a></p> </td> <td> <p><a href="https://github.com/fiji">fiji</a></p> </td> <td> <p><a href="https://github.com/fiji/Simple_Neurite_Tracer/">Simple_Neurite_Tracer</a></p> </td> <td> <p><code>sc.fiji</code></p> </td> <td></td> </tr> <tr> <td> <p><a href="/plugins/trackmate">TrackMate</a></p> </td> <td> <p>✅</p> </td> <td style="text-align: center"> <p><a href="http://update.fiji.sc/">Fiji</a></p> </td> <td> <p>?</p> </td> <td> <p><a href="https://github.com/fiji">fiji</a></p> </td> <td> <p><a href="https://github.com/fiji/TrackMate/">TrackMate</a></p> </td> <td> <p><code>sc.fiji</code></p> </td> <td></td> </tr> <tr> <td rowspan=2> <p><strong>External</strong></p> </td> <td> <p><a href="/plugins/sholl-analysis">Sholl Analysis</a></p> </td> <td> <p>✅</p> </td> <td style="text-align: center"> <p><a href="http://update.fiji.sc/">Fiji</a></p> </td> <td> <p><a href="/licensing/gpl">GPLv3</a></p> </td> <td> <p><a href="https://github.com/tferr">tferr</a></p> </td> <td> <p><a href="https://github.com/tferr/ASA/">ASA</a></p> </td> <td> <p><code>ca.mcgill</code></p> </td> </tr> <tr> <td> <p><a href="/formats/bio-formats">Bio-Formats</a></p> </td> <td> <p>✅</p> </td> <td style="text-align: center"> <p><a href="http://update.fiji.sc/">Fiji</a></p> </td> <td> <p><a href="/licensing/gpl">GPLv2</a></p> </td> <td> <p><a href="https://github.com/openmicroscopy">openmicroscopy</a></p> </td> <td> <p><a href="https://github.com/openmicroscopy/bioformats/">bioformats</a></p> </td> <td> <p><code>ome</code></p> </td> <td></td> </tr> <tr> <td rowspan=2> <p><strong>Subproject</strong></p> </td> <td> <p><a href="/plugins/bdv">BigDataViewer</a></p> </td> <td> <p>✅</p> </td> <td style="text-align: center"> <p><a href="http://update.fiji.sc/">Fiji</a></p> </td> <td> <p><a href="/licensing/gpl">GPLv3</a></p> </td> <td> <p><a href="https://github.com/bigdataviewer">bigdataviewer</a></p> </td> <td> <p><a href="https://github.com/bigdataviewer/bigdataviewer_fiji/">bigdataviewer_fiji</a></p> </td> <td> <p><code>sc.fiji</code></p> </td> </tr> <tr> <td> <p><a href="/plugins/trakem2">TrakEM2</a></p> </td> <td> <p>✅</p> </td> <td style="text-align: center"> <p><a href="http://update.fiji.sc/">Fiji</a></p> </td> <td> <p><a href="/licensing/gpl">GPLv3</a></p> </td> <td> <p><a href="https://github.com/trakem2">trakem2</a></p> </td> <td> <p><a href="https://github.com/trakem2/TrakEM2/">TrakEM2</a></p> </td> <td> <p><code>sc.fiji</code></p> </td> <td></td> </tr> <tr> <td rowspan=3> <p><strong>Third party</strong></p> </td> <td> <p><a href="/imaging">Cookbook</a></p> </td> <td> <p>❌</p> </td> <td style="text-align: center"> <p><a href="http://sites.imagej.net/Cookbook/">Cookbook</a></p> </td> <td> <p><a href="/imaging#credits">Various</a></p> </td> <td> <p><a href="https://github.com/fiji">fiji</a></p> </td> <td> <p><a href="https://github.com/fiji/cookbook/">cookbook</a></p> </td> <td> <p><code>sc.fiji</code></p> </td> </tr> <tr> <td> <p><a href="/plugins/mamut">MaMuT</a></p> </td> <td> <p>❌</p> </td> <td style="text-align: center"> <p><a href="http://sites.imagej.net/MaMuT/">MaMuT</a></p> </td> <td> <p><a href="/licensing/gpl">GPLv3</a></p> </td> <td> <p><a href="https://github.com/fiji">fiji</a></p> </td> <td> <p><a href="https://github.com/fiji/MaMuT/">MaMuT</a></p> </td> <td> <p><code>sc.fiji</code></p> </td> <td></td> </tr> <tr> <td> <p><a href="/plugins/slim-curve">SLIM Curve</a></p> </td> <td> <p>❌</p> </td> <td> <p><a href="http://sites.imagej.net/SLIM-Curve/">SLIM-Curve</a></p> </td> <td> <p><a href="/licensing/gpl">GPLv3</a></p> </td> <td> <p><a href="https://github.com/slim-curve">slim-curve</a></p> </td> <td> <p><a href="https://github.com/slim-curve/slim-plugin/">slim-plugin</a></p> </td> <td> <p><code>slim-curve</code></p> </td> <td></td> </tr> </tbody> </table> <p><sup>1</sup> A “core” project is one distributed on the Fiji update site. These projects are subject to the requirements discussed on this page.<br /> <sup>2</sup> See the <a href="/licensing">Licensing</a> page for further details.</p> </div> </div> </section> <!-- Footer --> <section id="footer"> <ul class="icons"> <li><a href="https://forum.image.sc/tag/imagej" class="icon alt"><img src="/media/icons/image-sc.png" width="24" style="vertical-align: middle; margin-top: -10px"><span class="label">Forum</span></a></li> <li><a href="https://twitter.com/hashtag/ImageJ" class="icon brands alt fa-twitter"><span class="label">Twitter</span></a></li> <li><a href="https://github.com/imagej" class="icon brands alt fa-github"><span class="label">GitHub</span></a></li> </ul> <ul class="copyright"> <li>Design: <a href="http://html5up.net">HTML5 UP</a></li> </ul> </section> <!-- Hamburger menu --> <nav role="navigation"> <div id="ham-toggle"> <input type="checkbox" /> <span></span> <!-- top bun --> <span></span> <!-- hamburger --> <span></span> <!-- bottom bun --> <ul id="ham-menu"> <div class="menu"><h3>ImageJ Docs</h3> <ul> <li><a href="/downloads">Download</a></li> <li><details><summary>Learn</summary><ul> <li><details><summary><a href="/learn">ImageJ Basics</a></summary><ul> <li><a href="/tutorials">Tutorials</a></li> <li><a href="/learn/user-guides">User Guides</a></li> <li><a href="/learn/keyboard-shortcuts">Keyboard Shortcuts</a></li> <li><a href="/learn/tips-and-tricks">Tips and Tricks</a></li> <li><a href="/learn/troubleshooting">Troubleshooting</a></li> <li><a href="/learn/faq">Frequently Asked Questions</a></li> <li><details><summary><a href="/platforms">Supported Platforms</a></summary><ul> <li><a href="/platforms/windows">Windows</a></li> <li><a href="/platforms/macos">MacOS</a></li> <li><a href="/platforms/linux">Linux</a></li> <li><a href="/platforms/pi">Raspberry Pi</a></li> <li><a href="/platforms/android">Android</a></li> </ul></details></li> <!-- Learn/ImageJ Basics/Supported Platforms --> <li><details><summary><a href="/formats">File Formats</a></summary><ul> <li><a href="/formats/bio-formats">Bio-Formats</a></li> <li><a href="/formats/video">Video formats</a></li> <li><a href="/formats/quicktime">QuickTime</a></li> <li><a href="/formats/tiff">TIFF</a></li> <li><a href="/formats/pdf">PDF</a></li> <li><a href="/formats/dicom">DICOM</a></li> <li><a href="/formats/lsm">Zeiss LSM</a></li> <li><a href="/formats/olympus">Olympus VSI</a></li> <li><a href="/formats/lurawave">Opera Flex</a></li> <li><a href="/formats/fib-sem">FIB-SEM</a></li> </ul></details></li> <!-- Learn/ImageJ Basics/File Formats --> </ul></details></li> <!-- Learn/ImageJ --> <li><details><summary><a href="/imaging">Scientific Imaging</a></summary><ul> <li><a href="/imaging/principles">Principles of Scientific Imaging</a></li> <li><a href="/imaging/annotating-images">Annotating Images</a></li> <li><a href="/imaging/colocalization-analysis">Colocalization</a></li> <li><a href="/imaging/color-image-processing">Color Image Processing</a></li> <li><a href="/imaging/deconvolution">Deconvolution</a></li> <li><a href="/imaging/image-intensity-processing">Image Intensity Processing</a></li> <li><a href="/imaging/particle-analysis">Particle Analysis</a></li> <li><a href="/imaging/registration">Registration</a></li> <li><a href="/imaging/segmentation">Segmentation</a></li> <li><a href="/imaging/stack-slice-manipulations">Stack-slice Manipulations</a></li> <li><a href="/imaging/t-functions">T-functions</a></li> <li><a href="/imaging/tracking">Tracking</a></li> <li><a href="/imaging/visualization">Visualization</a></li> <li><a href="/imaging/z-functions">Z-functions</a></li> </ul></details></li> <!-- Learn/Scientific Imaging --> </ul></details></li> <!-- Learn --> <li><details><summary><a href="/plugins">Extend</a></summary><ul> <li><a href="/list-of-extensions">List of Extensions</a></li> <li><details><summary><a href="/update-sites">Update Sites</a></summary><ul> <li><a href="/list-of-update-sites">List of Update Sites</a></li> <li><a href="/update-sites/following">Following an Update Site</a></li> <li><a href="/update-sites/setup">Creating an Update Site</a></li> <li><a href="/update-sites/tos">Terms of Service</a></li> <li><a href="/update-sites/automatic-uploads">Automatic Upload</a></li> <li><a href="/update-sites/core-uploads">Uploading to Core Sites</a></li> <li><a href="/update-sites/faq">Update Sites FAQ</a></li> <li><a href="/update-sites/stats">Statistics</a></li> </ul></details></li> <!-- Extend/Update Sites --> <li><details><summary><a href="/scripting">Scripting</a></summary><ul> <li><a href="/scripting/basics">Scripting Basics</a></li> <li><a href="/scripting/script-editor">Script Editor</a></li> <li><a href="/scripting/parameters">Parameters</a></li> <li><a href="/scripting/user-input">User Input</a></li> <li><a href="/scripting/auto-imports">Auto Import</a></li> <li><a href="/scripting/templates">Templates</a></li> <li><a href="/scripting/batch">Batch Processing</a></li> <li><a href="/scripting/headless">Running Headlessly</a></li> <li><a href="/scripting/comparisons">Scripting Comparisons</a></li> <li><a href="/scripting/toolbox">Toolbox</a></li> <li><details><summary>Languages</summary><ul> <li><a href="/scripting/beanshell">BeanShell Scripting</a></li> <li><a href="/scripting/groovy">Groovy Scripting</a></li> <li><a href="/scripting/macro">ImageJ Macro</a></li> <li><a href="/scripting/javascript">JavaScript</a></li> <li><a href="/scripting/clojure">Lisp (Clojure)</a></li> <li><a href="/scripting/matlab">MATLAB</a></li> <li><a href="/scripting/jython">Python (Jython)</a></li> <li><a href="/scripting/python">Python (native)</a></li> <li><a href="/scripting/renjin">R (Renjin)</a></li> <li><a href="/scripting/jruby">Ruby (JRuby)</a></li> <li><a href="/scripting/scala">Scala Scripting</a></li> </ul></details></li> <!-- Extend/Scripting/Languages --> </ul></details></li> <!-- Extend/Scripting --> <li><details><summary><a href="/develop">Development</a></summary><ul> <li><a href="/develop/philosophy">Philosophy</a></li> <li><a href="/develop/architecture">Architecture</a></li> <li><a href="/develop/source">Source code</a></li> <li><a href="/develop/project-management">Project management</a></li> <li><a href="/develop/coding-style">Coding style</a></li> <li><a href="/develop/javadoc">Using Javadoc</a></li> <li><a href="/develop/debugging">Debugging</a></li> <li><a href="/develop/wish-list">Wish list</a></li> <li><details><summary>Tools</summary><ul> <li><a href="/develop/github">GitHub</a></li> <li><a href="/develop/maven">Maven</a></li> <li><a href="/develop/ci">CI/CD</a></li> <li><a href="/develop/dotfiles">Dotfiles</a></li> <li><details><summary><a href="/develop/ides">IDEs</a></summary><ul> <li><a href="/develop/eclipse">Eclipse</a></li> <li><a href="/develop/netbeans">NetBeans</a></li> <li><a href="/develop/intellij">IntelliJ IDEA</a></li> <li><a href="/develop/command-line">Command Line</a></li> </ul></details></li> </ul></details></li> <!-- Extend/Development/Tools --> <li><details><summary>Guides</summary><ul> <li><a href="/develop/plugins">Writing plugins</a></li> <li><a href="/develop/improving-the-code">Contributing to a plugin</a></li> <li><a href="/develop/releasing">Development lifecycle</a></li> <li><a href="/develop/building-a-pom">Building a POM</a></li> <li><a href="/develop/debugging-exercises">Hands-on debugging</a></li> <li><a href="/develop/writing-ops">Adding new ops</a></li> <li><a href="/develop/formats">Adding new formats</a></li> <li><a href="/develop/native-libraries">Using native libraries</a></li> <li><a href="/develop/tips">Tips for developers</a></li> <li><a href="/develop/cpp-tips">Tips for C++ developers</a></li> <li><a href="/develop/ij1-plugins">ImageJ 1.x plugins</a></li> <li><a href="/develop/versioning">Versioning</a></li> <li><a href="/develop/logging">Logging</a></li> <li><a href="/develop/uber-jars">Uber-JARs</a></li> </ul></details></li> <!-- Extend/Development/Guides --> <li><details><summary><a href="/develop/git">Git</a></summary><ul> <li><a href="/develop/git/eclipse">Git in Eclipse (EGit)</a></li> <li><a href="/develop/git/mini-howto">Git mini howto</a></li> <li><a href="/develop/git/workshop">Git workshop</a></li> <li><a href="/develop/git/conflicts">Git conflicts</a></li> <li><a href="/develop/git/topic-branches">Git topic branches</a></li> <li><a href="/develop/git/notes">Git notes</a></li> <li><a href="/develop/git/reflogs">Git reflogs</a></li> <li><a href="/develop/git/submodules">Git submodules</a></li> <li><a href="/develop/git/pinpoint-regressions">How to pinpoint regressions</a></li> <li><a href="/develop/git/publish-a-repository">How to publish a git repository</a></li> <li><a href="/develop/git/extract-a-subproject">How to extract a subproject</a></li> </ul></details></li> <!-- Extend/Development/Git --> </ul></details></li> <!-- Extend/Development --> </ul></details></li> <!-- Extend --> <li><details open><summary><a href="/contribute">Contribute</a></summary><ul> <li><a href="/contribute/citing">Citing</a></li> <li><a href="/people">Contributors</a></li> <li><a href="/orgs">Organizations</a></li> <li><a href="/contribute/governance">Governance</a></li> <li><a href="/contribute/funding">Funding</a></li> <li><a class="current-page">Contributing to Fiji</a></li> <li><details><summary><a href="/licensing">Licensing</a></summary><ul> <li><details><summary><a href="/licensing/open-source">Open Source</a></summary><ul> <li><a href="/licensing/apache">Apache</a></li> <li><a href="/licensing/bsd">BSD</a></li> <li><a href="/licensing/epl">EPL</a></li> <li><a href="/licensing/gpl">GPL</a></li> <li><a href="/licensing/lgpl">LGPL</a></li> <li><a href="/licensing/mit">MIT</a></li> <li><a href="/licensing/public-domain">Public domain</a></li> <li><a href="/licensing/big">BIG</a></li> </ul></details></li> <!-- Contribute/Licensing/Open Source --> <li><a href="/licensing/closed-source">Proprietary</a></li> </ul></details></li> <!-- Contribute/Licensing --> <li><details><summary><a href="/editing">Editing the Wiki</a></summary><ul> <li><a href="/editing/advanced">Advanced Editing</a></li> <li><a href="/editing/buttons">Buttons</a></li> <li><a href="/editing/citations">Citations</a></li> <li><a href="/editing/code">Source Code</a></li> <li><a href="/editing/debugging">Debugging</a></li> <li><a href="/editing/headers">Headers</a></li> <li><a href="/editing/icons">Icons</a></li> <li><a href="/editing/images">Images</a></li> <li><a href="/editing/keys">Keyboard Shortcuts</a></li> <li><a href="/editing/linking">Linking</a></li> <li><a href="/editing/math">Math Expressions</a></li> <li><a href="/editing/menu-paths">Menu Paths</a></li> <li><a href="/editing/navigation">Navigation</a></li> <li><a href="/editing/notices">Notices</a></li> <li><a href="/editing/people">People</a></li> <li><a href="/editing/pitfalls">Pitfalls</a></li> <li><a href="/editing/quizzes">Quizzes</a></li> <li><a href="/editing/statbox">Statbox</a></li> <li><a href="/editing/symbols">Symbols</a></li> <li><a href="/editing/tables">Tables</a></li> <li><a href="/editing/tooltips">Tooltips</a></li> <li><a href="/editing/videos">Videos</a></li> <li><a href="/editing/whitespace">Whitespace</a></li> </ul></details></li> <!-- Contribute/Editing the Wiki --> </ul></details></li> <!-- Contribute --> <li><details><summary><a href="/discuss">Discuss</a></summary><ul> <li><a href="/discuss/bugs">Reporting Issues</a></li> <li><a href="/discuss/mailing-lists">Mailing Lists</a></li> <li><a href="/discuss/chat">Chat</a></li> </ul></details></li> <!-- Discuss --> <li><details><summary>Explore</summary><ul> <li><a href="/news">News</a></li> <li><details><summary><a href="/events">Events</a></summary><ul> <li><a href="/events/presentations">Presentations</a></li> <li><a href="/events/conferences">Conferences</a></li> <li><a href="/events/hackathons">Hackathons</a></li> <li><a href="/events">More...</a></li> </ul></details></li> <!-- Discuss/Events --> <li><details><summary><a href="/libs">Libraries</a></summary><ul> <li><a href="/libs/imagej-ops">ImageJ Ops</a></li> <li><a href="/libs/imagej-common">ImageJ Common</a></li> <li><a href="/libs/imagej-legacy">ImageJ Legacy</a></li> <li><a href="/libs/scijava">SciJava</a></li> <li><a href="/libs/scifio">SCIFIO</a></li> <li><details><summary><a href="/libs/imglib2">ImgLib2</a></summary><ul> <li><a href="/libs/imglib2/getting-started">Getting Started</a></li> <li><a href="/libs/imglib2/accessors">Accessors</a></li> <li><a href="/libs/imglib2/accessibles">Accessibles</a></li> <li><a href="/libs/imglib2/examples">Examples</a></li> <li><a href="/libs/imglib2/workshop-introductory">Introductory Workshop</a></li> <li><a href="/libs/imglib2/workshop-advanced">Advanced Workshop</a></li> <li><a href="/libs/imglib2/matlab">ImgLib2 images in MATLAB</a></li> <li><a href="/libs/imglib2/benchmarks">Benchmarks</a></li> <li><a href="/libs/imglib2/faq">FAQ</a></li> <li><a href="/libs/imglib2/developing">Developing ImgLib2</a></li> <li><a href="/libs/imglib2/discussion">ImgLib2 Discussion</a></li> </ul></details></li> <!-- Explore/Libraries/ImgLib2 --> <li><a href="/libs">More...</a></li> </ul></details></li> <!-- Explore/Libraries --> <li><details><summary><a href="/software">Software</a></summary><ul> <li><a href="/software/nih-image">NIH Image</a></li> <li><a href="/software/imagej">ImageJ</a></li> <li><a href="/software/imagej2">ImageJ2</a></li> <li><a href="/software/fiji">Fiji</a></li> <li><a href="/software">More...</a></li> </ul></details></li> <!-- Explore/Software --> </ul></details></li> <!-- Explore --> </ul> </div> </ul> </div> </nav> <div id="dock-overlay-left" class="dock-overlay" data-dock-target="left-column"></div> <div id="dock-overlay-right" class="dock-overlay" data-dock-target="right-column"></div> <!-- Search results --> <div id="search-results"> <div id="search-hits"></div> <div id="pagination"></div> </div> <!-- Scripts --> <!-- Libraries --> <script src="/assets/js/jquery.min.js"></script> <script src="/assets/js/jquery.scrolly.min.js"></script> <script src="/assets/js/browser.min.js"></script> <script src="/assets/js/breakpoints.min.js"></script> <script src="/assets/js/util.js"></script> <script src="/assets/js/jquery.toc.js"></script> <script src="/assets/js/lightbox.min.js"></script> <!-- Extensions --> <!-- Site code --> <script src="/assets/js/main.js"></script> <script src="/assets/js/dock.js"></script> <script src="/assets/js/code.js"></script> <!-- Anchors --> <script src="https://cdn.jsdelivr.net/npm/anchor-js/anchor.min.js"></script> <script>anchors.add('#page h1, #page h2, #page h3, #page h4, #page h5, #page h6');</script> <!-- Citations --> <script src="https://cdn.jsdelivr.net/npm/citation-js@0.4.0-9"></script> <script src="/assets/js/cite.js"></script> <!-- Search --> <script src="https://cdn.jsdelivr.net/npm/algoliasearch@4.13.0/dist/algoliasearch-lite.umd.js"></script> <script src="https://cdn.jsdelivr.net/npm/instantsearch.js@4.40.3/dist/instantsearch.production.min.js"></script> <script src="/assets/js/search.js"></script> <script src="/assets/js/search-tweaks.js"></script> </body> </html>