9.7#

Released on 2026-08-14.

VTK 9.7 Release Notes#

Changes made since VTK 9.6.2 include the following.


New Features#

Build#

  • PCH Support Added PCH support in the build, which can be toggled using the VTK_USE_PCH option. (Author notes)

  • 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)

Core#

  • vtkGetConstObjectMacro VTK now provides vtkGetConstObjectMacro in vtkSetGet.h to generate const-correct getter methods for vtkObject member variables. (Author notes)

  • 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)

  • 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)

  • 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)

  • 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)

  • vtkCollection: Add support for range-based for loops vtkCollection now supports C++11 range-based for loops; vtkCollectionIterator and vtkCollectionSimpleIterator are deprecated. (Author notes)

  • vtkCollection now supports Python sequence protocol vtkCollection subclasses now support len(), indexing, membership testing, and Pythonic mutation methods (append, insert, remove, clear). (Author notes)

  • 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)

  • 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)

  • 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)

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)

    Rough face

    Refined face

    Interface face

    image

    image

    image

  • 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)

  • 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)

  • 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)

  • Voronoi Framework New parallel 2D/3D Voronoi tessellation and Delaunay triangulation framework with vtkVoronoiFlower2D/3D and vtkGeneralizedSurfaceNets3D filters. (Author notes)

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 vtkMPASReader now supports UsePrimaryGrid option to read Voronoi primary grid instead of Delaunay dual grid. (Author notes)

  • 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)

  • 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)

  • 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.

  • vtkCameraOrientationWidget supports rotating about CenterOfRotation vtkCameraOrientationWidget now respects the center of rotation provided by the associated interactor style. A new UseCenterOfRotation property (default false) controls this: when disabled (legacy default) the widget rotates the camera about its focal point, and when enabled it rotates about the interactor style’s center of rotation (vtkInteractorStyle::GetCenterOfRotation).

Rendering#

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

    skybox_blur_image

  • 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)

  • 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)

  • 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)

  • 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)

  • 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)

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)

  • 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)

  • 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.

Interaction#

  • CenterOfRotation moved up to vtkInteractorStyle The CenterOfRotation property previously defined on vtkInteractorStyleManipulator now lives on the vtkInteractorStyle base class. Existing code is unaffected since the accessors keep the same signatures and are simply inherited; all interactor styles now expose the property, so classes outside VTK::InteractionStyle (for example camera-manipulating widgets) can read and write the center of rotation without depending on a concrete style subclass.

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.

  • Remote sessions drop deserialization constructors unsuitable for the web vtkRemoteSession now removes the deserialization constructors of all classes that cannot work on the web platform, generalizing the earlier handling that only dropped vtkOpenGLPolyDataMapper and vtkOpenGLPolyDataMapper2D. States naming such classes fall back to the nearest superclass constructor; for example a state naming vtkGenericRenderWindowInteractor now constructs through vtkRenderWindowInteractor, whose object factory instantiates vtkWebAssemblyRenderWindowInteractor.

Python#

  • numpy type mapping follows numpy’s underlying C type vtkmodules.util.numpy_support and the Python template subscript operator now map numpy dtypes to VTK types by the dtype’s underlying C type (its dtype.char) rather than a hardwired table of numpy scalar types. On LP64 platforms (Linux and macOS) numpy.int64 is C long, so numpy_to_vtk now returns a vtkLongArray (VTK_LONG) instead of a vtkTypeInt64Array (VTK_LONG_LONG), and numpy.uint64 maps to VTK_UNSIGNED_LONG; numpy.longlong still maps to VTK_LONG_LONG, and Windows behavior is unchanged. The data is unaffected and round-trips losslessly — only type identity changes — so code that tests for an array class or type code should check widths instead (e.g. GetDataTypeSize() == 8) or accept both classes. Template subscripting follows the same rule, so vtkAOSDataArrayTemplate[numpy.int64] and vtkAOSDataArrayTemplate[numpy.dtype('int64')] now resolve to the same instantiation.

  • numpy_support type size/code constants removed The module-level constants VTK_ID_TYPE_SIZE, ID_TYPE_CODE, VTK_LONG_TYPE_SIZE, LONG_TYPE_CODE, and ULONG_TYPE_CODE are removed. Use get_numpy_array_type() to resolve the numpy type for a VTK type code (e.g. get_numpy_array_type(VTK_ID_TYPE) in place of ID_TYPE_CODE) and the resulting dtype’s itemsize in place of the size constants.

  • get_vtk_to_numpy_typemap() returns a copy get_vtk_to_numpy_typemap() again returns a copy of the VTK-to-numpy mapping rather than the module’s own dictionary, restoring its earlier behavior; mutating the returned dictionary no longer perturbs conversions elsewhere in the process.

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)

  • 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)

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)

  • 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)

  • 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)

  • 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)

  • Improved vtkCellGrid evaluation performance and API vtkDGEvaluator::ClassifyPoints rewritten for substantial performance with convex hull pre-filtering; EvaluatePositions merged into ClassifyPoints. (Author notes)

  • 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)

  • 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)

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

