Quick Reference
Supported
| Category | Examples | Status |
|---|---|---|
| ipywidgets core | IntSlider, Button, VBox, Dropdown | ✅ 49 widget types |
| anywidget | quak, drawdata, tqdm | ✅ Full AFM support |
| ipycanvas | Canvas, MultiCanvas | ✅ Custom implementation (tested with 0.14.3) |
| Display outputs | Plotly, Vega-Lite, HTML, images | ✅ Via display |
Unsupported
| Widget | Why | Alternative |
|---|---|---|
| JupyterLab extensions | nteract Desktop is not JupyterLab | — |
| jupyterlab-sidecar | JupyterLab extension | Use notebook outputs |
| bqplot | Extends IPython’s DOMWidget | Plotly, Altair, Vega-Lite |
What Works
Built-in ipywidgets
All standard@jupyter-widgets/controls widgets are implemented:
Sliders & Progress
Sliders & Progress
- IntSlider, FloatSlider, FloatLogSlider
- IntRangeSlider, FloatRangeSlider
- SelectionSlider, SelectionRangeSlider
- IntProgress, FloatProgress
Inputs
Inputs
- IntText, FloatText, BoundedIntText, BoundedFloatText
- Text, Textarea, Password
- Checkbox, ToggleButton
- ColorPicker, DatePicker, TimePicker, Datetime
- TagsInput, ColorsInput, IntsInput, FloatsInput
- FileUpload
Selection
Selection
- Dropdown, Select, SelectMultiple
- RadioButtons, ToggleButtons, Combobox
Containers
Containers
- VBox, HBox, Box, GridBox
- Accordion, Tab, Stack
Display & Media
Display & Media
- HTML, HTMLMath, Label
- Image, Audio, Video
- Button, Valid
Other
Other
- Play (animation control)
- Controller (Gamepad API)
- Link, DirectionalLink (property sync)
- Output (nested outputs)
ipycanvas
ipycanvas has a custom implementation (tested with v0.14.3). This is a from-scratch implementation of the canvas widget protocol, not using ipycanvas’s original frontend code.anywidget
nteract Desktop fully implements the AFM (AnyWidget Frontend Module) spec. Any widget following this spec will work. Tested widgets:- quak — DataFrame viewer (custom messages work)
- drawdata — Drawing tool (dark mode works)
- tqdm — Progress bars (
leave=Falsecleanup works)
- ESM loading (inline code and remote URLs)
- CSS injection
- Custom messages (
model.send()) - Binary buffers
Standard Outputs
Rich display outputs work via the display protocol (not as widgets):- Plotly, Vega-Lite, Vega
- HTML, Markdown, LaTeX
- Images (PNG, JPEG, SVG, GIF)
- JSON, GeoJSON
What Doesn’t Work
JupyterLab Extensions
Examples of incompatible widgets:jupyterlab-sidecar— Creates JupyterLab panels, requires@jupyterlab/application- Any widget that imports from
@jupyterlab/services,@jupyterlab/apputils, etc.
IPython DOMWidget Extensions
Some widgets extend IPython’sDOMWidget class instead of the standard @jupyter-widgets/base. These use different internal APIs we don’t implement.
Known incompatible:
bqplot— Uses IPython DOMWidget internalsipyleaflet— Uses IPython DOMWidget internals
Why These Limitations?
nteract Desktop runs widgets in isolated iframes for security. The architecture is:- We implement widget rendering from scratch, not via JupyterLab
- JupyterLab-specific APIs don’t exist
- Custom widget classes need explicit support
Recommendations
For Charts and Plots
Use display outputs instead of widget-based libraries:For Custom Interactive Widgets
Use anywidget:anywidget is the modern, portable approach that works across Jupyter environments.
For Side Panels
Instead ofjupyterlab-sidecar, use regular notebook outputs. Output appears inline in cells.
Example: Using ipywidgets
Here’s a complete example using built-in ipywidgets:Example: Using anywidget
Create a simple interactive widget:See Also
- GitHub Issue #44 — Widget compatibility testing matrix
- anywidget documentation
- Source:
apps/notebook/src/components/widgets/controls/— Built-in widget implementations