AI/TLDR

Panel

Build dashboards and data apps entirely in Python

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.

bashbash
pip install panel

Build 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.

pythonpython
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.

bashbash
panel serve name_of_script.py --show

Commands 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.

ToolStarsWhat it does
Streamlit★ 45.4kA Python framework that turns scripts into interactive data and ML web apps with simple widget calls and no frontend code.
Gradio★ 43.2kA Python library for quickly building shareable web demos and UIs for machine learning models, APIs, and arbitrary functions.
Reflex★ 28.7kA framework for building full-stack web apps entirely in Python, compiling component code to a React frontend and Python backend.
Dash★ 24.4kA Python framework from Plotly for building analytical web dashboards and data apps with interactive charts and no JavaScript required.
marimo★ 22.1kA reactive Python notebook stored as plain Python that can be run as a script or deployed as an interactive data app.
NiceGUI★ 16.1kA backend-first Python UI framework built on FastAPI and Vue for creating web interfaces, dashboards, and internal tools.
Data Formulator★ 16kA Microsoft Research tool that combines a UI with AI to help users create rich data visualizations through natural language and direct manipulation.
Panel★ 5.7kBuild dashboards and data apps entirely in Python