fvtk 9.6.2.0
First stable release. fvtk is a community fork of VTK 9.6.2, maintained by the PyVista project as a fast, trimmed, drop-in graphics backend. See the README for the full overview; these notes cover how fvtk relates to stock VTK and where it currently diverges.
Parity model
By default fvtk is byte-for-byte identical to stock VTK 9.6.2 (maxULP = 0). Positions and values are never altered. Optimizations that would reorder output are opt-in behind fvtk.EnableFast(). Three gates enforce this on every change: bit-exact (array output vs stock), render-exact (offscreen framebuffers), and PyVista's own test suite run against the built wheel.
Divergences from stock VTK 9.6.2
fvtk is a drop-in, but deliberately differs in three ways:
- Trimmed to PyVista's module closure. Only the VTK modules and classes PyVista uses are built; the rest are dropped (notably the XDMF reader, whose vendored sources no longer compile on modern libc++). Code outside that closure is not importable.
- Single abi3 wheel. One
cp312-abi3wheel loads on CPython 3.12 and newer. Wrapped types are heap types rather than stock's static types, so a few Python introspection details differ (for examplevars(SomeVTKType)exposing__module__). Behavior and values are unchanged. - int32 width-relaxation. Cell-array connectivity, original-id arrays, and reader output use 32-bit storage where the index range fits, instead of stock's 64-bit. The values are identical; only the container width narrows. This trades some interop for memory: zero-copy hand-off to libraries that require int64 (such as trimesh) falls back to a copy, and 32-bit connectivity compresses slightly less.
Known PyVista gaps
The PyVista parity suite runs against every build. A small set of tests is currently deselected and tracked for follow-up: vtkDelaunay3D degenerate output (#114), the two int32 interop cases above (#117, #118), and the vtkSkybox OpenGL override (#120). The rest of PyVista's suite passes against fvtk.