Interaction#

  • vtkTrackballRotate: fix rotation about a non-default center vtkTrackballRotate now correctly rotates the camera about the center of rotation set on vtkInteractorStyleManipulator; previously the rotation transform was missing the translation to the center of rotation, so the camera rotated about the world origin and drifted away from the scene on every mouse move whenever a non-zero center of rotation was set.

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)

  • 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)

    Wrong Point Ordering

    Correct Point Ordering

    image

    image

  • 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)

  • 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.

  • OpenGL array texture buffer cache is bounded and purged The per-context vtkOpenGLArrayTextureBufferCache used by the vertex-pulling mappers (vtkOpenGLLowMemoryPolyDataMapper) now purges automatically at the end of every render: orphaned entries are dropped and unpinned entries are evicted least-recently-used first until the cache fits MaximumCacheSize (default 256 MiB, 0 disables the budget). Previously entries were only released at context teardown, so workflows that continually modify geometry leaked memory and could exhaust the heap in WebAssembly. New API: SetMaximumCacheSize()/GetMaximumCacheSize(), GetCurrentCacheSize(), GetCPUMemorySize(), RemoveUnusedTextureBuffers(), and RemoveTextureBuffer().

  • 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)

  • Data set mapper serialization no longer emits an empty polydata When a vtkDataSetMapper has a vtkPolyData input, serialization now updates the input algorithm before serializing the data set. Previously, if the producer of the input had never executed, the mapper’s state held an empty polydata and the deserialized scene rendered nothing.

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)

  • 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)

  • 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 vtkXMLPHyperTreeGridWriter/Reader do not work at all (2026-06-25)

  • #20091 VTK 9.6 build error C4996 in vtkUnstructuredGrid.h with MSVC 18.7.8 (GetCellTypes deprecation conflict) (2026-06-24)

  • #20089 vtkImageTransform.cxx triggers divide by zero when floating point exceptions are on (2026-06-24)

  • #20062 Volume rendering fails with shading and non-default lighting in WASM build (2026-06-22)

  • #17013 vtkBandedPolyDataContour hangs with NaN data (2026-06-22)

  • #20087 vtkObjectBase::Register unresolved (2026-06-22)

  • #20085 vtkMarshalContext::GetId is O(n) and sits in nested hot loops (2026-06-20)

  • #20074 Latest nightly Python wheel can’t be installed by pip (2026-06-19)

  • #20018 vtkBuffer persists after array deletion with new NumPy interface (2026-06-18)

  • #16924 Improve Documentation for vtkXMLP*Writers (2026-06-18)

  • #17083 reference counting bug in vtkTransform or vtkAbstractTransform (2026-06-17)

  • #20043 [regression] RuntimeWarning and NumPy ValueError generated for previously valid code (2026-06-17)

  • #19912 vtkGridAxesActor3D: No Maximum Limit on Automatic Ticks/Labels Leads to Rendering Freeze at Close Zoom (2026-06-16)

  • #20025 segfault when closing X11 webgpu window (2026-06-16)

  • #19980 vtk_to_numpy cannot get buffer from vtkDataArray in latest dev wheels (2026-06-15)

  • #19390 vtkExtractVOI incorrectly handles sample rate (2026-06-12)

  • #20066 Unguarded MPI_comm_free causes abort at shutdown. (2026-06-12)

  • #17506 Restore support for CastXML-based wrappers (2026-06-11)

  • #20075 Staging of vtk_module_wrap_python not possible because MODULE_DESTINATION set BUILD and INSTALL location (2026-06-10)

  • #20058 vtkRandomHyperTreeGridSource is not consistent in serial & parallel (2026-06-10)

  • #20070 ParaView 6.1.1 render window completely broken on macOS 26 (Tahoe) — NSOpenGLContext/NSOpenGLView (2026-06-09)

  • #20013 VTK source must be in a path that does not contains spaces (2026-06-08)

  • #20068 vtkHDFReader: read XCoordinates properly (2026-06-08)

  • #20022 ANARI volume renderer test failures (2026-06-05)

  • #20023 ANARI perspective parallel test failure (2026-06-05)

  • #18842 vtkStaticCellLocator::BuildLocatorInternal data race found by TSan (2026-06-04)

  • #17082 vtkSSAAPass breaks the use of stencil buffer (2026-06-04)

  • #19171 vtkSurfaceNets3D crashes when DataCaching is OFF (2026-05-27)

  • #20049 TSan: vtkSurfaceNets ClassifyXXXEdges read/write races (2026-05-27)

  • #18537 AddressSanitizer builds failing on macos (2026-05-26)

  • #17751 vtkScalarBarActor::DrawTickLabelsOn() does not work. (2026-05-22)

  • #20057 TSan: vtkCellQuality::PolygonArea has read/write race (2026-05-21)

  • #19593 ci does not skip documentation changes (2026-05-21)

  • #20053 vtkConvertToMultiBlockDataSet unexpected empty output (2026-05-21)

  • #20044 vtkimageExport crashes for large data sets (2026-05-21)

  • #20046 Release v9.6.2 (2026-05-20)

  • #19665 Improvements to the FLUENTCFF to parse Fluent results. (2026-05-20)

  • #20054 [regression] vtkOBBTree no longer finds intersection (2026-05-19)

  • #18031 vtkOBBTree.IntersectWithLine not finding intersection cell when it should (2026-05-19)

  • #19815 wheels: remove wheels for Python 3.9 (2026-05-18)

  • #19650 vtkGroupDataSetsFilter to generate vtkDataAssembly for PartitionedDataSetCollection output types (2026-05-18)

  • #17667 conda package for linux-64 vtk-8.2.0 py37 contains invalid INTERFACE_LINK_LIBRARIES for vtkRenderingOpenGL2 module (2026-05-15)

  • #17486 VTK failed to run 711 tests due to Exception: SegFault with release configuration and debug configuration. (2026-05-14)

  • #20008 Issue with rendering 16-bit volume data (Int16/Uint16) (2026-05-14)

  • #20009 Issue with volume rendering using VTK WASM compiled using vtk wasm sdk docker (2026-05-14)

  • #18555 TestEvenlySpacedStreamlines2D is flaky with STDThread (2026-05-14)

  • #16941 Java class vtkScalarBarWidget does not have GetScalarBarActor() in 7.1 version (2026-05-13)

  • #18204 ParaView fails to load ASCII file with nans (2026-05-13)

  • #17426 Missing cast in dataset_adapter.UnstructuredGrid.SetCells (2026-05-13)

  • #18201 vtkSMPMergePoints::Merge is not thread-safe (2026-05-13)

  • #17882 Out-of-memory when rendering large wavefront obj in ParaView(> 5.4.1) (2026-05-13)

  • #17368 2D FLASH AMR data (2026-05-13)

  • #17185 ospray unstructured volume render limited to tets and float and point aligned arrays (2026-05-13)

  • #17974 Compiling VTK 9.0.1 with Intel 2020 (2026-05-13)

  • #17971 vtk-8.2.0 fails to compile with gcc-10x (2026-05-13)

  • #17947 vtkPlaneCutter segfault when slicing a dataset containing GlobalIds and PedigreeIds (2026-05-13)

  • #17931 vtkUnstructuredGrid::DeepCopy with faces (2026-05-13)

  • #17043 VTK / Python/ Anaconda – wiki example shows bug in volume render? (2026-05-13)

  • #17690 SIGSEGV on vtkCompositeDataProbeFilter() with PassPartialArraysOn() (2026-05-13)

  • #16962 Remote module: Poisson Reconstruction (2026-05-13)

  • #17646 Request to add the location of classes in the documentation. (2026-05-13)

  • #17645 vtkDecimattePro fails with a specific dataset. (2026-05-13)

  • #16960 Crash of qtgraphicsview example on macOS (2026-05-13)

  • #17640 vtkXML_reader: Segmentation fault by same DataArray names (2026-05-13)

  • #17641 VTK 8.2.0 fails to build with PGI pgc++ 19.3 (2026-05-13)

  • #16122 Fix for freeze with Java JOGL interaction (2026-05-13)

  • #17629 vtkPointLocator.FindClosestPointWithinRadius causes access violation when using incremental point insertion (2026-05-13)

  • #15799 regression: OpenGL2 backend broke support for LineStipple (2026-05-13)

  • #17958 VTK 9 Python observer fired on ErrorEvent not muting VTK raw output (2026-05-13)

  • #17307 Convert cells to higher-order versions automatically? (2026-05-13)

  • #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 IO/Legacy/vtkDataReader.cxx: int vtkDataReader::ReadString(char result[256]) does not compile in C++20 (2026-05-13)

  • #17599 vtkFunctionParser is 18 years old and written in C language, highly unoptimized. (2026-05-13)

  • #17543 Voronoi Cells in vtk format (2026-05-13)

  • #17286 vtkHyperTreeContour produces empty output (2026-05-13)

  • #17161 ExodusReader only reads float data (not double) (2026-05-13)

  • #19636 Serialization errors in RenderingCoreCxx (2026-05-13)

  • #17120 Simplify the VTK-m and VTK SMP build options (2026-05-13)

  • #17089 VTK Exodus Reader (2026-05-13)

  • #17039 XDMF2Writer: Source and Target Spaces specify different sizes for path: /Block_0_t000000/Topology (2026-05-13)

  • #17338 VTK + PyQt5 + VirtualGL not working (2026-05-13)

  • #17037 XDMF2 writes data with insufficient precision (2026-05-13)

  • #17033 VTK Legacy file format readers don’t handle sizeof(long) correctly (2026-05-13)

  • #19996 Unhashable regression in trame-vtk (2026-05-13)

  • #16948 Building VTK with osmesa offscreen support on windows. (2026-05-13)

  • #16934 Python 3 exception in test vtkParallelMPI4PyPython-TestParallelNumpy (2026-05-13)

  • #16903 Segmentation fault in vtkXYZMolReader2::RequestInformation() with XMOL file with no time steps (2026-05-13)

  • #17988 Cannot run WebAssembly examples with rendering (2026-05-13)

  • #19949 wasm: enabling serialization leads to very large wasm binaries (2026-05-13)

  • #15841 vtkCutter not cutting vtkPolyhedron cells correctly (2026-05-13)

  • #16915 VTK 6.3.0: bar plot with big number (2026-05-13)

  • #16789 vtkGradientFilter doesn’t work with quadratic triangles (2026-05-13)

  • #15435 Crash related to vtkRenderWindow::SetOffScreenRendering (2026-05-13)

  • #19014 vtkScalarBarActor: in vertical mode, add option to rotate title so it is aligned vertically (2026-05-13)

  • #18316 AMReX Grid Reader: enable reading of integer fab files (2026-05-13)

  • #20006 Issue with Volume Rendering using 16-bit arrays (Int16/Uint16) in VTK-Wasm (2026-03-29)

  • #19925 undeclared malloc/free in fmt header with clang 21+ (2026-02-02)

  • #19767 Update fmt to include upstream fmtlib/fmt/pull/4477 fix (2026-02-02)

  • #19779 Release 9.5.2 (2025-09-24)

  • #19580 Wide lines are not rendered properly with GLES backend (2025-08-04)

  • #19675 Enable JSPI for webgpu support in wasm (2025-06-16)

  • #19617 wasm64: re-enable serialization package (2025-05-14)

  • #19529 serialization of wasm render window shows warning about SetCoverable (2024-12-03)

  • #19356 VTK JS library files are not found in wasm SDK builds (2024-06-03)

  • #19290 Revisit vtk-wasm wheel setup (2024-04-11)

  • #19296 Depth buffer read using vtkOpenGLRenderWindow::GetZbufferData incorrect on wasm/Emscripten (2024-04-01)

  • #18592 VTK C++ Emscripten Binding Config (2023-06-16)

  • #18724 webassembly(wasm) example compile error about glew (2023-02-25)

  • #18829 Failed to read dicom from compiled VTK of emscripten ? (2023-02-21)

  • #18706 Emscripten vtk: fatal error: ‘vtkSelectPolyData.h’ file not found (2022-11-03)

  • #17995 Loading .vtp file after compiling with Emscripten (2020-09-03)