Deploying Dynamic Dashboards

You’ve spent some time cleaning and manipulating data in Jupyter Notebook. You even added some interactive widgets to show off your results. Now you need to make this available to others. You could use nbconvert, but then you lose widget interactivity. And distributing the raw notebook file is far too technical for some users. How can we distribute our report in a clean, easy to understand format while allowing for widget and data interactivity?

The Dynamic Dashboards set of projects handles this, allowing you to create a dashboard and deploy to a secure server where users can interact with live data.


dashboard deploy
Deploying dynamic dashboard based on Tour demo from Declarative Widgets

Dynamic Dashboards

Dynamic Dashboards are a set of projects that work in or with the Jupyter Notebook, allowing you to quickly create and deploy a usable dashboard app from your notebook:

  • Dashboards extension: Create a grid-based dashboard within Jupyter Notebook. Show only the cells you want, hiding the ones that contain “plumbing” code.
  • Dashboards Bundler: Package and deploy your finished dashboard and associated resources as a web app.
  • Dashboards Server: Securely serve notebook-based dashboards as standalone web apps.

Try It Yourself

To illustrate the deployment flow, we’ve created a recipe which uses docker-compose to setup and run all of the necessary pieces. Follow the instructions under Try It to get set up (pay attention to the prerequisites).

Here’s how to deploy your own dynamic dashboard (this assumes your Docker is setup at IP

  1. Open the Jupyter Notebook: Create a new notebook or upload an existing one. Create cells as necessary. Execute all of the cells (one-by-one, or using Cell > Run All).
  2. Switch to the Dashboard Layout mode: View > Dashboard Layout. In this view, you can hide cells that you don’t want to show to end users (such as code-only cells), as well as moving/resizing cells in a grid pattern. Click on the More Info link at the top of the page for usage instructions.
  3. Select View > Dashboard Preview to get a quick look at what your finished dashboard will look like.
  4. Once you are ready to deploy, select File > Deploy as > Dashboard on Jupyter Dashboard Server. This will open your new dashboard in a new browser tab, running on the Dashboard Server (
    • If you are asked to login, use the demo for both the login and password.

Dynamic Dashboards runs your code the same as it does in the Notebook, allowing you to quickly create rich, dynamic web apps built around your data. Widget and graphing libraries that you have used in the Notebook (such as Interactive HTML Widgets (ipywidgets) and Matplotlib) work just as well in Dynamic Dashboards. The Tour demo notebook shown above uses another of our projects, the Declarative Widgets library.

Keep in mind that all of these projects are still works-in-progress. Over time, the dashboard generation capabilities will be integrated into Juptyer Notebook and the forth-coming JupyterLab. Give them a spin and let us know what you think. We welcome pull requests and issue reports.

(Originally published on the IBM Emerging Technologies Blog)

Reconcile OpenAjax Metadata for Use With AMD/Module Specs

For the Maqetta Designer project, we use OpenAjax Metadata (OAM) to provide information about the widgets that can be dropped on the page – mainly the widget content, required resources and properties.

We stick to the spec and keep the metadata files “toolkit-agnostic”, by storing Maqetta-specific widget metadata elsewhere. Ideally, another product that implemented the OAM spec could make use of our metadata files.

Lately, though, we’ve started to transition to using the AMD loader for Dojo 1.7; and we found that the existing OAM files didn’t really work that well with AMD.

For that reason, we had to deviate from the OAM spec and add extensions to support AMD and other module specs.  Read on here for a detailed explanation of the changes and some examples.


There is a cult of ignorance in the United States, and there always has been. The strain of anti-intellectualism has been a constant thread winding its way through our political and cultural life, nurtured by the false notion that democracy means that “my ignorance is just as good as your knowledge.”

– Isaac Asimov, from a 1980 Newsweek column