Metadata-Version: 2.4
Name: pyvista-wasm
Version: 0.7.0
Summary: PyVista-like API for VTK.wasm
Project-URL: Documentation, https://github.com/tkoyama010/pyvista-wasm
Project-URL: Homepage, https://github.com/tkoyama010/pyvista-wasm
Project-URL: Issues, https://github.com/tkoyama010/pyvista-wasm/issues
Project-URL: Repository, https://github.com/tkoyama010/pyvista-wasm
Author-email: Tetsuo Koyama <contact@tetsuo-koyama.dev>
License-Expression: Apache-2.0
License-File: LICENSE
Classifier: Development Status :: 2 - Pre-Alpha
Classifier: Intended Audience :: Developers
Classifier: Intended Audience :: Science/Research
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Programming Language :: Python :: 3.14
Classifier: Topic :: Scientific/Engineering :: Visualization
Requires-Python: >=3.12
Requires-Dist: gitpython>=3.1.47
Requires-Dist: jinja2<3.2.0,>=3.1.0
Requires-Dist: lazy-loader<0.6.0,>=0.4.0
Requires-Dist: numpy<2.5.0,>=2.0.0
Requires-Dist: typer<0.25.0,>=0.9.0
Provides-Extra: dev
Requires-Dist: mypy<1.21.0,>=1.0.0; extra == 'dev'
Requires-Dist: pre-commit<5.0.0,>=3.0.0; extra == 'dev'
Requires-Dist: pytest-cov<8.0.0,>=4.0.0; extra == 'dev'
Requires-Dist: pytest<9.1.0,>=7.0.0; extra == 'dev'
Requires-Dist: ruff<0.16.0,>=0.1.0; extra == 'dev'
Requires-Dist: tox<4.54.0,>=4.0.0; extra == 'dev'
Provides-Extra: docs
Requires-Dist: jupyterlite-pyodide-kernel==0.7.1; (python_version >= '3.12' and python_version < '3.14') and extra == 'docs'
Requires-Dist: jupyterlite-sphinx==0.22.1; (python_version >= '3.12' and python_version < '3.14') and extra == 'docs'
Requires-Dist: jupytext<1.20.0,>=1.16.0; (python_version >= '3.12') and extra == 'docs'
Requires-Dist: myst-parser<6.0.0,>=4.0.0; (python_version >= '3.12') and extra == 'docs'
Requires-Dist: sphinx-book-theme<1.3.0,>=1.1.0; (python_version >= '3.12') and extra == 'docs'
Requires-Dist: sphinx-design<0.8.0,>=0.6.0; (python_version >= '3.12') and extra == 'docs'
Requires-Dist: sphinx-intl<2.4.0,>=2.2.0; (python_version >= '3.12') and extra == 'docs'
Requires-Dist: sphinx<10.0.0,>=8.0.0; (python_version >= '3.12') and extra == 'docs'
Provides-Extra: marimo
Requires-Dist: marimo<0.24.0,>=0.10.0; extra == 'marimo'
Provides-Extra: streamlit
Requires-Dist: streamlit<1.57.0,>=1.30.0; extra == 'streamlit'
Description-Content-Type: text/markdown

# pyvista-wasm

