Overview
Panel is an open-source Python library for building tools, dashboards, and full applications without leaving Python. It is part of the HoloViz ecosystem and takes a batteries-included approach, giving you widgets, layouts, data tables, and plotting integrations out of the box.
It is aimed at data scientists, analysts, and Python developers who want to turn notebooks and scripts into interactive web apps. You can work in Jupyter notebooks or editors like VS Code, PyCharm, and Spyder, and the same code runs as a served web app.
As a data app builder, Panel connects to the visualization tools you already use, including Matplotlib, Plotly, Bokeh, Altair/Vega, HoloViews, hvPlot, Datashader, and the ipywidgets ecosystem. It offers both high-level reactive APIs and lower-level callback APIs, so simple exploratory apps and larger multi-page apps both fit.
What it does
- Build dashboards and multi-page apps entirely in Python, with no separate frontend code required
- Integrates with many plotting libraries: Matplotlib, Plotly, Bokeh, Altair/Vega, HoloViews, hvPlot, Datashader, Folium, and more
- Reactive APIs (such as pn.bind) plus lower-level callback APIs for finer control
- Bi-directional communication to react to clicks, selections, and hover events
- Works in Jupyter notebooks and in editors like VS Code, PyCharm, and Spyder
- Serve scripts or notebooks as web apps with the panel serve command
Getting started
Install Panel, write a small interactive script, then serve it as a web app.
Install Panel
Install from PyPI with pip, or from conda if you use the conda ecosystem.
pip install panelBuild an interactive app
Create a script that binds a widget to a function and lays them out together. Marking a layout or template servable lets Panel serve it.
import panel as pn
pn.extension()
def model(n=5):
return "⭐" * n
slider = pn.widgets.IntSlider(value=5, start=1, end=5)
interactive_model = pn.bind(model, n=slider)
layout = pn.Column(slider, interactive_model)
pn.template.FastListTemplate(
site="Panel", title="Example", main=[layout],
).servable()Serve the app
Run the script with panel serve to open it in your browser. You can serve a notebook the same way.
panel serve name_of_script.py --showCommands and code are distilled from the project's own documentation — always check the official repo for the latest.
When to use it
- Turn an exploratory Jupyter notebook into a shareable interactive dashboard
- Build an internal data exploration tool that combines widgets, plots, and tables
- Wrap existing Matplotlib, Plotly, or Bokeh charts in a controllable web UI
- Deploy a multi-page Python app for stakeholders without writing JavaScript
How Panel compares
Panel alongside other open-source data app builders tools AI/TLDR tracks, ranked by GitHub stars.
| Tool | Stars | What it does |
|---|---|---|
| Streamlit | ★ 45.4k | A Python framework that turns scripts into interactive data and ML web apps with simple widget calls and no frontend code. |
| Gradio | ★ 43.2k | A Python library for quickly building shareable web demos and UIs for machine learning models, APIs, and arbitrary functions. |
| Reflex | ★ 28.7k | A framework for building full-stack web apps entirely in Python, compiling component code to a React frontend and Python backend. |
| Dash | ★ 24.4k | A Python framework from Plotly for building analytical web dashboards and data apps with interactive charts and no JavaScript required. |
| marimo | ★ 22.1k | A reactive Python notebook stored as plain Python that can be run as a script or deployed as an interactive data app. |
| NiceGUI | ★ 16.1k | A backend-first Python UI framework built on FastAPI and Vue for creating web interfaces, dashboards, and internal tools. |
| Data Formulator | ★ 16k | A Microsoft Research tool that combines a UI with AI to help users create rich data visualizations through natural language and direct manipulation. |
| Panel | ★ 5.7k | Build dashboards and data apps entirely in Python |