VTK 9.6.0
We are thrilled to announce the release of VTK 9.6, which introduces a host of new features, including robust WebAssembly (WASM) enhancements, native ONNX support, significant performance optimizations, improved rendering capabilities, and numerous bug fixes.
Let’s dive into some of the key highlights from this release:
WebAssembly and Web Capabilities
VTK 9.6 takes a giant leap forward in web development support, making it easier than ever to bring high-performance visualization to the browser.
JavaScript Wrappers and Standalone WASM
You can now generate JavaScript bindings for VTK C++ classes using Emscripten, enabling the creation of web applications with a simple CMake option (VTK_WRAP_JAVASCRIPT). Additionally, new interfaces allow for the development of remote or standalone WASM applications using the vtkWebAssembly.wasm binary, providing distinct sessions for client-server or local-only contexts.
Wayland Support
The vtkEGLRenderWindow now supports native Wayland as a backend, enabling both onscreen and offscreen rendering on modern Linux compositors.
Java Support
This release brings significant improvements to VTK’s Java support. Several build errors in the generated Java wrappers were successfully resolved. The process for creating and uploading Java Maven packages to Kitware’s Maven repository, located at https://github.com/orgs/Kitware/packages, has been restored. To maintain stability and quality, new Java test jobs have also been added to VTK’s Continuous Integration (CI) process.
AI and Advanced Filtering
Native ONNX Inference
AI integration has arrived in VTK with the new vtkONNXInference filter. This allows you to run AI models directly within your VTK pipeline using the ONNX framework. The filter can process parameters to output cell or point data and supports using existing field data as model input.
Point Matching Transform
A new vtkPointsMatchingTransformFilter has been added, allowing you to easily deduce the affine transform required to align a point set by specifying four pairs of points in space.
Visualization and Rendering Enhancements
VTK 9.6 introduces refinements to rendering quality and flexibility.
Composite Data Texturing
The vtkCompositePolyDataMapper now supports applying textures to individual blocks within a composite dataset. By assigning textures via block flat index, users can achieve rich, heterogeneous visualizations.

Scalar Bar Title Separation
Control over your annotations is now more consistent. The VerticalTitleSeparation property in scalar bars is now respected for both vertical and horizontal orientations, ensuring your titles are perfectly spaced.


Diverging Color Interpolation Fix
We have updated vtkColorTransferFunction to correctly handle Hue as circular when performing diverging interpolation. This resolves artifacts seen when using colormaps like Viridis in diverging modes.
Core Performance and Data Modeling
Faster Observer Operations
A significant optimization has been applied to vtkObject, changing how observers are stored. By moving from a linked list to a std::map, operations like AddObserver, RemoveObserver, and InvokeEvent now scale much better, with RemoveObserver changing from O(n) to O(log n) complexity.

Refactored AMR and New Grid Types
The AMR data model has been refactored for better future-proofing, with vtkUniformGridAMR now inheriting from vtkPartitionedDataSetCollection. Additionally, a new abstract vtkCartesianGrid class unifies the API for vtkImageData and vtkRectilinearGrid, simplifying algorithms that operate on structured data.
Cell Validation
The vtkCellValidator and related classes (vtkPolygon, vtkPolyhedron) have been improved to detect a wider range of mesh defects, such as coincident vertices and inverted faces, reporting them via a new vtkCellStatus enumeration.
Improved I/O and Python Support
USD Export
A new vtkUSDExporter allows you to export entire VTK scenes to the Universal Scene Description (USD) format, bridging VTK with modern 3D content creation workflows.
Python Free-Threading and Numpy Integration
VTK 9.6 supports Python’s free-threading mode (PEP 703), readying the toolkit for Python 3.13+. Furthermore, VTK composite arrays now support standard Numpy functionality (like numpy.mean and slicing) directly, making data analysis in Python more intuitive.
Other Notable Changes
- Build Requirement: The minimum supported version of Microsoft Visual Studio is now 2019.
- Memory Safety: A massive cleanup effort has replaced ~75% of GetVoidPointer usages with safer alternatives to prevent unnecessary data copying and improve stability.
- Stream Support: Many readers, including STL, PTS, and DICOM, now support reading directly from C++ streams.
Community and Getting VTK 9.6
This release is the result of dedicated work from the VTK development team and valuable contributions from our global community. We extend our sincere thanks to everyone who contributed code, reported bugs, and participated in discussions.
To get started with VTK 9.6:
- Download: Visit the VTK download page.
- Documentation: Explore the VTK documentation.
- Full Release Notes: For a comprehensive list of all changes, please see the VTK 9.6 Release Notes.
We are excited to see the innovative applications you will build with VTK 9.6! Stay connected with the community through the VTK Discourse forum.
Citing VTK
When citing VTK in your scientific research, please mention the following work:
Schroeder, Will; Martin, Ken; Lorensen, Bill (2006), The Visualization Toolkit (4th ed.), Kitware, ISBN 978-1-93