Introductionยถ
itkwasm
enables universal spatial analysis and visualization via WebAssembly (wasm) .
itkwasm
Python packages run on all modern web browsers and at a system level across all major operating systems and hardware architectures .
All versions of Python 3.8+ are supported
.Additionally, non-wasm packages accelerate performance via GPUs when available
.In the browser, Pyodide-compatible packages provide client-side web app scripting in Python, including via PyScript, and sustainable, scalable Jupyter deployments via JupyterLite .
At a system level, Linux, macOS, and Windows operating systems are supported on x86_64 and ARM via wasmtime-py .
itkwasm
Python packages are highly modular, have a tiny footprint, and have minimal dependencies; they only depend on itkwasm
, numpy
, and pyodide
or wasmtime
.
This Jupyter notebook tutorial provides further background information and related hands-on experiences.
Environment dispatchยถ
There is a primary, pip-installable Python package. In browser environments, this will pull a corresponding Emscripten-enabled Python package. For system Python distributions, this will bring in a corresponding WASI-enabled Python package. When GPU-accelerated implementations of functions are available in other packages along with required hardware and software, simply pip-installing the accelerator package will cause function calls to invoke accelerated overrides registered with modern package metadata.
Browser and system APIsยถ
While synchronous functions are available in system packages, browser packages provide asynchronous functions for non-blocking, performant execution in the JavaScript runtime event loop. These functions are called with modern Pythonโs async / await support.
For example, to install the itkwasm-compress-stringify package:
pip install itkwasm-compress-stringify
In Pyodide, e.g. the Pyodide REPL or JupyterLite,
import micropip
await micropip.install('itkwasm-compress-stringify')
In the browser, call the async *_async
function with the await
keyword.
from itkwasm_compress_stringify import compress_stringify
data = bytes([33,44,55])
compressed = compress_stringify(data)
from itkwasm_compress_stringify import compress_stringify_async
data = bytes([33,44,55])
compressed = await compress_stringify_async(data)