[![JupyterLite](https://jupyterlite.rtfd.io/en/latest/_static/badge.svg)](https://pyvista-js.readthedocs.io/en/latest/lite/lab/index.html?path=intro.ipynb)
[![Stlite](https://img.shields.io/badge/stlite-Streamlit%20in%20Browser-FF4B4B?logo=streamlit)](https://edit.share.stlite.net/#!CgZhcHAucHkSxQQKBmFwcC5weRK6BAq3BCIiIlN0cmVhbWxpdCBhcHAgZm9yIHRoZSBweXZpc3RhLWpzIHN0bGl0ZSBkZW1vLiIiIgoKaW1wb3J0IHN0cmVhbWxpdCBhcyBzdAppbXBvcnQgc3RyZWFtbGl0LmNvbXBvbmVudHMudjEgYXMgY29tcG9uZW50cwoKaW1wb3J0IHB5dmlzdGFfd2FzbSBhcyBwdgpmcm9tIHB5dmlzdGFfd2FzbSBpbXBvcnQgZXhhbXBsZXMKCmNvbG9yID0gc3Quc2VsZWN0Ym94KAogICAgIkNvbG9yIiwKICAgIFsiZ3JheSIsICJ3aGl0ZSIsICJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSIsICJ5ZWxsb3ciLCAiY3lhbiIsICJtYWdlbnRhIl0sCikKCm9wYWNpdHkgPSBzdC5zbGlkZXIoIk9wYWNpdHkiLCBtaW5fdmFsdWU9MC4wLCBtYXhfdmFsdWU9MS4wLCB2YWx1ZT0wLjgsIHN0ZXA9MC4xKQoKcGxvdHRlciA9IHB2LlBsb3R0ZXIoKQoKbWVzaCA9IGV4YW1wbGVzLmRvd25sb2FkX2J1bm55KCkKCnBsb3R0ZXIuYWRkX21lc2gobWVzaCwgY29sb3I9Y29sb3IsIG9wYWNpdHk9b3BhY2l0eSkKCmh0bWwgPSBwbG90dGVyLmdlbmVyYXRlX3N0YW5kYWxvbmVfaHRtbCgpCmNvbXBvbmVudHMuaHRtbChodG1sLCBoZWlnaHQ9NjAwKRoMcHl2aXN0YS13YXNt)
[![marimo](https://marimo.io/shield.svg)](https://marimo.app/?code=JYWwDg9gTgLgBCAhlUEBQaD6mDmBTAOzykRjwBNMB3YGACzgF44AiABgDoBGAZg4DYWaRGDBMEyVBwCCogBQ1y9RixAVgAVxAsAlBjQABEWA4BjPABsLwgM4BPAqbjk8AMziY5OgFxo4-uFBIWARgUygIMGAwDAC4RCpEWlDwyOiOYAIbGEQrORYwOwA3YGzEAFpEm209OKg8GA0oAjg5EDCIqLAAGj0MI1EzS2sXd0921K6fPwCg6HgkFBAIeJsEdDi5kMKSsupEatW4MCLYgPrG5vXu49P+4yGrNFGPNogbk+m4sAsIGDIoOIThwAAq-f7ELwzfw-P4AjiIciUNQ2OhyYEAZTAdGIeC8N1MEF+UBU9XIumhcDoMBAFkwhIIZEZQPB8PwRBIZEwZQI5FyECImGptKhlLwNlMIgo4mFdIZTJgHHqP0Q5nyADIWDcWOrEOAANy6JV4FVqgDkLDN2vVAEcNH9DX04ssOBANDAwO6EaJCOQ3hwABI0ixySlxVxmgA8wFcJDUcBsUFM5AgphUAG9xZKwBQAL4sOBmsMBM3ZOwWPAqRT0bxcNhsACk+pxwBw1O8ABZ62AAB769oEcottswTvdvsAI2gLig3gATL2E0TgOQ4ABiHibw2F4v+UuIXlTnsqXK-KjlCUoMAwGwsAB8kYA9DG43g71bKTo+mgYx5MAQ9TwbAmGYFhsCQTJsBYXw4geKANAIKEgA)

[PyVista](https://github.com/pyvista/pyvista)-like API for [VTK.wasm](https://kitware.github.io/vtk-wasm/) — bring intuitive 3D visualization to the browser using WebAssembly.

| [Try it with JupyterLite] | [Try it with Stlite] | [Try it with marimo] |
| :-----------------------: | :------------------: | :------------------: |
| ![jupyterlite-preview] | ![stlite-preview] | ![marimo-preview] |

## Table of Contents

- [Table of Contents](#table-of-contents)
- [Install](#install)
- [Usage](#usage)
- [Differences from pyvista-js](#differences-from-pyvista-js)
- [Contributing](#contributing)
- [License](#license)

## Install

[![PyPI](https://img.shields.io/pypi/v/pyvista-wasm)](https://pypi.org/project/pyvista-wasm/)

```bash
pip install pyvista-wasm
```

For Pyodide/stlite:

```python
import micropip

await micropip.install("pyvista-wasm")
```

## Usage

```python
import pyvista_wasm as pv

plotter = pv.Plotter()
plotter.add_mesh(pv.Sphere(), color="red")
plotter.show()
```

## Differences from pyvista-js

This project replaces the [vtk.js](https://github.com/Kitware/vtk-js) rendering backend used in [pyvista-js](https://github.com/tkoyama010/pyvista-js) with [VTK.wasm](https://kitware.github.io/vtk-wasm/) (`@kitware/vtk-wasm` npm package).

Key differences:

- **Rendering backend**: VTK.wasm (WebAssembly port of VTK C++) instead of vtk.js (pure JavaScript reimplementation)
- **API style**: VTK.wasm uses `vtk.vtkRenderer()` factory functions on a namespace object, vs vtk.js's `vtk.Rendering.Core.vtkRenderer.newInstance()` hierarchy
- **Initialization**: VTK.wasm requires async initialization via `vtkWASM.createNamespace()` to load the WASM binary
- **Feature parity**: VTK.wasm provides access to the full VTK C++ API, enabling features not available in vtk.js

## Contributing

Contributions are welcome! Please open an issue or pull request on [GitHub](https://github.com/tkoyama010/pyvista-wasm/issues).

## License

[Apache License 2.0](LICENSE) © Tetsuo Koyama

[jupyterlite-preview]: https://github.com/tkoyama010/pyvista-wasm/releases/latest/download/preview.gif
[marimo-preview]: https://github.com/tkoyama010/pyvista-wasm/releases/latest/download/marimo-preview.gif
[stlite-preview]: https://github.com/tkoyama010/pyvista-wasm/releases/latest/download/stlite-preview.gif
[try it with jupyterlite]: https://pyvista-js.readthedocs.io/en/latest/lite/lab/index.html?path=intro.ipynb
[try it with marimo]: https://marimo.app/?code=JYWwDg9gTgLgBCAhlUEBQaD6mDmBTAOzykRjwBNMB3YGACzgF44AiABgDoBGAZg4DYWaRGDBMEyVBwCCogBQ1y9RixAVgAVxAsAlBjQABEWA4BjPABsLwgM4BPAqbjk8AMziY5OgFxo4-uFBIWARgUygIMGAwDAC4RCpEWlDwyOiOYAIbGEQrORYwOwA3YGzEAFpEm209OKg8GA0oAjg5EDCIqLAAGj0MI1EzS2sXd0921K6fPwCg6HgkFBAIeJsEdDi5kMKSsupEatW4MCLYgPrG5vXu49P+4yGrNFGPNogbk+m4sAsIGDIoOIThwAAq-f7ELwzfw-P4AjiIciUNQ2OhyYEAZTAdGIeC8N1MEF+UBU9XIumhcDoMBAFkwhIIZEZQPB8PwRBIZEwZQI5FyECImGptKhlLwNlMIgo4mFdIZTJgHHqP0Q5nyADIWDcWOrEOAANy6JV4FVqgDkLDN2vVAEcNH9DX04ssOBANDAwO6EaJCOQ3hwABI0ixySlxVxmgA8wFcJDUcBsUFM5AgphUAG9xZKwBQAL4sOBmsMBM3ZOwWPAqRT0bxcNhsACk+pxwBw1O8ABZ62AAB769oEcottswTvdvsAI2gLig3gATL2E0TgOQ4ABiHibw2F4v+UuIXlTnsqXK-KjlCUoMAwGwsAB8kYA9DG43g71bKTo+mgYx5MAQ9TwbAmGYFhsCQTJsBYXw4geKANAIKEgA
[try it with stlite]: https://edit.share.stlite.net/#!CgZhcHAucHkSxQQKBmFwcC5weRK6BAq3BCIiIlN0cmVhbWxpdCBhcHAgZm9yIHRoZSBweXZpc3RhLWpzIHN0bGl0ZSBkZW1vLiIiIgoKaW1wb3J0IHN0cmVhbWxpdCBhcyBzdAppbXBvcnQgc3RyZWFtbGl0LmNvbXBvbmVudHMudjEgYXMgY29tcG9uZW50cwoKaW1wb3J0IHB5dmlzdGFfd2FzbSBhcyBwdgpmcm9tIHB5dmlzdGFfd2FzbSBpbXBvcnQgZXhhbXBsZXMKCmNvbG9yID0gc3Quc2VsZWN0Ym94KAogICAgIkNvbG9yIiwKICAgIFsiZ3JheSIsICJ3aGl0ZSIsICJyZWQiLCAiZ3JlZW4iLCAiYmx1ZSIsICJ5ZWxsb3ciLCAiY3lhbiIsICJtYWdlbnRhIl0sCikKCm9wYWNpdHkgPSBzdC5zbGlkZXIoIk9wYWNpdHkiLCBtaW5fdmFsdWU9MC4wLCBtYXhfdmFsdWU9MS4wLCB2YWx1ZT0wLjgsIHN0ZXA9MC4xKQoKcGxvdHRlciA9IHB2LlBsb3R0ZXIoKQoKbWVzaCA9IGV4YW1wbGVzLmRvd25sb2FkX2J1bm55KCkKCnBsb3R0ZXIuYWRkX21lc2gobWVzaCwgY29sb3I9Y29sb3IsIG9wYWNpdHk9b3BhY2l0eSkKCmh0bWwgPSBwbG90dGVyLmdlbmVyYXRlX3N0YW5kYWxvbmVfaHRtbCgpCmNvbXBvbmVudHMuaHRtbChodG1sLCBoZWlnaHQ9NjAwKRoMcHl2aXN0YS13YXNt
