Tutorials: Custom widgets for Python notebooks with anywidget and marimo

Session chair:TBA

Room:Essex Center

Time:Wednesday, Nov 11 @ 10:00 - 11:30 (US/Eastern)

Organizers: Trevor Manz, Kiran Gadhave

Website:https://ieeevis.org/year/2026/info/program/tutorials

This tutorial is for authors of interactive visualization systems that want to reach users in Python notebooks. Widgets are interactive views or controls for Python objects that render inside notebook cells. Many interactive visualization systems are built as standalone JavaScript applications. A widget lets us integrate such tools into a notebook, where it can live alongside the data that drives it. The tutorial teaches how to author and package widgets for multiple notebook environments so they become shareable, pip-installable building blocks. We use anywidget (https://anywidget.dev) for building widgets and marimo (https://marimo.io), a reactive Python notebook in the style of Observable, for prototyping and using them. Because marimo is reactive, widgets become first-class participants in its dataflow: a user interaction in the browser turns into a variable change that downstream cells react to. We cover the anywidget contract, two-way state between JavaScript and Python, composing widgets with marimo's reactivity, and packaging for distribution to Jupyter, marimo, Colab, VS Code, and Databricks.