Introduction
Voilà takes a standard Jupyter notebook and serves it as a standalone web application. It executes all cells on the server, strips out the source code, and presents only the outputs—charts, tables, and interactive widgets. This lets data scientists share their work as polished dashboards without building a separate frontend.
What Voilà Does
- Renders Jupyter notebooks as web applications with code cells hidden from end users
- Preserves ipywidgets interactivity so dashboards respond to sliders, dropdowns, and buttons
- Executes notebooks on each page load, ensuring outputs reflect the latest data
- Supports custom templates and themes for branding dashboard pages
- Integrates with JupyterHub for multi-user deployment with authentication
Architecture Overview
Voilà runs as a Tornado web server that extends the Jupyter server. When a user requests a notebook, Voilà creates a kernel, executes all cells sequentially, and renders the output as HTML. Interactive widgets use the Jupyter Comms protocol over WebSocket to communicate between the browser and the kernel. The template engine (Jinja2) controls page layout, allowing customization of headers, footers, and styling. Each user session gets its own kernel, providing isolation.
Self-Hosting & Configuration
- Install via pip:
pip install voilaor conda:conda install -c conda-forge voila - Run standalone with
voila notebook.ipynbor serve a directory withvoila ./notebooks/ - Deploy behind JupyterHub by adding Voilà as a server extension
- Custom templates go in
share/jupyter/voila/templates/and are selected with--template - Configure execution timeout, allowed downloads, and CORS settings in
voila.json
Key Features
- Zero frontend code required—any notebook with ipywidgets becomes a dashboard
- Template system for custom layouts: gridstack for drag-and-drop grids, flex for responsive designs
- Pre-heating option to keep kernels warm and reduce dashboard load time
- Static rendering fallback for notebooks without interactive widgets
- Works with all Jupyter widget libraries including bqplot, ipyleaflet, and plotly
Comparison with Similar Tools
- Streamlit — Python-first app framework; Voilà reuses existing Jupyter notebooks without rewriting code
- Dash — Plotly's dashboard framework; requires writing a Dash-specific app; Voilà works with standard notebooks
- Panel — HoloViz dashboarding; Voilà is simpler if you already have Jupyter notebooks
- Gradio — ML demo builder; Voilà serves general-purpose data dashboards, not just model interfaces
- nbconvert — exports static HTML; Voilà preserves interactivity through live kernel connections
FAQ
Q: Do users need Jupyter installed to view a Voilà dashboard? A: No. Voilà serves a web page—users only need a browser. Jupyter and the kernel run on the server side.
Q: Can I deploy Voilà in production? A: Yes. Deploy behind a reverse proxy like Nginx, optionally with JupyterHub for authentication and multi-user isolation. Container images are available for Docker and Kubernetes deployments.
Q: How is performance with many concurrent users? A: Each user session spawns a kernel, so resource usage scales linearly. For high-traffic dashboards, use kernel pre-heating and consider scaling horizontally behind a load balancer.
Q: Can I hide specific cells instead of all code?
A: Yes. Use cell tags (voila-exclude or voila-hide-input) to selectively hide cells or just their source code while keeping outputs visible.