NewYour coding agent can read the release notes before it upgrades.Set up the MCP server →
PyPI · #3485 most downloaded on PyPI
The powerful data exploration & web app framework for Python.
Last release 13 days ago
21 Sep 2026
Release timing varies
gaps range from 9 days to 2 months
Nearly every release is documented
notes for 60 of the last 60 stable releases
5 versions withdrawn
withdrawn after publishing
8 years old
478 releases · first in 2018
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
One column per quarter.
Panel 1.9.4 is a patch release focused on rendering robustness for ESM/React components, several Tabulator and Pipeline fixes, OAuth hardening, and st
Panel 1.9.4 is a patch release focused on rendering robustness for ESM/React components, several Tabulator and Pipeline fixes, OAuth hardening, and stylesheet/loading reliability improvements. It also adds support for movable Tabulator columns. Many thanks to @TheoMathurin, @rimsha152007-dotcom, @ebarkhordar, @SimonHeybrock, @ahuang11, @Kkkakania, @EltonChang1, @hoxbro, @MarcSkovMadsen, @Coderambling, @SuMayaBee, @youdie006, @kyo5uke, @ghostiee-11 and @philippjfr for contributing to this release.
Tabulator columns (#8685)panel-material-ui (#8686)Tabulator value events (#8714)Perspective objects (#8720)Tabulator starts and ends header filters (#8719)Tabulator row_content in panel-material-ui dynamic Tabs (#8697)Feed rendering all objects at once (#8667)Location sync mappings (#8660)Tabulator page size handling (#8657)Progress indicator height (#8652)Cache-Control: no-store on the Bokeh document page (#8636)oauth_extra_params to the OAuth authorization endpoint (#8635)Pipeline ready parameter and next button stay in sync after using the previous button (#8633)Pipeline previous button sets the correct stage in the graph (#8630)panel-live-server to docs Extensions gallery (#8703)FileDropper upload progress indicator documentation (#8684)Spacer reference notebook (#8681)Nothing published for this version
Nothing published for this version
Panel 1.9.3 is a patch release addressing several bug fixes for ReactiveESM components, OAuth handling, and dev mode document cleanup. Many thanks to
Panel 1.9.3 is a patch release addressing several bug fixes for ReactiveESM components, OAuth handling, and dev mode document cleanup. Many thanks to @Coderambling, @hoxbro and @philippjfr for contributing to this release.
ReactiveESM (#8617)hold context manager in threaded mode (#8619)pyrender function does not use globals() as context potentially breaking itself during execution (#8620)Nothing published for this version
Nothing published for this version
Nothing published for this version
A patch release addressing a small regression on ReactComponent causing the Document never to register as idle. Also fixes a memory leak related to tr
A patch release addressing a small regression on ReactComponent causing the Document never to register as idle. Also fixes a memory leak related to tracking components in non-server contexts. Thank you to @philippjfr for his contributions to this release.
A quick patch release addressing regressions in 1.9.0, fixing Button color styling and resolves several issues with ESM and React component lifecycle
A quick patch release addressing regressions in 1.9.0, fixing Button color styling and resolves several issues with ESM and React component lifecycle handling. Many thanks to @philippjfr and @hoxbro for their contributions to this release.
Button color not being respected (#8600)ready and has_finished compliance (#8602)ReactComponent ready promise handling (#8603)IconMixin rename override (#8604)Panel 1.9.0 delivers full typing compatibility with Param 2.4.0, finally ensuring that all parameters are fully typed. Additionally this release makes
Panel 1.9.0 delivers full typing compatibility with Param 2.4.0, finally ensuring that all parameters are fully typed. Additionally this release makes it possible to provide wildcard routes to pn.serve making it possible to support dynamic routing. It also includes a significant modernization of the widget API, introducing Widget.label as the canonical display label parameter and renaming button_type/button_style to color/variant for better alignment with panel-material-ui, which will be integrated within Panel in upcoming releases. The release also includes a range of Tabulator improvements, chat enhancements, security updates, and numerous bug fixes. Lastly, this release drops support for Bokeh 3.7.
Many thanks to the contributors to this release including: @philippjfr, @hoxbro, @ghostiee-11, @ahuang11, @AtharvaJaiswal005, @SKlerk, @TheoMathurin, @chucklay, @zhangdomi, @mvanhorn, @SuMayaBee, @forman, and @omyaaa1.
Widget.label parameter and treat name as an alias (#8328)button_type -> color and button_style -> variant (#8577)Feed type configurable on ChatFeed (#8582)selection and value_input to TextEditor widget (#8560)JSONEditor widget (#8444)widget.disabled getting stuck after rapid toggling (#8507)Trend indicator not working with date_range x-axis (#8509)ReactComponent initialization issues (#8552)DataFrame comparison in Tabulator.from_param (#8539)Tabulator scroll reset when filtering on patch (#8531)Tabulator from overwriting scroll position on style update (#8420)Gauge/ECharts crash when the ECharts library is not yet loaded (#8515)NotImplementedError message (#8536)Tabulator resize events (#8528)Widget.name was renamed to Widget.labelButton.button_type was renamed to Button.colorButton.button_style was renamed to Button.variantpanel-material-ui (#8596)pn.state.sync_busy in the busy indicator how-to guide (#8564)Nothing published for this version
Nothing published for this version
Panel 1.8.10 focuses on stability improvements across widgets, plotting integrations, and server behavior. It includes fixes for Tabulator serializati
Panel 1.8.10 focuses on stability improvements across widgets, plotting integrations, and server behavior. It includes fixes for Tabulator serialization, Param widget updates, Plotly and Vega regressions, and several UI issues. This release also improves compatibility with Bokeh 3.9, enhances error reporting when serving apps, and addresses a security issue in panel.js.
Many thanks to the contributors to this release including: @philippjfr, @SuMayaBee, @AtharvaJaiswal005, @hoxbro, @ghostiee-11, and @tmoulignier.
state.busy logic to avoid mismatches in busy state tracking (#8498)pn.config.cdn_root (#8512)Card header inputs from toggling collapse (#8442)DateRangeSlider incorrectly modifying both values with timezone-aware timestamps (#8455)Accordion panels are collapsed or expanded (#8460)link_axes after scroll and plot update (#8468)Tabulator when using mixed NaT datetime columns (#8491)_imgshape for image panes (#8485)ReactiveESM children render correctly (#8473)CodeEditor annotations are not overridden (#8505)EditableFloatSlider input is cleared (#8511)panel.js (#8501)watch=True in the bind_component guide (#8479)Nothing published for this version
Nothing published for this version
Nothing published for this version
Many thanks to @philippjfr and @hoxbro for their contributions.
Many thanks to @philippjfr and @hoxbro for their contributions.
Nothing published for this version
Nothing published for this version
Panel 1.8.8 focuses on stability, event handling correctness, Pyodide improvements, ESM robustness, and multiple UI fixes. It also introduces a new ex
Panel 1.8.8 focuses on stability, event handling correctness, Pyodide improvements, ESM robustness, and multiple UI fixes. It also introduces a new experimental freeze option for hold() to improve performance during batch updates. Many thanks to @AR21SM (first contribution), @AtharvaJaiswal005 (first contribution), @danielalanbates (first contribution), @DevilSpecial (first contribution), @emunsing (first contribution), @nojaf (first contribution), @SimonHeybrock (first contribution), @SuMayaBee (first contribution), @ahuang11, @Coderambling, @philippjfr, and @hoxbro for their contributions.
freeze support in hold()
Add a freeze=True option to defer expensive Bokeh model graph recomputation until the hold context exits. This can significantly improve performance when batch-updating many models.
(Marked experimental.) (#8417)Callback.unwatch() method with tests (#8453)widget.link() to properly support HoloViews streams (#8450)ReactComponent children render even when view initialization is slow (#8406)loading.css and es-module-shims (#8408)LaTeX rendering in Markdown pane under Pyodide (#8424)pathname changes (#8433)Video pane rejecting URLs with query parameters (#8440)Number and String indicators defaulting to black in dark theme (#8441).from_param() (#8445)pyodide to 0.29.3 (#8446)Nothing published for this version
Nothing published for this version
This patch release reverts two changes that were made in 1.8.6 that turned out to be more disruptive than expected. Additionally it ensures that Tabul
This patch release reverts two changes that were made in 1.8.6 that turned out to be more disruptive than expected. Additionally it ensures that Tabulator automatically recalculates page sizes on resize and resolves issues with patched versions of Plotly.
Nothing published for this version
This patch release includes several ESM and React-related fixes, UI behavior improvements, and enhanced robustness in form inputs and file handling. I
This patch release includes several ESM and React-related fixes, UI behavior improvements, and enhanced robustness in form inputs and file handling. It also bumps key dependencies and improves support for custom deployments. Thanks to @philippjfr, @maximlt, @emunsing, @TheoMathurin, @dalthviz and @hoxbro for their contributions to this release!
placeholder parameter on FloatInput and IntInput (#8360)FileDropper.accepted_filetypes (#8380)Audio (#8381)Card still renders components to avoid child render issues (#8274)PathLike is accepted for requirements in pyodide conversion calls (#8366)edit_readonly resets both class- and instance-level parameters (#8371)guest endpoint validation at root path (#8370)config.design value is respected by Template (#8388)Tabulator.page_size inference (#8390)Plotly example to prevent flicker on load (#8362)This release includes several fixes and enhancements for notebook stability, Tabulator behavior, ESM/ReactiveComponent handling, and Markdown renderin
This release includes several fixes and enhancements for notebook stability, Tabulator behavior, ESM/ReactiveComponent handling, and Markdown rendering. It also adds documentation updates for FastAPI integration, app conversion guides, and the Panel roadmap.
Tabulator from unintentionally reverting show_index=False back to True (#8333)datasets (#8330)Markdown pane (#8331)ReactiveESM components (#8348)Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Panel 1.8.4 includes key bug fixes and behavior improvements around event ordering, Tabulator interop, and Jupyter/Notebook usage. It also improves su
Panel 1.8.4 includes key bug fixes and behavior improvements around event ordering, Tabulator interop, and Jupyter/Notebook usage. It also improves support for async usage, validation, and app routing—plus quality-of-life enhancements for both developers and users. Thanks to @philippjfr, @hoxbro, @maximlt, @ahuang11, @MarcSkovMadsen, @TheoMathurin, @ruoyu0088, and @dieterweber for your contributions to this release!
Tabulator.row_content to be an async function (#8309)patch_value (#8312)NestedSelect (#8317)DataFrame (#8256)param.Action only triggers one event (#8305)ipywidgets and Tabulator extensions (#8308)--prefix is set (#8321)Tabs are not clickable (#8324)Panel 1.8.4 includes key bug fixes and behavior improvements around event ordering, Tabulator interop, and Jupyter/Notebook usage. It also improves support for async usage, validation, and app routing—plus quality-of-life enhancements for both developers and users. Thanks to @philippjfr, @hoxbro, @maximlt, @ahuang11, @MarcSkovMadsen, @TheoMathurin, @ruoyu0088, and @dieterweber for your contributions to this release!
Tabulator.row_content to be an async function (#8309)patch_value (#8312)NestedSelect (#8317)DataFrame (#8256)param.Action only triggers one event (#8305)ipywidgets and Tabulator extensions (#8308)--prefix is set (#8321)Tabs are not clickable (#8324)jupyterlite-core temporarily (#8315)pixi.toml project config (#8303)Nothing published for this version
Nothing published for this version
This patch release brings targeted UI fixes, improves Python and Django compatibility, and enhances the developer and contributor experience. It also
This patch release brings targeted UI fixes, improves Python and Django compatibility, and enhances the developer and contributor experience. It also includes fixes for Tabulator, Pyodide, templates, and app interactivity, along with several documentation and robustness improvements. Many thanks to @ahuang11, @hoxbro, @maximlt, @MarcSkovMadsen, @Coderambling and @philippjfr for their contributions to this release.
export() method to Vega pane (#8266)render_policy="manual" option for JSComponent (#8285)EditableTemplate (#8286)CodeEditor (#8262)pn.state.location wasn’t retained (#8283)next/previous buttons (#8273)_esm path (#8245)turbine data URL in Pyodide (#8272)ParamRef, ParamFunction, and ParamMethod do not override styling (#8264)BootstrapTemplate sidebar (#8268)README.md (#8287)convert.md (#8280)Nothing published for this version
Nothing published for this version
This patch release focuses on polishing the user experience, fixing regressions, and improving documentation, particularly around app deployment and T
This patch release focuses on polishing the user experience, fixing regressions, and improving documentation, particularly around app deployment and Tabulator interactivity. It includes several frontend and CSS tweaks, pyodide compatibility fixes, and two new deployment guides for Anaconda Notebooks and PythonAnywhere. Thanks to @philippjfr, @maximlt, @etihwo, @MarcSkovMadsen, and @Coderambling for their contributions to this release.
JSCode (#8204)EditableTemplate (#8206)index.html automatically when serving a static directory (#8222)jsnull value conversion in Bokeh JSON patches (#8217)config.npm_cdn is respected (#8233)Plotly.ipynb to reflect current Plotly version and correct doc URLs (#8214, #8203)uv to distribute Panel apps and dependencies (#8205)Nothing published for this version
Nothing published for this version
Many thanks to @ATL2001 (first contribution), @Coderambling, @philippjfr, and @hoxbro for their contributions.
Many thanks to @ATL2001 (first contribution), @Coderambling, @philippjfr, and @hoxbro for their contributions.
Nothing published for this version
Nothing published for this version
Deprecated panel.chat.langchain.PanelCallbackHandler (to be removed in 1.9.0)
This release brings a wide range of new features, enhancements, and compatibility improvements. Highlights include support for JSCode in ECharts and Tabulator, reworked WebSocket reconnection, and the ability to bundle resources into WASM apps, and numerous bug fixes to improve stability across components and templates. It also includes compatibility updates for Bokeh 3.8 and several improvements for use in Pyodide, JupyterLite, and authentication-based deployments. Many thanks to our returning contributors @dalthviz and @etihwo, a very warm welcome to our new contributors @c-meier and @flxmr and as usual many thanks to our core team including @maximlt, @hoxbro, @ahuang11, @MarcSkovMadsen and @philippjfr.
ECharts and Tabulator via JSCode wrapper (#8162)AVIF images (#8164).from_param() behavior and error messages (#8047, #8079)--reuse-sessions warm option to reduce session cold starts (#8087)LiteralInput (#8102)hold usage from a thread (#8113)Tabulator column configuration (#8127)param.Event correctly on value change (#8148)extension_cdn for JS resources (#8175)default_widgets on HoloViews pane (#8186)Terminal resizes correctly (#8109)AceEditor version (#8111)bokeh-sampledata dependency from Pyodide builds (#8138)FileDownload resets cursor before reading (#8154)NaT values (#8156)select-all checkbox from being hidden in Material theme (#8147)Param widgets (#8165)Card headers with row flex mode (#8166)Column layouts (#8167)ECharts when chart has already been destroyed (#8168)Tabulator filter behavior with list-based filters (#8169)Card to overflow container (#8170)pyodide model syncing (#8174)panel.io.model.hold (was moved to panel.io.document.hold in 1.6.0) (#8188)panel.chat.langchain.PanelCallbackHandler (to be removed in 1.9.0) (#8188)DeckGL version from 9.0.20 to 9.1.14ECharts version from 5.6.0 to 6.0.0KaTeX version from 0.6.0 to 0.16.22Perspective version from 3.6.1 to 3.8.0Plotly version from 3.0.1 to 3.1.0Vega version from 5 to 6.1.2 and vega-lite dependency from 5 to 6.3.0Vizzu version from 0.15 to 0.17.1Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Nothing published for this version
Fix XSS vulnerabilities in login and OAuth error templates by escaping user-controlled input
This patch release brings a number of important bug fixes and refinements, including improved modal behavior, Param integration fixes for ESM, and security hardening of authentication templates. Thanks to @harmvanderheijden, @marcskovmadsen, @maximlt, and @philippjfr for their contributions.
.from_param() error messages (#8047)--reuse-sessions warm option to preload and cache apps before first use (#8087)value_throttled handling in Param panes (#8057)AutocompleteInput from resetting when restrict=False (#8056)--reuse_sessions mode (#8052)param.Event state on ESM components (#8054)Player components to start upon initialization (#8058)Tabulator when editing DataFrames with pd.NA values (#8068)url in ImportedStyleSheet (#8071)--reuse-sessions caches the --index app correctly (#8073)ModelChanged events in Pyodide to improve performance and prevent redundant updates (#8077)Layoutable params propagate to HoloViews plots (#8078)param.Action in .from_param() utility (#8079)LoadingSpinner.visible correctly hides the component (#8081)JSONEditor triggers on re-ordering of nodes (#8086)JSONEditor menu option to improve usability (#8085)Nothing published for this version
Nothing published for this version
Escape error messages shown on the OAuth error page fixing XSS vulnerability
This patch release introduces small but impactful security, compatibility, and usability improvements. It enhances OAuth behavior, adds byte support for the PDF pane, and fixes several rendering and import issues across backends and components. Thanks to @ahuang11, @dalthviz, @MarcSkovMadsen, and @philippjfr for their contributions.
bytes input to the PDF pane (#8044)logout_url for Auth0 to OAuth error page template (#8036)--static-dirs (#8042)This patch release includes several critical stability improvements, JavaScript race condition fixes, and developer experience enhancements. It also i
This patch release includes several critical stability improvements, JavaScript race condition fixes, and developer experience enhancements. It also introduces small but helpful UI features such as exception copying and better error feedback in CLI and ESM workflows. Many thanks to contributors @etihwo, @bsdz, @Coderambling, @hoxbro, @philippjfr, and @MarcSkovMadsen.
Tabulator multi-index columns (#8008)panel compile and reactive ESM workflows (#8012, #8010)DeckGL during resize (#8031)client_comm is undefined in some JS execution contexts (#8030, #8033)MultiChoice widget (#8014)useState callbacks are registered only once (#8023)Path objects in stylesheet definition (#8026)Nothing published for this version
Your coding agent can read these notes before it upgrades. Set up the MCP server →