Bokeh and Jupyter widgets are two powerful frameworks for building visualizations, apps and dashboards but until now these two ecosystems have been mostly incompatible. In this talk were we will discover how we built a bridge between these ecosystems to allow using ipywidgets, Bokeh and Panel together seamlessly in the notebook or deployed using Bokeh server or Voilà.
The Bokeh library is one of the most popular plotting and app building libraries in the Python ecosystem, providing highly interactive and polished plots and widgets along with a highly performant and scalable server architecture. Separately from Bokeh, the Jupyter community has built a highly successful ecosystem based on Jupyter widgets, which is constantly expanding with new components. Until now these two ecosystems have been mostly incompatible, which is confusing for users, has made it unnecessarily difficult to combine components, and forces the same specialized plot or widget type to be implemented multiple times.
In this talk we will present the results of our work in Bokeh 2.0 to allow Bokeh components to be used as ipywidgets, which lets users leverage convenient Jupyter-based deployment solutions such as Voilà, and the inverse, allowing users to add Jupyter widget components in Bokeh apps. These changes all work seamlessly with the high-level Panel dashboarding library, making it easier than ever to draw from the entire Python visualization and dashboarding ecosystem without arbitrary boundaries between different technologies. Users can now select the deployment capability that best meets their needs (Jupyter notebooks for exploration, Voilà for deployments with a Jupyter kernel, or Bokeh/Panel Server for more scalable and lightweight deployments) and independently select the widgets they would like to use (ipywidgets or Bokeh/Panel widgets) as well as independently select the plotting library they prefer (Bokeh, any library with an ipywidgets interface, or any visualization library supported by Panel).
Concretely, we will look at how we wrapped a library like Bokeh as an ipywidget and the complications involved in running Jupyter widget components outside the usual Jupyter server architecture. Finally, we will demonstrate how to mix and match components from both ecosystems to create polished dashboards.