Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 8 additions & 2 deletions .github/workflows/website.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -33,12 +33,18 @@ jobs:
- name: Setup Node
uses: actions/setup-node@v4
with:
node-version: 18
node-version: 24
- uses: actions/setup-python@v5
with:
python-version: "3.12"
- name: Setup Pages
uses: actions/configure-pages@v3
- name: Install dependencies
working-directory: docs/vitepress
run: npm ci
- name: Update blogs
working-directory: docs/vitepress
run: python update_blogs.py
- name: Build with VitePress
working-directory: docs/vitepress
run: |
Expand Down Expand Up @@ -67,4 +73,4 @@ jobs:
steps:
- name: Deploy to GitHub Pages
id: deployment
uses: actions/deploy-pages@v4
uses: actions/deploy-pages@v4
8 changes: 6 additions & 2 deletions docs/vitepress/.vitepress/config.mjs
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
import { defineConfig } from "vitepress";

import blogs from "./blogs.json";

// https://vitepress.dev/reference/site-config
export default defineConfig({
base: "/trame",
Expand Down Expand Up @@ -72,6 +74,7 @@ export default defineConfig({
{ text: "Home", link: "/" },
{ text: "News", link: "/news" },
{ text: "Guide", link: "/guide/" },
{ text: "Blogs", link: "/blogs/" },
{ text: "Examples", link: "/examples/" },
{
text: "Resources",
Expand Down Expand Up @@ -179,8 +182,8 @@ export default defineConfig({
// { text: 'Asynchronous ParaView', link: 'https://github.com/Kitware/async-paraview-app' },
// { text: 'PFB Viewer', link: 'https://github.com/Kitware/pfb-viewer' },
// { text: 'ParFlow Simulation Modeler', link: 'https://github.com/Kitware/pf-simulation-modeler' },
{ text: '3D Slicer', link: '/examples/apps/trame-slicer' },
{ text: 'Community', link: '/examples/apps/community' },
{ text: "3D Slicer", link: "/examples/apps/trame-slicer" },
{ text: "Community", link: "/examples/apps/community" },
],
},
{
Expand All @@ -206,6 +209,7 @@ export default defineConfig({
],
},
],
"/blogs/": blogs,
},

socialLinks: [{ icon: "github", link: "https://github.com/kitware/trame" }],
Expand Down

Large diffs are not rendered by default.

Large diffs are not rendered by default.

Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
[post](https://www.kitware.com/bring-powerful-3d-visualization-to-the-browser-with-vtk-wasm/)

# Bring Powerful 3D Visualization to the Browser with VTK.wasm

October 17, 2025

[Sebastien Jourdain](https://www.kitware.com/author/sebastien-jourdain/ "Posts by Sebastien Jourdain") and [Riley Sheedy](https://www.kitware.com/author/riley-sheedy/ "Posts by Riley Sheedy")

![Visualization of Space Ship](https://www.kitware.com/main/wp-content/uploads/2025/09/VTK-WASM-Webinar-2025-Q3_feature.jpg)

Modern scientific and engineering applications increasingly rely on rich, interactive 3D visualization to interpret complex data. Traditional desktop deployments, however, create barriers, installation overhead, platform dependencies, and limited scalability. As workflows migrate to the web, there is a clear need for performant, browser-native solutions that can deliver the sophistication of desktop tools without their constraints.

## Introducing VTK.wasm

By compiling the Visualization Toolkit (VTK) to WebAssembly, VTK.wasm enables high-performance, interactive 3D visualization directly in the browser. This extends VTK’s flexibility—already established across C++, Python and makes it available to modern web environments.

## What’s available today

VTK.wasm provides multiple entry points designed for different development needs:

### Pre-Built WASM Bundles

For rapid integration, developers can leverage release and nightly builds that expose a streamlined, browser-focused API. These bundles are particularly suited for:

* Client/server applications with synchronized state management.
* JavaScript workflows using reactive, browser-native programming models.

This option is ideal for teams seeking advanced visualization capabilities with minimal setup.

### Custom C++ Compilation

For greater control and optimization, developers can build tailored VTK.wasm bundles:

* Use Docker images and CMake macros to generate compact WebAssembly libraries.
* Include only the VTK modules necessary for a given application.
* Extend functionality through custom class serialization.

This workflow supports projects that require scalability, performance tuning, and precise customization.

### Python and trame Integration

For Python developers, VTK.wasm integrates seamlessly with **trame**, Kitware’s framework for creating browser-based scientific applications. Highlights include:

* Direct use of vtkRenderWindow that gets displayed in the browser via trame-vtklocal.
* Enable dynamic scene synchronization between server and client.
* Export 3D scenes from Python to a standalone web viewer.

This lowers the barrier for Python-based development of real-time, browser-native visualization tools, without requiring JavaScript expertise.

![](https://www.kitware.com/main/wp-content/uploads/2025/10/vtkwasm-1-1024x532.jpg)

## Roadmap

Development of VTK.wasm is ongoing, with several major capabilities planned:

* WebGPU support for next-generation rendering (coming soon).
* ParaView integration to extend advanced, large-scale workflows into the browser.
* Dynamic module loading to reduce application footprint.
* Expanded VTK module coverage, including data processing in addition to rendering.

## Why Kitware?

At Kitware, we don’t just respond to shifts in technology; we help drive them. As the team behind VTK, ParaView, trame, and now VTK.wasm, we bring decades of expertise in scientific visualization, high-performance computing, and open science. This foundation enables researchers, engineers, and developers to deliver advanced 3D applications that are scalable, efficient, and ready for real-world challenges.

If you’d like to explore how VTK.wasm can enhance your workflows, our team is available to provide technical guidance and collaboration opportunities. You can also see VTK.wasm in action through our [on-demand webinar](https://www.kitware.com/webinars/vtk-wasm-a-modern-path-to-bringing-vtk-to-the-web/), which highlights practical examples in C++, Python, and JavaScript and offers clear takeaways for building browser-native visualization tools.

## Support and Services

Looking to take your application to new heights? [Get in touch](https://www.kitware.com/contact/) with Kitware for expert development and support services to fast-track your success with Kitware's open source frameworks.

<!-- Icon/link tiles -->
<table>
<tr>
<td align="center" width="33%">
<img src="https://www.kitware.com/main/wp-content/uploads/2021/11/icon_collaboration.svg" width="50"><br>
<strong><a href="https://www.kitware.com/training/">Training</a></strong><br>
<small>Learn how to confidently use and customize 3D Slicer from the expert developers at Kitware.</small>
</td>
<td align="center" width="33%">
<img src="https://www.kitware.com/main/wp-content/uploads/2021/12/icon_research_develop.svg" width="50"><br>
<strong><a href="https://www.kitware.com/support/">Support</a></strong><br>
<small>Our experts can assist your team as you build your application and establish in-house expertise.</small>
</td>
<td align="center" width="33%">
<img src="https://www.kitware.com/main/wp-content/uploads/2021/11/icon_custom_software.svg" width="50"><br>
<strong><a href="https://www.kitware.com/contact">Custom Development</a></strong><br>
<small>Leverage Kitware's 25+ years of experience to quickly build your application.</small>
</td>
</tr>
</table>

Tags:

[ParaView](https://www.kitware.com/tag/paraview/) | [Python](https://www.kitware.com/tag/python/) | [Trame](https://www.kitware.com/tag/trame/) | [VTK](https://www.kitware.com/tag/vtk/)

Original file line number Diff line number Diff line change
@@ -0,0 +1,148 @@
[post](https://www.kitware.com/exposing-web-application-with-paraview-5-13-is-getting-simpler/)

# Exposing Web applications with ParaView 5.13 is getting simpler

September 3, 2024

[Sebastien Jourdain](https://www.kitware.com/author/sebastien-jourdain/ "Posts by Sebastien Jourdain") and [Cory Quammen](https://www.kitware.com/author/cory-quammen/ "Posts by Cory Quammen")

![ParaView Trame Components](https://www.kitware.com/main/wp-content/uploads/2024/08/web-app-output.png)

Thanks to the new `--venv` feature of ParaView 5.13, covered in our previous [post](https://www.kitware.com/using-python-virtual-environments-in-paraview-5-13-0/), we now have a simple path to leverage [trame](https://kitware.github.io/trame/) within ParaView.

Trame is a set of Python packages that makes it simple to put ParaView visualization on the web. Because trame development is progressing rapidly, ParaView binary installers do not include it; any version shipped with ParaView would quickly become outdated. Instead, you can use pip as the distribution mechanism to keep trame up to date by combining a ParaView binary release with the new –venv option and a virtual environment with trame dependencies.

## Setting up a trame environment

To create such virtual environment, you can do the following steps:

```
# create environment locally
python3.10 -m venv .venv

# activate environment
source .venv/bin/activate

# install a trame package with some demos
pip install paraview-trame-components

# exit environment by deactivating it
deactivate
```

Now that we have a virtual environment setup with some pre-existing trame applications we can start using it within ParaView.

## Parallel visualization with ParaView and trame

The sample code below will use ParaView MPI to show a sphere color coded by the MPI process that owns each part within a web browser. In order to achieve that we will use pvbatch, an MPI-enabled batch-processing Python interpreter distributed as part of the ParaView suite.

```
# mpiexec and pvbatch are coming from the ParaView bundle
mpiexec -n 4 pvbatch --venv .venv -m ptc.apps.sphere
```

By running this previous command line, a new tab in your web browser will open with the following content.

![](https://www.kitware.com/main/wp-content/uploads/2024/08/Screenshot-2024-08-14-at-15.39.48-1024x777.png)

If you are wondering what code led to that interactive visualization that run in parallel via MPI, you can find it [here](https://github.com/Kitware/paraview-trame-components/blob/main/ptc/apps/sphere.py) but the listing below is also provided for convenience.

```
from paraview import simple
import ptc

sphere = simple.Sphere()
rep = simple.Show(sphere)
view = simple.Render()

simple.ColorBy(rep, ("POINTS", "vtkProcessId"))

rep.RescaleTransferFunctionToDataRange(True, False)
rep.SetScalarBarVisibility(view, True)

web_app = ptc.Viewer(from_state=True)
web_app.start()
```

As you can see from that example, you can easily leverage ParaView parallel capabilities from a simple Python script and drive the visualization from your browser.

## Interactive data processing and visualization

Trame provides endless options on what you can do with it, but let’s explore another simple example with ParaView doing interactive data processing and visualization.

This time we will use pvpython and loads a different example that lets you change an isovalue interactively. And since you already have everything installed, you just need to run the following command.

```
pvpython --venv .venv -m ptc.apps.demo
```

When your local web browser opens, move the slider and you will see the isosurface change like below.

[](https://www.kitware.com/main/wp-content/uploads/2024/08/anim.mov)

While this visualization is not that appealing, look at the code needed to create such interactive data processing web application.

```
from paraview import simple
import ptc

# ParaView code
wavelet = simple.Wavelet()
contour = simple.Contour(Input=wavelet)
contour.ContourBy = ["POINTS", "RTData"]
contour.Isosurfaces = [157.0909652709961]
contour.PointMergeMethod = "Uniform Binning"
rep = simple.Show(contour)
view = simple.Render()

# Trame WebApp code
web_app = ptc.Viewer()

with web_app.side_top:
ptc.VSlider(
v_model=("value", contour.Isosurfaces[0]),
min=37, max=276, step=0.5,
color="primary", style="margin: 0 100px;",
)

@web_app.state.change("value")
def on_contour_value_change(value, **kwargs):
contour.Isosurfaces = [value]
web_app.update()

web_app.start()
```

## Where to go from there?

Now that ParaView is able to extend its Python with any external virtual environment, you can easily create bespoke solutions with trame and share the result more easily with anyone. Such applications can come from an external package like the one we use throughout that blog but it can also be a simple standalone file.

## Support and Services

Looking to take your application to new heights? [Get in touch](https://www.kitware.com/contact/) with Kitware for expert development and support services to fast-track your success with Kitware's open source frameworks.

<!-- Icon/link tiles -->
<table>
<tr>
<td align="center" width="33%">
<img src="https://www.kitware.com/main/wp-content/uploads/2021/11/icon_collaboration.svg" width="50"><br>
<strong><a href="https://www.kitware.com/training/">Training</a></strong><br>
<small>Learn how to confidently use and customize 3D Slicer from the expert developers at Kitware.</small>
</td>
<td align="center" width="33%">
<img src="https://www.kitware.com/main/wp-content/uploads/2021/12/icon_research_develop.svg" width="50"><br>
<strong><a href="https://www.kitware.com/support/">Support</a></strong><br>
<small>Our experts can assist your team as you build your application and establish in-house expertise.</small>
</td>
<td align="center" width="33%">
<img src="https://www.kitware.com/main/wp-content/uploads/2021/11/icon_custom_software.svg" width="50"><br>
<strong><a href="https://www.kitware.com/contact">Custom Development</a></strong><br>
<small>Leverage Kitware's 25+ years of experience to quickly build your application.</small>
</td>
</tr>
</table>

Tags:

[ParaView](https://www.kitware.com/tag/paraview/) | [Python](https://www.kitware.com/tag/python/) | [Scientific Computing](https://www.kitware.com/tag/scientific-computing/) | [Trame](https://www.kitware.com/tag/trame/)

Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
[post](https://www.kitware.com/faster-and-better-3d-slicer-rendering-customization/)

# Faster and better 3D Slicer rendering customization

January 13, 2026

[Thibault Pelletier](https://www.kitware.com/author/thibault-pelletier/ "Posts by Thibault Pelletier") and [Julien Finet](https://www.kitware.com/author/julien-finet/ "Posts by Julien Finet")

![](https://www.kitware.com/main/wp-content/uploads/2025/12/model_glow_example.jpg)

3D Slicer is a very versatile and powerful medical imaging platform that provides plenty of ways for customization; scripted modules allowing the creation of new logic, Qt widgets in both Python and C++, IO plugins for reading custom file formats, segmentation effects for adding new features to the builtin segmentation tools and much more.

With the introduction of the **[SlicerLayerDisplayableManager](https://github.com/KitwareMedical/SlicerLayerDisplayableManager)** module in [3D](link)[Slicer 5.10](https://www.kitware.com/3d-slicer-5-10-now-available-for-download/), extending the rendering pipeline is now significantly easier.

## What can you do with it?

Consider a simple example: adding hover-based highlighting to any model in the scene. Using the new library, an experienced Slicer developer can implement this functionality from scratch in just a couple of hours.

<p align="center">
<video controls width="720" src="https://www.kitware.com/main/wp-content/uploads/2025/12/slicer_LayerDM_model_glow_example-2025-12-10.mp4">
<a href="https://www.kitware.com/main/wp-content/uploads/2025/12/slicer_LayerDM_model_glow_example-2025-12-10.mp4">Download video</a>
</video>
</p>

This [toy example](https://slicerlayerdisplayablemanager.readthedocs.io/en/latest/examples.html) demonstrates how straightforward it is to add selection logic to a custom 3D Slicer module or extension, creating an intuitive user-experience with minimal code.

## Getting started

Install the LayerDisplayableManager extension directly from the Extension Manager in 3D Slicer 5.10 or later.

For examples and detailed API documentation, visit the complete [online documentation](https://slicerlayerdisplayablemanager.readthedocs.io/en/latest/).

![](https://www.kitware.com/main/wp-content/uploads/2025/12/image.png)

<p align="center">Layer Displayable Manager extension in the 3D Slicer Extension Manager</p>

![](https://www.kitware.com/main/wp-content/uploads/2025/12/image-2-1024x875.png)

<p align="center">Online documentation of the Layer Displayable Manager extension</p>

## Support and Services

Looking to take your application to new heights? [Get in touch](https://www.kitware.com/contact/) with Kitware for expert development and support services to fast-track your success with trame Slicer.

<!-- Icon/link tiles -->
<table>
<tr>
<td align="center" width="33%">
<img src="https://www.kitware.com/main/wp-content/uploads/2021/11/icon_collaboration.svg" width="50"><br>
<strong><a href="https://www.kitware.com/training/">Training</a></strong><br>
<small>Learn how to confidently use and customize 3D Slicer from the expert developers at Kitware.</small>
</td>
<td align="center" width="33%">
<img src="https://www.kitware.com/main/wp-content/uploads/2021/12/icon_research_develop.svg" width="50"><br>
<strong><a href="https://www.kitware.com/support/">Support</a></strong><br>
<small>Our experts can assist your team as you build your application and establish in-house expertise.</small>
</td>
<td align="center" width="33%">
<img src="https://www.kitware.com/main/wp-content/uploads/2021/11/icon_custom_software.svg" width="50"><br>
<strong><a href="https://www.kitware.com/contact">Custom Development</a></strong><br>
<small>Leverage Kitware's 25+ years of experience to quickly build your application.</small>
</td>
</tr>
</table>

Tags:

[3D Slicer](https://www.kitware.com/tag/3d-slicer/) | [Medical Imaging](https://www.kitware.com/tag/medical-imaging/) | [Press Releases](https://www.kitware.com/tag/press/) | [rendering](https://www.kitware.com/tag/rendering/) | [VTK](https://www.kitware.com/tag/vtk/)

Loading