# VTK 9.7 Release Notes

Changes made since VTK 9.6.2 include the following.

---
<!-- mtoc-start -->

* [New Features](#new-features)
  * [Build](#build)
  * [Core](#core)
  * [DataModel](#datamodel)
  * [Filters](#filters)
  * [I/O](#io)
  * [Interaction](#interaction)
  * [Rendering](#rendering)
  * [WebAssembly](#webassembly)
  * [Python](#python)
  * [ThirdParty](#thirdparty)
* [Changes](#changes)
  * [Build](#build-1)
  * [Core](#core-1)
  * [DataModel](#datamodel-1)
  * [Filters](#filters-1)
  * [I/O](#io-1)
  * [Rendering](#rendering-1)
  * [WebAssembly](#webassembly-1)
* [Fixes/improvements](#fixesimprovements)
  * [Core](#core-2)
  * [Filters](#filters-2)
  * [I/O](#io-2)
  * [Rendering](#rendering-2)
  * [WebAssembly](#webassembly-2)
* [Deprecations/Removals](#deprecationsremovals)
* [Updates](#updates)
* [Closed Issues (111 total)](#closed-issues-111-total)

<!-- mtoc-end -->
---

## New Features

### Build

* **PCH Support**
Added PCH support in the build, which can be toggled using the `VTK_USE_PCH` option.
([Author notes](9.7/add_pch_option_in_build.md))

* **Improve JPEG performances using SIMD**
libjpeg-turbo can now be compiled with SIMD extensions via `VTK_JPEG_ENABLE_SIMD` option for better performance.

* **CMake Support for Wayland**
FindWAYLAND.cmake enables straightforward building with Wayland support via `VTK_USE_Wayland` option.
([Author notes](9.7/hardware-windows-and-wayland.md))

### Core

* **vtkGetConstObjectMacro**
VTK now provides `vtkGetConstObjectMacro` in `vtkSetGet.h` to generate const-correct getter methods for `vtkObject` member variables.
([Author notes](9.7/add-vtkGetConstObjectMacro.md))

* **vtkAbstractArray: Add GetCapacity(), ReserveTuples(), and ReserveValues()**
New methods clarify array storage semantics. `GetSize()`, `Resize()`, and `Allocate()` are now deprecated in favor of clearer semantics matching `std::vector` behavior.
([Author notes](9.7/add-vtkAbstractArray-reserve-and-capacity.md))

* **Add SetBuffer() for AOS and SOA Data Array Templates**
`vtkAOSDataArrayTemplate` and `vtkSOADataArrayTemplate` now support `SetBuffer()` for zero-copy buffer transfers; `BufferChangedEvent` fires on buffer reallocation.
([Author notes](9.7/add-setbuffer-to-data-arrays.md))

* **vtkWeakPtr: Thread-safe weak references**
New `vtkWeakPtr<T>` class provides thread-safe weak references to `vtkObjectBase` instances, complementing the non-thread-safe `vtkWeakPointer`.
([Author notes](9.7/add-vtkWeakPtr.md))

* **vtkCollection refactor to use std::vector**
`vtkCollection` now uses `std::vector` instead of linked list, improving performance; `vtkCollectionElement` and some protected members removed.
([Author notes](9.7/vtkCollection-refactor-to-use-stdvector.md))

* **vtkCollection: Add support for range-based for loops**
`vtkCollection` now supports C++11 range-based for loops; `vtkCollectionIterator` and `vtkCollectionSimpleIterator` are deprecated.
([Author notes](9.7/vtkCollection-add-support-for-range-based-for-loops.md))

* **vtkCollection now supports Python sequence protocol**
`vtkCollection` subclasses now support `len()`, indexing, membership testing, and Pythonic mutation methods (`append`, `insert`, `remove`, `clear`).
([Author notes](9.7/vtkCollection-sequence-protocol.md))

* **vtkAbstractTransform can update attribute only**
`vtkAbstractTransform` now allows transforming only data arrays (normals/vectors) without forcing geometry transformation via new virtual methods.

* **Add new AllToAllVVoidArray method in vtkCommunicator**
`AllToAllVVoidArray` from MPI is now available in `vtkCommunicator` for distributing variable-size data across all processes.

### DataModel

* **Implicit Arrays with NumPy-Compatible Python Mixins**
All implicit array types (`vtkAffineArray`, `vtkCompositeArray`, `vtkConstantArray`, `vtkIndexedArray`, `vtkStridedArray`, `vtkStructuredPointArray`) now provide NumPy-compatible mixins supporting lazy arithmetic, efficient reductions, and zero-copy operations without materialization.
([Author notes](9.7/numpy-compatible-array-mixins.md))

* **vtkBuffer Python Integration and NumPy Memory Safety**
`vtkBuffer` now provides full buffer protocol support for zero-copy NumPy views; `BufferChangedEvent` detects stale arrays.
([Author notes](9.7/vtkBuffer-in-python.md))

* **Dataset attribute property setters and pandas/xarray conversion**
Dataset objects now support `point_data`/`cell_data` property setters accepting dictionaries; `FieldDataBase` provides `to_pandas()`, `from_pandas()`, `to_xarray()`, `from_xarray()`.

* **Pythonic APIs for vtkCellArray, vtkPoints, and vtkUnstructuredGrid**
`vtkCellArray`, `vtkPoints`, and `vtkUnstructuredGrid` now support Pythonic constructors accepting NumPy arrays or Python lists with improved string representations.

* **vtkAMRBox::Add API**
`vtkAMRBox` now provides API to add multiple boxes together, growing to contain all provided boxes.

* **Improved vtkCellGrid support in data model and filters**
`vtkDataObject::GetAttributesAsFieldData`, `vtkAttributeDataToTableFilter` support, and `vtkCellGridSummaryInformationQuery` added.
([Author notes](9.7/vtkCellGrid-improvements.md))

### Filters

* **Add vtkAMRContourFilter**
A new filter computes perfectly watertight contours on `vtkOverlappingAMR` by creating interfaces between non-refined and refined grids of an AMR.
([Author notes](9.7/add-amr-contour-filter.md))

  |Rough face | Refined face | Interface face |
  |:--:|:--:|:--:|
  |[image](imgs/9.7/add-amr-contour-filter_rough.png) | [image](imgs/9.7/add-amr-contour-filter_refined.png) | [image](imgs/9.7/add-amr-contour-filter_interface.png) |


* **Geometry and Feature Edges Dispatcher Filters**
Two new dispatcher filters (`vtkGeometryFilterDispatcher` and `vtkFeatureEdgesDispatcher`) provide unified geometry extraction and feature edge detection across all VTK data types.
([Author notes](9.7/add-geometry-and-feature-edges-dispatchers.md))

* **Add vtkConvexHull filter**
New `vtkPointSetAlgorithm` computes convex hulls in 1/2/3D with O(n), O(n log n), or O(n log n) average complexity respectively.

* **vtkHilbertCurveSorter: Space-Filling Curve Ordering**
New filter sorts data points along a Hilbert curve for locality-preserving space-filling curve ordering.

* **vtkJumpAndWalkCellLocator: A new cell locator based on Jump and Walk algorithm**
New `vtkAbstractCellLocator` subclass implementing jump-and-walk algorithm; `vtkFindCellStrategy` classes deprecated.
([Author notes](9.7/add-vtkJumpAndWalkCellLocator.md))

* **Add vtkPTemporalPathLineFilter for partitioned dataset support**
Extends `vtkTemporalPathLineFilter` with `vtkPartitionedDataSet` support and parallel selection allgather.

* **Add vtkSurfaceNetsAtlas**
New filter exposes SurfaceNets output as queryable label atlas with regions and patches; extensive API for post-processing.
([Author notes](9.7/add-vtkSurfaceNetsAtlas.md))

* **Voronoi Framework**
New parallel 2D/3D Voronoi tessellation and Delaunay triangulation framework with `vtkVoronoiFlower2D/3D` and `vtkGeneralizedSurfaceNets3D` filters.
([Author notes](9.7/add-voronoi-framework.md))

### I/O

* **CanReadFile support**
Extended `CanReadFile` support to 22 readers including `vtkDataSetReader`, `vtkXMLReader`, `vtkSTLReader`, `vtkGLTFImporter`, and more.

* **Added an IFC reader based on IfcOpenShell library**
New `vtkIFCReader` imports Industry Foundation Classes (BIM) data, converting parametric surfaces to meshes using OpenCascade.

* **CGNS Polyhedron Flip Face Orientation**
`vtkCGNSReader` now has `FlipFaceNormals` option to correct inconsistent face winding in polyhedral datasets.

* **OBJ reader/writer RGB/RGBA color array support**
`vtkOBJReader` now reads color data from OBJ files; `vtkOBJWriter` can write color arrays when manually configured.

* **PLY reader/writer texture coordinates (s, t) support**
`vtkPLYReader` now reads (s, t) texture coordinates; `vtkPLYWriter` supports `SetTextureCoordinatesNameToST`.

* **vtkGLTFImporter: Detect binary stream automatically**
`vtkGLTFImporter` now automatically detects binary streams; `StreamIsBinary` property deprecated.

* **vtkGLTFExporter: Export object names to glTF files**
`vtkGLTFExporter` now uses actor object names for mesh and node names in exported glTF files.

* **NanoVDB writer**
New `vtkNanoVDBWriter` exports `vtkImageData` to NanoVDB file format.

* **VTKHDF: Add support for dataset attributes**
VTKHDF now supports dataset attributes (normals, scalars, global ids, etc.) via HDF5 'Attribute' field; version bumped to 2.6.

* **vtkRectilinearGrid & vtkStructuredGrid support in VTKHDF**
VTKHDF specification now supports Rectilinear and Structured Grids with both simple and time-dependent data.

* **vtkMPASReader: Read primary grid from MPAS**
[Comparison of primary and dual grids in MPAS](imgs/9.7/mpas-grids.jpg)
`vtkMPASReader` now supports `UsePrimaryGrid` option to read Voronoi primary grid instead of Delaunay dual grid. ([Author notes](9.7/mpas-primary-grid.md))

* **vtkFidesReader supports reading from Conduit nodes**
`vtkFidesReader` now allows passing in-memory Conduit nodes directly, bypassing the filesystem entirely. Supports both C++ and Python interfaces with automatic reference counting. ([Author notes](9.7/iofides-supports-conduit.md))

* **New vtkTestUtilities API to test data against file**
`vtkTestUtilities::CompareWithFile()` and `RegressionTest()` provide easy VTKHDF data comparison; writes baseline on failure.

### Interaction

* **Camera Manipulators Enhanced**
VTK now provides a simpler way to bind different kinds of camera movement to a combination of mouse button and modifier keys using `vtkInteractorStyleManipulator`.
([Author notes](9.7/add-camera-manipulators.md))

* **Widget reference tracking**
Interactor now maintains references to `vtkInteractorObserver` widgets when `TrackInteractorObserverInstances` enabled; all VTK widgets updated.

* **Add zSpace custom stylus events**
zSpace module now supports custom stylus events via `vtkZSpaceSDKManager` configuration; public event handlers removed.

### Rendering

* **Add skybox blur capability**
`vtkRenderer` now supports skybox blurring via `SetSkyboxBlurEnabled()` and `SetSkyboxBlurRadius()`.

  [skybox_blur_image](imgs/9.7/add-skybox-blur-image.png)

* **Add skybox rendering support in WebGPU**
WebGPU backend now supports skybox rendering with cube map textures and Float32Filterable feature for HDR.

* **ANARI material library support**
Unified `vtkRenderMaterialLibrary` base class with `vtkANARIMaterialLibrary` and `vtkOSPRayMaterialLibrary` implementations.
([Author notes](9.7/anari-materials-library-support.md))

* **macOS now supports corner resize mouse cursors**
`vtkCocoaRenderWindow` and `vtkCocoaHardwareWindow` now support corner resize cursors on macOS 15 Sequoia.

* **Architectural Update: Hardware Window, Wayland, and WebGPU**
Major architectural overhaul separating graphics from windowing via `vtkHardwareWindow`; native Wayland, WebGPU, Metal support added.
([Author notes](9.7/hardware-windows-and-wayland.md))

* **Support 16-bit Textures on GLES 3.0 and WebAssembly**
Comprehensive 16-bit texture support with GL_EXT_texture_norm16 detection and GPU-assisted conversion strategies.
([Author notes](9.7/volume-rendering-16bit-wasm.md))

* **WebGPU Lighting and Coincident Topology Support**
WebGPU backend now supports all VTK light types and coincident topology depth offsets for z-fighting resolution.

* **vtkBatchedLabeledDataMapper: Implementation**
New backend-agnostic `vtkBatchedLabeledDataMapper` with glyph atlas batching; `vtkFastLabeledDataMapper` deprecated.
([Author notes](9.7/vtkBatchedLabeledDataMapper-implementation.md))

* **vtkAxis: Vertical labels support**
`vtkAxis` now supports vertical label orientation via `SetVerticalLabels()`.

* **vtkAxis: Avoid overlapping labels**
`vtkAxis` now supports `SetOverlappingLabels(false)` to prevent label overlap.

### WebAssembly

* **Add WebXR Module**
New `Rendering/WebXR` module provides VR/AR support on web via WebXR API with Emscripten compilation.

* **Use HTML canvas in VTK.wasm without id**
`specialHTMLTargets` mapping allows interfacing HTML canvas elements without id attributes.

* **Session management: Print Objects To String**
`vtkStandaloneSession` now supports printing VTK object information to strings in WASM; JavaScript API updated.

* **Add methods to clean up observers in vtkSession**
`vtkSession` C API now provides `UnObserveAll` methods for observer cleanup; exposed in WASM session interface.

### Python

* **Look up algorithms in a Pipeline by object_name**
`Pipeline` now supports `pipeline[name]` lookup to find algorithms by `SetObjectName()` without holding references.

* **Dictionary interface for vtkDataArraySelection**
`vtkDataArraySelection` now supports a Python dictionary interface for getting, setting, and deleting array enable/disable states using standard dictionary syntax (`sel["Pressure"] = True`).
([Author notes](9.7/pythonic-array-selection.md))

### ThirdParty

* **Add a Conduit module**
`VTK::conduit` module allows external Conduit dependency; `ORDER_DEPENDS` enforces consistency with `VTK::catalyst`.

## Changes

### Build

* **Name targets after library names**
VTK module targets are now named after their library names (e.g., vtkCommonCore) to avoid conflicts with vendored dependencies.

* **vtkModuleWrapPython renames Python module targets**
Python module targets now use `Py` prefix to avoid naming conflicts between module and Python variant targets.

* **Python 3.10 is now minimum supported**
Official support for Python 3.9 has been dropped; VTK now requires Python 3.10 or later.

* **Switch VTK_ENABLE_OSPRAY default to OFF**
`VTK_ENABLE_OSPRAY` option now defaults to OFF; users must manually enable it when building the RenderingRaytracing module.

### Core

* **Convert implicit arrays to templated classes**
`vtkAffineArray`, `vtkCompositeArray`, `vtkConstantArray`, and others are now concrete templated classes instead of typedefs, allowing Python instantiation.

* **Deprecate classes/functions that use GetVoidPointer()**
`vtkSMPContourGrid`, `vtkSMPMergePoints`, and others deprecated; new array ranges extended to support all concrete array subclasses.
([Author notes](9.7/deprecate-classes-functions-that-use-GetVoidPointer.md))

* **vtkDataArrayAccessor: Replace with vtk::DataArrayRange**
`vtkDataArrayAccessor` usage replaced with more modern `vtk::DataArrayValueRange` and `vtk::DataArrayTupleRange` throughout codebase.

### DataModel

* **Rename VTKCompositeDataArray to VTKPartitionedArray**
`VTKCompositeDataArray` extracted and renamed to `VTKPartitionedArray`; legacy class remains for backward compatibility.

### Filters

* **vtkAggregateDataSetFilter: Add Target Process**
New `TargetProcess` property controls whether data aggregates to `ROOT_PROCESS` or `PROCESS_WITH_MOST_POINTS`.

* **Deprecate vtkImageThreshold and switch to vtkImageBinaryThreshold**
`vtkImageThreshold` deprecated in favor of `vtkImageBinaryThreshold` with clearer API for threshold modes.

### I/O

* **Proper caching in vtkHDFReader**
`vtkHDFReader` caching reworked for all types including `vtkPartitionedDataSetCollection` and `vtkMultiBlockDataSet`; `UseCache` now true by default.
([Author notes](9.7/vtkhdf-improvements.md))

* **Deserialize functions return status**
Deserialization functions now return bool status indicating success/failure; previously returned void.

* **vtkWriter::Write() now return the correct value**
`vtkWriter::Write()` now returns false on failure; `vtkWriter::WriteData` deprecated in favor of `WriteDataAndReturn`.

### Rendering

* **Change lookup table log scale debug type**
`vtkLookUpTable` now logs Warning instead of Debug when log scale set with invalid table range.

* **Modify vtkRenderer's protected member**
`vtkRenderer::PropArrayCount` removed; `PropArray` replaced with `std::vector`; `vtkSkybox` kept separate in `BackgroundProp`.

* **Update required Dawn version for WebGPU builds**
Required Dawn version for WebGPU builds updated to v20260421.125655.

* **Bump ANARI version to v0.15.0**
ANARI library tested and supported at latest version v0.15.0.

### WebAssembly

* **Make vtkOpenXRManager private**
`vtkOpenXRManager` moved to `vtk::detail::vtkOpenXRManager`; public API moved to `vtkOpenXRRenderWindow`.

## Fixes/improvements

### Core

* **Replace most GetVoidPointer instances (Part 2)**
Removed ~48% of remaining `GetVoidPointer()` usages using `vtkArrayDispatch` and range methods; marked remaining usages as safe.
([Author notes](9.7/replace-GetVoidPointer-usages.md))

* **Add tag mangling reset in vtkCommunicators**
Tag mangling in `vtkCommunicator::Send()` now resets when mangled tag exceeds maximum value; `vtkMPICommunicator::InitializeAttributes()` retrieves MPI_TAG_UB.

* **Removed signed/unsigned errors with type checks**
`vtkVariantInlineOperators.h` now has overloaded `IsSigned()` and `IsFloatingPoint()` accepting unsigned int to eliminate compiler warnings.

* **Polyhedron faces lost when cells are handed to SetCells()**
`vtkUnstructuredGrid::SetCells()` interpreted its cell array as a legacy face stream whenever the mesh contained polyhedra, so callers copying cells from `GetCells()` and passing them back had point lists misread as face descriptions. `vtkExtractCellsAlongPolyLine`, `vtkOverlappingCellsDetector`, and the `vtkUnstructuredGrid` (de)serialization helper now carry polyhedron faces through explicitly via `SetPolyhedralCells()`.
([Author notes](9.7/fix-polyhedron-faces-lost-by-setcells.md))

### Filters

* **vtkExtractEdges: Improve Performance**
`vtkExtractEdges` now multithreaded regardless of `UseAllPoints` setting, providing significant performance improvement.

* **vtkDelaunay2D performance optimization**
`vtkDelaunay2D` uses lightweight internal mesh with O(1) edge pointers; `UseHilbertSorter` option provides up to 40x speedup.

* **vtkDelaunay3D performance optimization**
`vtkDelaunay3D` uses lightweight internal mesh with O(1) face pointers, yielding approximately 13x speedup.

* **CellLocators: Make sure that when a tolerance parameter is available it can be used**
Cell locator tolerance parameters in `InsideCellBounds`, `IntersectWithLine`, `FindCell`, etc. now actually used; `vtkLocator::Tolerance` deprecated.
([Author notes](9.7/cell-locators-tolerance.md))

* **Add use of implicit arrays in some filters**
`vtkAppendCompositeDataLeaves`, `vtkAppendDataSets`, `vtkAppendFilter`, `vtkAppendPolyData`, and `vtkGhostCellsGenerator` now optionally use implicit arrays.

* **Polyhedron clipping and contouring uses López polygon-tracing algorithm**
`vtkPolyhedron::Contour()` and `Clip()` now use López algorithm working directly on faces without triangulation; requires outward-facing normals.
([Author notes](9.7/polyhedron-lopez-algorithm.md))

* **Correct triangulation of non-convex polyhedron contour polygons**
`vtkPolyhedron` contouring now ear-clips polygons instead of fanning, correctly handling non-convex iso-surface polygons.

* **vtkPolyhedron: remove per-call allocation from IsInside**
`vtkPolyhedron::IsInside` now triangulates faces using the shared allocation-free `vtkPolygon::EarClipPolygon3D` instead of constructing a new `vtkPolygon` and `vtkIdList` per call, removing allocation churn from the streamline and probe filters' hot path.
([Author notes](9.7/fix-polyhedron-isinside-allocations.md))

* **Fix vtkCellValidator for vtkVoxel and vtkPixel**
`vtkCellValidator` now correctly accesses point coordinates for `vtkVoxel` and `vtkPixel` when positioning the `IntersectingEdges` flag; a wrong point id previously could lead to a crash.

* **vtkProbeFilter: Fix logic on SnapToCellWithClosestPoint and tolerance**
`vtkProbeFilter` now correctly handles `SnapToCellWithClosestPoint` by computing coordinates directly; snapping radius and tolerance handling improved.

* **vtkSurfaceNets3D: Identify and correct non-manifold points**
`vtkSurfaceNets3D` detects non-manifold neighborhoods and resolves them; adds `NonManifoldTableIndices` point-data array.
([Author notes](9.7/vtkSurfaceNets3D-non-manifold-improvements.md))

* **Improved vtkCellGrid evaluation performance and API**
`vtkDGEvaluator::ClassifyPoints` rewritten for substantial performance with convex hull pre-filtering; `EvaluatePositions` merged into `ClassifyPoints`.
([Author notes](9.7/improve-cell-grid-probing.md))

* **Mesh Cache Usage**
`vtkAppendDataSets`, `vtkExtractGeometry`, and `vtkTransformFilter` now use `vtkDataObjectMeshCache` for performance optimization.

* **vtkExplodeDataSet partitions name from FieldData**
`vtkExplodeDataSet` can now retrieve partition names from FieldData array with optional scalar value mapping.

* **vtkRandomHyperTreeGridSource: consistent behavior in distributed**
`vtkRandomHyperTreeGridSource` output now consistent between serial and parallel execution; mask generation rewritten.

* **vtkGenericCell DeepCopy and ShallowCopy fix**
`vtkGenericCell` DeepCopy and ShallowCopy now properly handle different types and support copying generic cells.

* **Fix nearest-neighbour interpolation in vtkDataSetAttributes**
`vtkDataSetAttributes` nearest-neighbour interpolation fixed by correcting maxWeight variable type from vtkIdType to double.

### I/O

* **vtkGLTFReader: Fix texture coordinate handling**
`vtkGLTFReader` now correctly handles models with multiple texture coordinate sets by inspecting materials.

* **CONVERGE reader: consistent polyhedron face orientation**
`vtkCONVERGECFDReader` now reverses shared interior faces for their neighbor cell so every polyhedron has consistently outward-facing normals, fixing holes and broken cross sections when slicing or contouring CONVERGE polyhedral meshes.
([Author notes](9.7/convergecfd-polyhedron-face-winding.md))

* **Improve vtkFLUENTCFFReader**
`vtkFLUENTCFFReader` now supports `RenameArrays` option and face zone reading with related data arrays.

* **vtkFLUENTReader now supports larger files**
Fixed crash in `vtkFLUENTReader` when parsing zones too large; moved virtual functions to private scope; reduced memory usage.

* **vtkVRMLImporter general fixes**
Cone now defaults to Z axis; appearance/Transform nodes support USE/DEF; Extrusion node type added with full support.

* **Fix metaimage direction ignored**
MetaImage reader and writer now properly handle direction matrix for `vtkImage` objects.

* **Fix legacy I/O handling of Inf/NaN values**
VTK legacy format readers now properly handle Inf and NaN values in ASCII files.

* **Added vector overrun detection for vtkBMPReader**
`vtkBMPReader` now detects vector overruns and prevents reading past file end on invalid/garbled BMP files.

* **Added vector max size allocation detection for vtkHDRReader**
`vtkHDRReader` now detects vector max size allocation and parsing errors, preventing reads past file end.

* **Added vector overrun detection for vtkTGAReader**
`vtkTGAReader` now detects vector overruns preventing invalid memory access on corrupt TGA files.

* **Improved vtkTGAReader::CanReadFile validation**
`vtkTGAReader::CanReadFile` now checks bits-per-pixel field in addition to image type, reducing false positives.

* **Stricter CanReadFile validation for vtkTGAReader**
`vtkTGAReader::CanReadFile` performs multi-layer validation including TGA 2.0 footer and header cross-validation.

* **vtkXMLCompositeDataReader: Refactoring subclasses**
`vtkXMLCompositeDataReader` subclasses refactored for consistent metadata handling; block/array selection support added.

* **Pass through nullptr objects as JSON null in serialization**
`nullptr` objects now consistently serialized as JSON null; deserialization correctly interprets null as `nullptr`.

* **vtkMPASReader: Fixed memory management**
`vtkMPASReader` temporary array management improved; protected members made private.

* **AMR ghost cell support and blanking fixes**
`vtkAMReXGridReader` reads ghost cells and creates properly marked arrays; `vtkAMRUtilities` and `vtkOverlappingAMRMetaData` blanking fixed.
([Author notes](9.7/amr-ghost-cell-support.md))

* **vtkMPASReader: Support nodal main multifab**
`vtkAMReXGridReader` now detects nodal main multifabs and exposes variables as point data.

### Rendering

* **Linear cells improvements: Add Drawing, Clip, use contour tables**
Linear cells now have documentation drawings; clip methods implemented using vtkMarchingCellsClipCases; contour tables consolidated.
([Author notes](9.7/linear-cells-improvements.md))

* **VTK Wedge Cell Types: Fix Point Ordering and Correctness**
Wedge and related cell types now have correct point ordering matching parametric coordinates; triangulation and volume correctness fixed.
([Author notes](9.7/fix-wedge-point-ordering.md))

  | Wrong Point Ordering | Correct Point Ordering |
  |:--:|:--:|
  |[image](imgs/9.7/WedgeWrong.png) |[image](imgs/9.7/WedgeCorrected.png) |

* **vtkSSAOPass subplot fix**
`vtkSSAOPass` can now be used in subplots; previously this led to black subplots in some cases.

* **WebGPU window resize now re-renders correctly**
VTK's WebGPU rendering backend now validates surface texture dimensions and handles outdated surface status so resizing the window re-renders the scene at the new resolution instead of stretching the previous image.
([Author notes](9.7/fix-webgpu-window-resize.md))

* **Fix depth buffer readback for multi-viewport configurations**
`vtkRenderer::GetZ`, `vtkFramebufferPass`, and `vtkSSAAPass` now correctly handle depth buffer across multiple viewports.

* **Fix incorrect connectivity crash**
VTK no longer crashes when rendering `vtkPolyData` with invalid connectivity array indices.

* **vtkSSAAPass correctly manages stencil buffer attachments**
`vtkSSAAPass` now preserves stencil buffer testing during actor rendering passes with proper depth-stencil attachments.

* **Fix point scalar mapping with lookup table in WebGPU**
WebGPU mappers now correctly pass input data to batched mappers fixing scalar-to-texture mapping.

* **Fix SurfaceLIC mapper when using more than one viewport**
SurfaceLIC mapper now correctly initializes viewport origin for multi-viewport rendering.

* **Enable rendering of larger polygonal composite datasets**
`vtkCompositePolyDataMapper` now respects buffer size limitations when batching blocks.

* **vtkImageSSIM::ComputeErrorMetrics RGBA Support**
`vtkImageSSIM::ComputeErrorMetrics` now supports any number of components including RGBA.

* **Deprecation in vtkViewport**
`vtkViewport::GetActors2D` deprecated in favor of `vtkViewport::GetViewProps`.

### WebAssembly

* **WebAssembly interactor event loops can now coexist**
Multiple interactor event loops can now run simultaneously in WebAssembly using async code path.

* **Session Destroy Object Return Status**
`vtkStandaloneSession::Destroy` now returns bool status for success/failure.

* **Fix gesture event positions**
`vtkRemoteInteractionAdapter` now reports correct positions for Pinch, Pan, and Rotate gesture events; `EndRotate` now correctly triggers `vtkCommand::EndRotateEvent`.
([Author notes](9.7/web-gesture-events-adapter.md))

## Deprecations/Removals

* **All APIs deprecated in VTK 9.5 are removed**
Many type enums, classes, and methods removed from CommonCore, CommonDataModel, I/O, and other modules.
([Author notes](9.7/deprecation-removals.md))

* **Deprecate VTK_LEGACY_REMOVE and VTK_LEGACY_SILENT**
`VTK_LEGACY_REMOVE`, `VTK_LEGACY_SILENT`, and related CMake variables deprecated.

* **vtkAlgorithm::Update() change return type to bool**
`UpdateInformation()`, `UpdateDataObject()`, `UpdateWholeExtent()`, and `Update()` now return bool instead of void.

* **vtkHTGRedistribute: Fix crash when input has no valid trees**
`vtkHyperTreeGridRedistribute` now handles inputs with no valid trees without crashing.

* **Deprecate vtkTransformPolyDataFilter**
`vtkTransformPolyDataFilter` deprecated in favor of `vtkTransformFilter`; use `GetPolyDataOutput()` as replacement.

* **Deprecate vtkHierarchicalBoxDataSet filters**
`vtkHierarchicalDataExtractLevel`, `vtkHierarchicalPolyDataMapper`, and related classes deprecated.

* **vtkXMLPHyperTreeGridWriter & Reader deprecation**
Parallel HyperTreeGrid readers/writers deprecated in favor of vtkHDFWriter parallel support.

## Updates

* **Mesh cache improvements**
`vtkDataObjectMeshCache` now has `PreservedInputAttributes`, SMP-accelerated attribute forwarding, and `vtkMeshCacheRunner` RAII helper.
([Author notes](9.7/mesh-cache-improvements.md))

* **Move mesh cache utilities to new CommonCache module**
`vtkDataObjectMeshCache` and `vtkMeshCacheRunner` moved to new CommonCache module for broader availability.

* **Support parallel rendering with independent off-axis viewers**
`vtkSynchronizedRenderers` now supports `vtkIndependentViewerCollection` for independent viewer tracking.

* **vtkConvertToMultiBlock uses assembly when possible**
`vtkConvertToMultiBlock` now uses `vtkDataAssembly` from `vtkPartitionedDataSetCollection` to mirror structure.

* **Support for Object Factory Preferences**
Object Factory now supports preferences for specific class implementations for runtime selection.

## Closed Issues (111 total)

*Listed in reverse chronological order (most recently closed first)*

- [#20059](https://gitlab.kitware.com/vtk/vtk/-/issues/20059) vtkXMLPHyperTreeGridWriter/Reader do not work at all (2026-06-25)
- [#20091](https://gitlab.kitware.com/vtk/vtk/-/issues/20091) VTK 9.6 build error C4996 in vtkUnstructuredGrid.h with MSVC 18.7.8 (GetCellTypes deprecation conflict) (2026-06-24)
- [#20089](https://gitlab.kitware.com/vtk/vtk/-/issues/20089) vtkImageTransform.cxx triggers divide by zero when floating point exceptions are on (2026-06-24)
- [#20062](https://gitlab.kitware.com/vtk/vtk/-/issues/20062) Volume rendering fails with shading and non-default lighting in WASM build (2026-06-22)
- [#17013](https://gitlab.kitware.com/vtk/vtk/-/issues/17013) vtkBandedPolyDataContour hangs with NaN data (2026-06-22)
- [#20087](https://gitlab.kitware.com/vtk/vtk/-/issues/20087) vtkObjectBase::Register unresolved (2026-06-22)
- [#20085](https://gitlab.kitware.com/vtk/vtk/-/issues/20085) `vtkMarshalContext::GetId` is O(n) and sits in nested hot loops (2026-06-20)
- [#20074](https://gitlab.kitware.com/vtk/vtk/-/issues/20074) Latest nightly Python wheel can't be installed by pip (2026-06-19)
- [#20018](https://gitlab.kitware.com/vtk/vtk/-/issues/20018) vtkBuffer persists after array deletion with new NumPy interface (2026-06-18)
- [#16924](https://gitlab.kitware.com/vtk/vtk/-/issues/16924) Improve Documentation for vtkXMLP*Writers (2026-06-18)
- [#17083](https://gitlab.kitware.com/vtk/vtk/-/issues/17083) reference counting bug in vtkTransform or vtkAbstractTransform (2026-06-17)
- [#20043](https://gitlab.kitware.com/vtk/vtk/-/issues/20043) [regression] RuntimeWarning and NumPy ValueError generated for previously valid code (2026-06-17)
- [#19912](https://gitlab.kitware.com/vtk/vtk/-/issues/19912) vtkGridAxesActor3D: No Maximum Limit on Automatic Ticks/Labels Leads to Rendering Freeze at Close Zoom (2026-06-16)
- [#20025](https://gitlab.kitware.com/vtk/vtk/-/issues/20025) segfault when closing X11 webgpu window (2026-06-16)
- [#19980](https://gitlab.kitware.com/vtk/vtk/-/issues/19980) vtk_to_numpy cannot get buffer from vtkDataArray in latest dev wheels (2026-06-15)
- [#19390](https://gitlab.kitware.com/vtk/vtk/-/issues/19390) vtkExtractVOI incorrectly handles sample rate (2026-06-12)
- [#20066](https://gitlab.kitware.com/vtk/vtk/-/issues/20066) Unguarded MPI_comm_free causes abort at shutdown. (2026-06-12)
- [#17506](https://gitlab.kitware.com/vtk/vtk/-/issues/17506) Restore support for CastXML-based wrappers (2026-06-11)
- [#20075](https://gitlab.kitware.com/vtk/vtk/-/issues/20075) Staging of vtk_module_wrap_python not possible because MODULE_DESTINATION set BUILD and INSTALL location (2026-06-10)
- [#20058](https://gitlab.kitware.com/vtk/vtk/-/issues/20058) vtkRandomHyperTreeGridSource is not consistent in serial & parallel (2026-06-10)
- [#20070](https://gitlab.kitware.com/vtk/vtk/-/issues/20070) ParaView 6.1.1 render window completely broken on macOS 26 (Tahoe) — NSOpenGLContext/NSOpenGLView (2026-06-09)
- [#20013](https://gitlab.kitware.com/vtk/vtk/-/issues/20013) VTK source must be in a path that does not contains spaces (2026-06-08)
- [#20068](https://gitlab.kitware.com/vtk/vtk/-/issues/20068) vtkHDFReader: read XCoordinates properly (2026-06-08)
- [#20022](https://gitlab.kitware.com/vtk/vtk/-/issues/20022) ANARI volume renderer test failures (2026-06-05)
- [#20023](https://gitlab.kitware.com/vtk/vtk/-/issues/20023) ANARI perspective parallel test failure (2026-06-05)
- [#18842](https://gitlab.kitware.com/vtk/vtk/-/issues/18842) `vtkStaticCellLocator::BuildLocatorInternal` data race found by TSan (2026-06-04)
- [#17082](https://gitlab.kitware.com/vtk/vtk/-/issues/17082) vtkSSAAPass breaks the use of stencil buffer (2026-06-04)
- [#19171](https://gitlab.kitware.com/vtk/vtk/-/issues/19171) vtkSurfaceNets3D crashes when DataCaching is OFF (2026-05-27)
- [#20049](https://gitlab.kitware.com/vtk/vtk/-/issues/20049) TSan: vtkSurfaceNets ClassifyXXXEdges read/write races (2026-05-27)
- [#18537](https://gitlab.kitware.com/vtk/vtk/-/issues/18537) AddressSanitizer builds failing on macos (2026-05-26)
- [#17751](https://gitlab.kitware.com/vtk/vtk/-/issues/17751) vtkScalarBarActor::DrawTickLabelsOn() does not work. (2026-05-22)
- [#20057](https://gitlab.kitware.com/vtk/vtk/-/issues/20057) TSan: `vtkCellQuality::PolygonArea` has read/write race (2026-05-21)
- [#19593](https://gitlab.kitware.com/vtk/vtk/-/issues/19593) ci does not skip documentation changes (2026-05-21)
- [#20053](https://gitlab.kitware.com/vtk/vtk/-/issues/20053) vtkConvertToMultiBlockDataSet  unexpected empty output (2026-05-21)
- [#20044](https://gitlab.kitware.com/vtk/vtk/-/issues/20044) vtkimageExport crashes for large data sets (2026-05-21)
- [#20046](https://gitlab.kitware.com/vtk/vtk/-/issues/20046) Release v9.6.2 (2026-05-20)
- [#19665](https://gitlab.kitware.com/vtk/vtk/-/issues/19665) Improvements to the FLUENTCFF to parse Fluent results. (2026-05-20)
- [#20054](https://gitlab.kitware.com/vtk/vtk/-/issues/20054) [regression] vtkOBBTree no longer finds intersection (2026-05-19)
- [#18031](https://gitlab.kitware.com/vtk/vtk/-/issues/18031) vtkOBBTree.IntersectWithLine not finding intersection cell when it should (2026-05-19)
- [#19815](https://gitlab.kitware.com/vtk/vtk/-/issues/19815) wheels: remove wheels for Python 3.9 (2026-05-18)
- [#19650](https://gitlab.kitware.com/vtk/vtk/-/issues/19650) vtkGroupDataSetsFilter to generate vtkDataAssembly for PartitionedDataSetCollection output types (2026-05-18)
- [#17667](https://gitlab.kitware.com/vtk/vtk/-/issues/17667) conda package for linux-64 vtk-8.2.0 py37 contains invalid INTERFACE_LINK_LIBRARIES for vtkRenderingOpenGL2 module (2026-05-15)
- [#17486](https://gitlab.kitware.com/vtk/vtk/-/issues/17486) VTK failed to run 711 tests due to Exception: SegFault with release configuration and debug configuration. (2026-05-14)
- [#20008](https://gitlab.kitware.com/vtk/vtk/-/issues/20008) Issue with rendering 16-bit volume data (Int16/Uint16) (2026-05-14)
- [#20009](https://gitlab.kitware.com/vtk/vtk/-/issues/20009) Issue with volume rendering using VTK WASM compiled using vtk wasm sdk docker (2026-05-14)
- [#18555](https://gitlab.kitware.com/vtk/vtk/-/issues/18555) TestEvenlySpacedStreamlines2D is flaky with STDThread (2026-05-14)
- [#16941](https://gitlab.kitware.com/vtk/vtk/-/issues/16941) Java class vtkScalarBarWidget does not have GetScalarBarActor() in 7.1 version (2026-05-13)
- [#18204](https://gitlab.kitware.com/vtk/vtk/-/issues/18204) ParaView fails to load ASCII file with nans (2026-05-13)
- [#17426](https://gitlab.kitware.com/vtk/vtk/-/issues/17426) Missing cast in dataset_adapter.UnstructuredGrid.SetCells (2026-05-13)
- [#18201](https://gitlab.kitware.com/vtk/vtk/-/issues/18201) vtkSMPMergePoints::Merge is not thread-safe (2026-05-13)
- [#17882](https://gitlab.kitware.com/vtk/vtk/-/issues/17882) Out-of-memory when rendering large wavefront obj in ParaView(> 5.4.1) (2026-05-13)
- [#17368](https://gitlab.kitware.com/vtk/vtk/-/issues/17368) 2D FLASH AMR data (2026-05-13)
- [#17185](https://gitlab.kitware.com/vtk/vtk/-/issues/17185) ospray unstructured volume render limited to tets and float and point aligned arrays (2026-05-13)
- [#17974](https://gitlab.kitware.com/vtk/vtk/-/issues/17974) Compiling VTK 9.0.1 with Intel 2020 (2026-05-13)
- [#17971](https://gitlab.kitware.com/vtk/vtk/-/issues/17971) vtk-8.2.0 fails to compile with gcc-10x (2026-05-13)
- [#17947](https://gitlab.kitware.com/vtk/vtk/-/issues/17947) vtkPlaneCutter segfault when slicing a dataset containing GlobalIds and PedigreeIds (2026-05-13)
- [#17931](https://gitlab.kitware.com/vtk/vtk/-/issues/17931) vtkUnstructuredGrid::DeepCopy with faces (2026-05-13)
- [#17043](https://gitlab.kitware.com/vtk/vtk/-/issues/17043) VTK / Python/ Anaconda -- wiki example shows bug in volume render? (2026-05-13)
- [#17690](https://gitlab.kitware.com/vtk/vtk/-/issues/17690) SIGSEGV on vtkCompositeDataProbeFilter() with PassPartialArraysOn() (2026-05-13)
- [#16962](https://gitlab.kitware.com/vtk/vtk/-/issues/16962) Remote module: Poisson Reconstruction (2026-05-13)
- [#17646](https://gitlab.kitware.com/vtk/vtk/-/issues/17646) Request to add the location of classes in the documentation. (2026-05-13)
- [#17645](https://gitlab.kitware.com/vtk/vtk/-/issues/17645) vtkDecimattePro fails with a specific dataset. (2026-05-13)
- [#16960](https://gitlab.kitware.com/vtk/vtk/-/issues/16960) Crash of qtgraphicsview example on macOS (2026-05-13)
- [#17640](https://gitlab.kitware.com/vtk/vtk/-/issues/17640) vtkXML_reader: Segmentation fault by same DataArray names (2026-05-13)
- [#17641](https://gitlab.kitware.com/vtk/vtk/-/issues/17641) VTK 8.2.0 fails to build with PGI pgc++ 19.3 (2026-05-13)
- [#16122](https://gitlab.kitware.com/vtk/vtk/-/issues/16122) Fix for freeze with Java JOGL interaction (2026-05-13)
- [#17629](https://gitlab.kitware.com/vtk/vtk/-/issues/17629) vtkPointLocator.FindClosestPointWithinRadius causes access violation when using incremental point insertion (2026-05-13)
- [#15799](https://gitlab.kitware.com/vtk/vtk/-/issues/15799) regression: OpenGL2 backend broke support for LineStipple (2026-05-13)
- [#17958](https://gitlab.kitware.com/vtk/vtk/-/issues/17958) VTK 9 Python observer fired on ErrorEvent not muting VTK raw output (2026-05-13)
- [#17307](https://gitlab.kitware.com/vtk/vtk/-/issues/17307) Convert cells to higher-order versions automatically? (2026-05-13)
- [#17582](https://gitlab.kitware.com/vtk/vtk/-/issues/17582) VTK failed to run 2 tests VTK::FiltersAMRCxx-TestAMRSliceFilterCellData and VTK::FiltersAMRCxx-TestAMRSliceFilterPointData with release configuration and debug configuration with MSVC on windows (2026-05-13)
- [#17594](https://gitlab.kitware.com/vtk/vtk/-/issues/17594) IO/Legacy/vtkDataReader.cxx: int vtkDataReader::ReadString(char result[256]) does not compile in C++20 (2026-05-13)
- [#17599](https://gitlab.kitware.com/vtk/vtk/-/issues/17599) vtkFunctionParser is 18 years old and written in C language, highly unoptimized. (2026-05-13)
- [#17543](https://gitlab.kitware.com/vtk/vtk/-/issues/17543) Voronoi Cells in vtk format (2026-05-13)
- [#17286](https://gitlab.kitware.com/vtk/vtk/-/issues/17286) vtkHyperTreeContour produces empty output (2026-05-13)
- [#17161](https://gitlab.kitware.com/vtk/vtk/-/issues/17161) ExodusReader only reads float data (not double) (2026-05-13)
- [#19636](https://gitlab.kitware.com/vtk/vtk/-/issues/19636) Serialization errors in RenderingCoreCxx (2026-05-13)
- [#17120](https://gitlab.kitware.com/vtk/vtk/-/issues/17120) Simplify the VTK-m and VTK SMP build options (2026-05-13)
- [#17089](https://gitlab.kitware.com/vtk/vtk/-/issues/17089) VTK Exodus Reader (2026-05-13)
- [#17039](https://gitlab.kitware.com/vtk/vtk/-/issues/17039) XDMF2Writer: Source and Target Spaces specify different sizes for path: /Block_0_t000000/Topology (2026-05-13)
- [#17338](https://gitlab.kitware.com/vtk/vtk/-/issues/17338) VTK  +  PyQt5 +  VirtualGL not working (2026-05-13)
- [#17037](https://gitlab.kitware.com/vtk/vtk/-/issues/17037) XDMF2 writes data with insufficient precision (2026-05-13)
- [#17033](https://gitlab.kitware.com/vtk/vtk/-/issues/17033) VTK Legacy file format readers don't handle sizeof(long) correctly (2026-05-13)
- [#19996](https://gitlab.kitware.com/vtk/vtk/-/issues/19996) Unhashable regression in trame-vtk (2026-05-13)
- [#16948](https://gitlab.kitware.com/vtk/vtk/-/issues/16948) Building VTK with osmesa offscreen support on windows. (2026-05-13)
- [#16934](https://gitlab.kitware.com/vtk/vtk/-/issues/16934) Python 3 exception in test vtkParallelMPI4PyPython-TestParallelNumpy (2026-05-13)
- [#16903](https://gitlab.kitware.com/vtk/vtk/-/issues/16903) Segmentation fault in vtkXYZMolReader2::RequestInformation() with XMOL file with no time steps (2026-05-13)
- [#17988](https://gitlab.kitware.com/vtk/vtk/-/issues/17988) Cannot run WebAssembly examples with rendering (2026-05-13)
- [#19949](https://gitlab.kitware.com/vtk/vtk/-/issues/19949) wasm: enabling serialization leads to very large wasm binaries (2026-05-13)
- [#15841](https://gitlab.kitware.com/vtk/vtk/-/issues/15841) vtkCutter not cutting vtkPolyhedron cells correctly (2026-05-13)
- [#16915](https://gitlab.kitware.com/vtk/vtk/-/issues/16915) VTK 6.3.0: bar plot with big number (2026-05-13)
- [#16789](https://gitlab.kitware.com/vtk/vtk/-/issues/16789) vtkGradientFilter doesn't work with quadratic triangles (2026-05-13)
- [#15435](https://gitlab.kitware.com/vtk/vtk/-/issues/15435) Crash related to vtkRenderWindow::SetOffScreenRendering (2026-05-13)
- [#19014](https://gitlab.kitware.com/vtk/vtk/-/issues/19014) vtkScalarBarActor: in vertical mode, add option to rotate title so it is aligned vertically (2026-05-13)
- [#18316](https://gitlab.kitware.com/vtk/vtk/-/issues/18316) AMReX Grid Reader: enable reading of integer fab files (2026-05-13)
- [#20006](https://gitlab.kitware.com/vtk/vtk/-/issues/20006) Issue with Volume Rendering using 16-bit arrays (Int16/Uint16) in VTK-Wasm (2026-03-29)
- [#19925](https://gitlab.kitware.com/vtk/vtk/-/issues/19925) undeclared malloc/free in fmt header with clang 21+ (2026-02-02)
- [#19767](https://gitlab.kitware.com/vtk/vtk/-/issues/19767) Update fmt to include upstream fmtlib/fmt/pull/4477 fix (2026-02-02)
- [#19779](https://gitlab.kitware.com/vtk/vtk/-/issues/19779) Release 9.5.2 (2025-09-24)
- [#19580](https://gitlab.kitware.com/vtk/vtk/-/issues/19580) Wide lines are not rendered properly with GLES backend (2025-08-04)
- [#19675](https://gitlab.kitware.com/vtk/vtk/-/issues/19675) Enable JSPI for webgpu support in wasm (2025-06-16)
- [#19617](https://gitlab.kitware.com/vtk/vtk/-/issues/19617) wasm64: re-enable serialization package (2025-05-14)
- [#19529](https://gitlab.kitware.com/vtk/vtk/-/issues/19529) serialization of wasm render window shows warning about SetCoverable (2024-12-03)
- [#19356](https://gitlab.kitware.com/vtk/vtk/-/issues/19356) VTK JS library files are not found in wasm SDK builds (2024-06-03)
- [#19290](https://gitlab.kitware.com/vtk/vtk/-/issues/19290) Revisit vtk-wasm wheel setup (2024-04-11)
- [#19296](https://gitlab.kitware.com/vtk/vtk/-/issues/19296) Depth buffer read using vtkOpenGLRenderWindow::GetZbufferData incorrect on wasm/Emscripten (2024-04-01)
- [#18592](https://gitlab.kitware.com/vtk/vtk/-/issues/18592) VTK C++ Emscripten Binding Config (2023-06-16)
- [#18724](https://gitlab.kitware.com/vtk/vtk/-/issues/18724) webassembly(wasm)  example compile error about glew (2023-02-25)
- [#18829](https://gitlab.kitware.com/vtk/vtk/-/issues/18829) Failed to read dicom from compiled VTK of emscripten ？ (2023-02-21)
- [#18706](https://gitlab.kitware.com/vtk/vtk/-/issues/18706) Emscripten vtk: fatal error: 'vtkSelectPolyData.h' file not found (2022-11-03)
- [#17995](https://gitlab.kitware.com/vtk/vtk/-/issues/17995) Loading .vtp file after compiling with Emscripten (2020-09-03)
