SimpleITK is ITK with the ceremony removed and seven languages of bindings
SimpleITK: a layer built on top of the Insight Toolkit (ITK), intended to simplify and facilitate ITK's use in rapid prototyping, education and interpreted languages.
At a glance
- What is it?
- SimpleITK is a C++ layer on top of the Insight Toolkit that keeps ITK's filtering, segmentation and registration components behind a simplified interface, wrapped with SWIG into Python, R, Java, C#, Lua, TCL and Ruby bindings. It fits a researcher or engineer prototyping image analysis in a scripted language, and it does not fit a team that needs the parts of ITK SimpleITK does not expose.
- Who is it for?
- SimpleITK fits a researcher, educator or prototyping team that needs registration, segmentation and filtering in a scripted language and would rather not write ITK's C++ pipeline directly. It does not fit a project that needs ITK features SimpleITK does not expose, since the project states it provides access to most but not all of the ITK components.
- Can I use it commercially?
- Yes. Apache-2.0 is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly C++, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on October 22, 2026, and from our analysis. They are not legal advice.
Editorial analysis
The pitch is a simplified interface to a toolkit that is not simple
SimpleITK is an image analysis toolkit with a large number of components supporting general filtering operations, image segmentation and registration. It is built on top of the Insight Segmentation and Registration Toolkit, ITK, with the intent of providing a simplified interface to ITK.
The reason a layer like this exists is the shape of ITK itself. ITK is a C++ template library with a pipeline architecture, and its power comes from composing filters and algorithms at compile time, which is a good thing for a production imaging pipeline and a bad thing for someone exploring an idea in a notebook. SimpleITK takes the algorithms and presents them as objects you call methods on.
The project description is explicit about the audience. It is intended to simplify and facilitate ITK's use in rapid prototyping, education and interpreted languages, and the documentation says the same thing in different words, describing the toolkit as aimed at interactive image analysis in education and research.
The dimensions are worth noting because they are a real difference from the layer below. Unlike ITK's support of n-dimensional spatio-temporal images, SimpleITK supports 2D, 3D and 4D images. The dimensionality refers to spatio-temporal dimensions, and the voxels can be n-dimensional vectors, so a 3D image whose pixels carry a vector is still 3D.
The licence is Apache 2.0, the copyright is held by NumFOCUS, and the project is part of the Insight Software Consortium. The last push was on 2026-10-15.
SWIG is what makes seven languages possible
SimpleITK itself is written in C++ but is available for a large number of programming languages. The list is Python, R, Java, C#, Lua, TCL and Ruby, and the mechanism is stated plainly: wrapping of the C++ code is accomplished through SWIG, and in principle any language wrapped by SWIG should be applicable to SimpleITK.
That last sentence is the interesting one. It means the language list is a consequence of the binding tool rather than a set of hand-maintained interfaces, and that is both the reason seven languages exist and the reason the binding quality varies between them. SWIG generates the wrapper, and what it generates depends on what it can express for the target language, and how the C++ type system maps onto that language's object model.
The repository layout reflects the pipeline. The Wrapping/ directory holds the SWIG interface definitions and the per-language packaging, and the pyproject.toml shows the Python build requiring scikit-build-core, setuptools-scm, swig around 4.5.0, jinja2, jsonschema and pyyaml, with the build backend being scikit_build_core.build. The version is dynamic, derived by setuptools-scm from a tag matching a v prefix pattern, and written into Wrapping/Python/SimpleITK/_version.py.
The top level also shows the packaging machinery that a project of this size needs: CMakeLists.txt, SimpleITKConfig.cmake.in and SimpleITKConfigVersion.cmake.in for the CMake config package, UseSimpleITK.cmake.in for downstream consumers, a SuperBuild/ directory, Testing/ with CTestConfig.cmake, a Doxyfile, and an ExpandTemplateGenerator/ directory.
Python is the primary target in practice, with requires-python >= 3.10 and optional test extras of numpy 1.25.0 or later and pytest.
Documentation comes in three layers, and the notebooks are the entry point
The README makes a claim about documentation and then backs it with a structure, and for a library of this size that structure is the thing to evaluate.
With massive libraries like SimpleITK, good documentation is a must, and the documentation is split into three levels. The API Documentation contains class and function documentation, and the descriptions for functions and classes are primarily borrowed from the original ITK C++ classes. The SimpleITK Documentation site contains high-level guides covering fundamental SimpleITK concepts and common conventions, details about the binary distributions, instructions for building the toolkit, and examples in all supported programming languages. The third layer is the Jupyter Notebook Repository, a collection of notebooks illustrating the use of SimpleITK for educational and research activities, which demonstrate interactive image analysis in Python and R and are the recommended reading if you are starting with SimpleITK.
The borrowed-from-the-original-ITK note is a useful signal about the documentation's character. You get ITK's algorithm descriptions without ITK's complexity, which is exactly the trade the project is making, and it also means the reference material is written for someone who already understands ITK.
The notebook repository is the part that will determine whether a new user gets anywhere. Learning a C++ imaging pipeline by reading API documentation is slow, and learning it by opening a notebook that registers two images and resamples one against the other is fast.
Most of ITK is available, not all of it, and that gap is the constraint
The Support section is one sentence and it is the most important sentence in the README for an adopter. SimpleITK provides access to most of the ITK components, but not all. If you are looking for something specific and cannot find it, the advice is to open an issue on GitHub or ask for support on the forum at discourse.itk.org.
That is a reasonable position for a simplifying layer, and it comes with a clear cost. A simplified interface is a curated subset, and the curation is a judgement call about what is common. The ITK components that are not surfaced are the ones that a layer designed for prototyping judged less central, and a project that turns out to need one of them has to drop to ITK itself or to a different approach.
The dimension limit is the other boundary and it works the same way. SimpleITK supports 2D, 3D and 4D images, while ITK supports n-dimensional spatio-temporal images. A 5D time series is out of scope for SimpleITK, and a dynamic imaging workflow that needs one either restructures its data or uses ITK directly.
The two boundaries together define the shape of the project. It is a wide, shallow layer over a deep library, deliberately so, and the price is that the deepest and most unusual corners of ITK are not reachable through it.
The examples directory is the real documentation of what works
The Examples/ directory in the repository is more informative than the feature list, because the names map directly onto the tasks people actually have.
There are the DICOM ones: DicomConvert, DicomImagePrintTags, DicomSeriesFromArray, DicomSeriesReadModifyWrite and DicomSeriesReader, with both AdvancedImageReading and ImageIOSelection alongside them. DICOM handling is where imaging code usually breaks, because a study is a directory of files with inconsistent metadata, and a set of examples that read a series into a volume is the practical proof that the library handles it.
Then the registration ones, which are the core of the toolkit: DemonsRegistration1 and DemonsRegistration2, and ImageRegistrationMethod1 through ImageRegistrationMethod4, plus Elastix for the third-party registration framework.
The rest cover the pipeline machinery and the common operations: AdvancedImageReading, BufferImportExport, CppCMake, CppInPlace, FastMarchingSegmentation, FilterProgressReporting, HelloWorld, ImageGridManipulation, ITKIntegration, and the CSharp example directory.
Two of those names are worth pausing on. FilterProgressReporting is about a filter that takes a long time and needs to tell the user so, which is the kind of detail that only appears in a library that has been used on real work. And ITKIntegration is the example that shows how SimpleITK and ITK code coexist in one program, which is the escape hatch for the components SimpleITK does not expose.
For a user evaluating the library, reading the Examples directory is a better use of time than reading the class list.
The project asks you to cite three papers, which tells you what it is for
The How to Cite section asks readers who found SimpleITK useful in their research to support the effort by citing the relevant publications, and it lists three with full bibliographic details.
They are, in order of what they establish. The 2018 paper in the Journal of Statistical Software by Beare, Lowekamp, Yaniv, Image Segmentation, Registration and Characterization in R with SimpleITK, which is the reference for using the library from R. The 2018 paper in the Journal of Digital Imaging by Yaniv, Lowekamp, Johnson and Beare, SimpleITK Image-Analysis Notebooks: a Collaborative Environment for Education and Reproducible Research, which is the reference for the notebook-based teaching use case. And the 2013 paper in Frontiers in Neuroinformatics by Lowekamp, Chen, Ibáñez and Blezek, The Design of SimpleITK, which is the reference for the architectural decisions.
Three papers across five years, in a statistics journal, a medical imaging journal and a neuroinformatics journal, is a signal about the audience. The Journal of Statistical Software citation is the one to notice: SimpleITK is being presented to statisticians and data analysts, not only to imaging researchers, which is a broader and more receptive audience than the medical imaging community.
The funding history supports the same reading. Development has been supported by the Intramural Research Program of the National Institutes of Health and its National Institute of Allergy and Infectious Diseases, by the US National Library of Medicine under the American Recovery and Reinvestment Act, and by the Insight Software Consortium and the ITK user and developer communities. The ARRA reference dates the institutional support to the post-2009 period.
There is a CITATION.cff file in the repository root and a .mailmap, which are the metadata counterparts of that culture.
Where SimpleITK is the wrong choice
The first wrong-tool case is a need for an ITK component SimpleITK does not wrap. The project is explicit that it provides access to most of the ITK components but not all, and a pipeline that needs one of the missing pieces has to drop into ITK's C++ API, which is the complexity SimpleITK exists to hide. The ITKIntegration example shows that coexistence is possible, and it also shows the cost.
The second is dimensionality. SimpleITK supports 2D, 3D and 4D images, and a 5D spatio-temporal dataset is out of scope, so dynamic imaging research is either restructured or served by ITK directly.
The third is production deployment in a typed, compiled stack. The library is at its best in a notebook, a script or a research prototype, and the layer of generated bindings is where a hard latency or memory requirement usually shows up. A service that processes images continuously and has a strict throughput budget wants the C++ library, not a script that calls into it.
The fourth is that the generated bindings are not all equal. SWIG produces a wrapper per target language, and the quality of the result depends on how well the C++ type system maps onto the target, and on how much work has been done to make the common path pleasant in each. The Python and R interfaces are the most used, and the C#, Java, Lua, TCL and Ruby bindings are less exercised, so a team working in one of those is taking a different risk than a Python team.
Editorial conclusion
SimpleITK fits a researcher, educator or prototyping team that needs registration, segmentation and filtering in a scripted language and would rather not write ITK's C++ pipeline directly. It does not fit a project that needs ITK features SimpleITK does not expose, since the project states it provides access to most but not all of the ITK components. Before adopting it, check the specific ITK component you need against the API documentation, and confirm the dimensionality match, because SimpleITK supports 2D, 3D and 4D images while ITK itself supports n-dimensional spatio-temporal images.
Frequently asked questions
What is SimpleITK and what does it sit on top of?
SimpleITK is an image analysis toolkit with a large number of components supporting general filtering operations, image segmentation and registration, built on top of the Insight Segmentation and Registration Toolkit, ITK, with the intent of providing a simplified interface to ITK.
Which programming languages does SimpleITK support?
It is written in C++ and available for Python, R, Java, C#, Lua, TCL and Ruby. The wrapping of the C++ code is done through SWIG, so in principle any language wrapped by SWIG should be applicable to SimpleITK.
How do I install SimpleITK for Python?
The project publishes to PyPI and the pyproject.toml declares requires-python >= 3.10 with numpy 1.25.0 or later and pytest as optional test extras. The build uses scikit-build-core with CMake and SWIG, and the source is built with the instructions in the SimpleITK documentation site.
Does SimpleITK support all of ITK's features?
No. The project states that SimpleITK provides access to most of the ITK components, but not all, and that you should open an issue or ask on the forum if something specific is missing. SimpleITK also supports 2D, 3D and 4D images, unlike ITK's support of n-dimensional spatio-temporal images.
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/simpleitk-simpleitk)Was this useful?