Panel: Building Python Data Apps Without Leaving Python
Panel: The powerful data exploration & web app framework for Python
At a glance
- What is it?
- Panel is a HoloViz library that turns widgets, plots and tables into browser-based tools from ordinary Python. It suits analysts who already live in Jupyter and need a shareable app, not a frontend rewrite.
- Who is it for?
- Panel fits Python users who already have plots and dataframes and want a browser interface without writing JavaScript, and it fits teams already inside the HoloViz stack. It is the wrong tool if you need a general-purpose web framework with routing, authentication and a database layer, since the Panel documentation does not present it as one.
- Can I use it commercially?
- Yes. BSD-3-Clause is a permissive licence: you can use, modify and sell software built on it, as long as you keep its copyright and licence notices.
- Is it still maintained?
- Yes. The repository last received commits 1 day ago.
- What is it written in?
- Mainly Python, according to GitHub's language statistics.
Answers come from the project's GitHub data, last synced on September 29, 2026, and from our analysis. They are not legal advice.
Editorial analysis
What Panel actually removes from the work
A data scientist with a working notebook usually faces the same wall: the notebook is not something a colleague can open without installing anything, and turning it into a web page means handing the work to someone who writes JavaScript. Panel targets that gap. The README describes it as an open-source Python library that lets you build tools, dashboards and complex applications entirely in Python, with a batteries-included philosophy that puts the PyData ecosystem, data tables and similar objects at your fingertips.
The intended audience is visible in the project metadata rather than the prose. The classifiers in pyproject.toml list Scientific/Engineering, Visualization, Information Analysis, Financial, Healthcare and Legal industries. That is a research and analysis audience, not a frontend engineering audience. If your output is a chart, a table or a parameter sweep that someone else needs to click through, Panel is aimed at you. If your output is a consumer web product with accounts and payments, it is not.
How the reactive layer and the callback layer coexist
Panel offers two programming styles over the same rendering pipeline, and the choice between them is the main design decision a user makes. The README puts it plainly: high-level reactive APIs and lower-level callback based APIs ensure you can quickly build exploratory applications, but you are not limited if you build complex, multi-page apps with rich interactivity.
The reactive style means you declare a function that depends on widget values and Panel re-runs it when those values change, which is why the README can describe development happening in Jupyter notebooks as well as in editors like VS Code, PyCharm or Spyder. The callback style means you attach functions to events directly, which is what you need for the click, selection and hover interactions the README highlights as bi-directional communication.
Underneath, Panel is built on Bokeh for the browser side. The dependency list in pyproject.toml pins bokeh to >=3.10.0,<3.11.0, alongside param >=2.1.0,<3.0 and pyviz_comms >=2.0.0. That pin is the single most consequential line in the file for anyone integrating Panel into an existing environment, because it means the Bokeh version is not negotiable within the same environment.
Installing Panel and running a first app
The README links to installation instructions on panel.holoviz.org, and the package is published to both PyPI and conda channels, which the README's badge table shows for pyviz, conda-forge and defaults. The README does not print an install command, so the reliable starting point is the installation page it links to, which covers the pip and conda routes.
The README does not state a minimum Python version, but pyproject.toml sets requires-python to >=3.12, so an older interpreter will refuse the install rather than fail later. The README does list the conda channels carrying the release, including conda-forge.
Once installed, the README's own description of the workflow is that you combine widgets, plots, tables and other viewable Python objects into a custom analysis tool. The README's gallery and reference sections are the place to copy a working starting point from; the repository ships examples under examples/apps, examples/gallery and examples/reference, which is where a first real app is best lifted from rather than written from scratch.
The README does not document the CLI flags for serving a file, so check the reference guides at panel.holoviz.org before scripting a deployment step around it.
The Bokeh pin is the constraint you will meet first
Panel's dependency on a narrow Bokeh range is a real operational cost, not a footnote. Because pyproject.toml requires bokeh >=3.10.0,<3.11.0, any other library in the same environment that needs a different Bokeh minor version will conflict. Teams that already run Bokeh directly, or that depend on a tool built against an older Bokeh, should resolve that before installing Panel rather than after.
The second limitation is scope. Panel renders Python objects into a browser; it does not give you a general application server. The README talks about tools, dashboards and multi-page apps, and it does not document authentication, user accounts or a database layer. If your requirement is a login-gated internal system with per-user data, the Panel documentation is silent on how you would build that, and you would be assembling it from surrounding infrastructure.
A third constraint is that the README does not document rollback or downgrade procedures. If a release changes behaviour in an app you have deployed, the available documentation does not describe a supported path back to the previous version beyond pinning the package yourself.
Where Streamlit is the different choice
The obvious comparison is Streamlit, and the difference is architectural rather than cosmetic. Streamlit's model re-runs the whole script from the top on every interaction, which is simple to reason about and produces short programs. Panel instead keeps a live object model in the server process and updates parts of it, which is why the README can promise bi-directional communication for clicks, selections and hover events, and why it can support both a reactive function style and direct callbacks.
The practical consequence is that Panel asks more of you up front. You think about which object holds state and which function reacts to it. In exchange, you are not limited to a linear script, and you can build multi-page apps with rich interactivity, which the README names as the reason the lower-level API exists at all.
Panel's other differentiator is the surrounding ecosystem. It is a member of HoloViz, and the README lists working integrations with Altair/Vega, Bokeh, Datashader, Deck.gl/pydeck, ECharts/pyecharts, Folium, HoloViews, hvPlot, plotnine, Matplotlib, Plotly, PyVista/VTK, Seaborn and ipywidgets. If you already use HoloViews or hvPlot, Panel is the natural interface layer. If you use none of them, that advantage largely disappears.
Maintenance, releases and the licence you inherit
The repository is not archived, and the last push was on 2026-09-21. Recent releases are v1.9.4 on 2026-08-17, v1.9.3 on 2026-06-01 and v1.9.2 on 2026-05-27, so the release cadence over that period is roughly one patch per quarter with a gap in July. The project is classified Development Status 5 - Production/Stable in pyproject.toml, which is the maintainers' own claim rather than an external assessment.
Upgrade cost is dominated by the Bokeh pin. Because each Panel release constrains Bokeh to a specific minor range, upgrading Panel usually means upgrading Bokeh in lockstep, and that can ripple into any other package sharing the environment. Budget for that as a scheduled change rather than a background patch.
The licence is BSD-3-Clause, stated as "BSD" in the pyproject.toml license field and as BSD-3-Clause in the repository. That is a permissive licence, which in practice means you can redistribute and modify it with the copyright notice retained. This is a description of the licence text, not legal advice; if you are embedding Panel in a distributed product, have your own counsel read LICENSE.txt.
Editorial conclusion
Panel fits Python users who already have plots and dataframes and want a browser interface without writing JavaScript, and it fits teams already inside the HoloViz stack. It is the wrong tool if you need a general-purpose web framework with routing, authentication and a database layer, since the Panel documentation does not present it as one. Before adopting it, check the bokeh pin in pyproject.toml against the rest of your environment, and confirm that the Python version you deploy on meets the requires-python floor of 3.12.
Frequently asked questions
Which Python versions does Panel support?
The pyproject.toml file sets requires-python to >=3.12 and lists classifiers for Python 3.12 through 3.15. An older interpreter will fail the install rather than run into trouble later.
How do I install Panel?
It is published to PyPI and to the pyviz, conda-forge and defaults conda channels, as shown in the README badge table. The README points to panel.holoviz.org for full installation instructions.
Does Panel work with the plotting libraries I already use?
The README lists integrations with Altair/Vega, Bokeh, Datashader, Deck.gl/pydeck, ECharts/pyecharts, Folium, HoloViews, hvPlot, plotnine, Matplotlib, Plotly, PyVista/VTK, Seaborn and ipywidgets. Each is exposed through a pane in the reference guides.
What licence is Panel released under?
The repository states BSD-3-Clause, and the pyproject.toml license field reads "BSD". The full text is in LICENSE.txt at the repository root.
Official sources
Add this badge to your README
If you maintain this project, the badge below links readers to this analysis and shows its maintenance status from the daily GitHub snapshot. Paste the markdown into your README; add ?metric=license or ?metric=stars to the image URL for a different field.
[](https://hysenlabs.com/projects/holoviz-panel)