Sidecar
A lightweight viewer for Jupyter outputs that runs alongside your terminal session. Built with a React frontend using nteract elements for rich output rendering and interactive widgets.
TODO: Include updated demo!
Features
- Rich Output Rendering - text/plain, text/html, text/markdown, images, SVG, JSON tree view, ANSI terminal colors
- Interactive Widgets - Full ipywidgets support with two-way binding
- anywidget Support - Works with quak, drawdata, jupyter-scatter, and other anywidget-based libraries
- Lightweight - Single binary, no dependencies beyond your existing kernel
Installation
Usage
In a jupyter console session with Python, run:
=
=
That will open a separate window showing the output of your Jupyter session.
Interactive Widgets
Standard ipywidgets work out of the box:
anywidgets like quak for data exploration:
%
=
Or drawdata for interactive annotation:
=
Development
The UI is built with Vite + React + Tailwind CSS. The built assets are embedded in the Rust binary at compile time.
Building the UI
Building sidecar
After building the UI:
For debug builds with devtools access (Cmd+Option+I):
RUST_LOG=info
nteract elements Integration
The sidecar UI uses components from nteract elements, a shadcn/ui-based component registry for Jupyter interfaces.
Adding Components
Components are added via the shadcn CLI from the nteract-elements registry:
Architecture
┌─────────────────────────────────────────────────────────────┐
│ Sidecar App │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌──────────────┐ ┌───────────────┐ │
│ │ Webview │───▶│ Rust/Wry │───▶│ Kernel │ │
│ │ (React UI) │◀───│ (ZMQ/JSON) │◀───│ (Python) │ │
│ └─────────────┘ └──────────────┘ └───────────────┘ │
│ │ │ │ │
│ POST /message Shell channel comm_msg │
│ (widget updates) (to kernel) (widget sync) │
│ │
│ globalThis.onMessage IOPub channel comm_open/msg │
│ (receive outputs) (from kernel) (widget state) │
└─────────────────────────────────────────────────────────────┘