Changelog History
Page 2
-
v1.8.4 Changes
December 02, 2025π 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!
β¨ Enhancements
- β Add config toggle to disable Bokeh validation (#8294)
- π Allow
Tabulator.row_contentto be an async function (#8309) - π Improve documentation and validation of
patch_value(#8312) - Propagate layout-related parameters to
NestedSelect(#8317)
π π Bug Fixes
- π Fix crash when emptying a
DataFrame(#8256) - Ensure new Panel instance is always loaded (#8293)
- π Improve robustness of Bokeh/Panel notebook integration (#8289)
- π Fix notebook reading errors by explicitly using UTF-8 encoding (#8304)
- Ensure
param.Actiononly triggers one event (#8305) - π Fix conflict when using both
ipywidgetsandTabulatorextensions (#8308) - β± Ensure discrete events (e.g. button clicks) are scheduled after change events (#8311, #8319)
- 0οΈβ£ Reinstate application name as default index page title (#8313)
- π Redirect requests to the prefixed root when
--prefixis set (#8321) - Ensure non-active
Tabsare not clickable (#8324)
π§ π§ͺ Maintenance & Infrastructure
-
v1.8.3 Changes
November 10, 2025π 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.
β¨ Enhancements
- 0οΈβ£ Align CSS variables between default and dark themes (#8248)
- Ensure behavior of dynamically served apps is aligned with file based apps (#8249)
- β Add
export()method toVegapane (#8266) - Add official support for Python 3.14 (#8241)
- β Add
render_policy="manual"option forJSComponent(#8285) - Disable text selection when editing in
EditableTemplate(#8286) - Prevent full text selection when replacing input values on
CodeEditor(#8262)
π π Bug Fixes
- π Fix FastAPI bug where
pn.state.locationwasnβt retained (#8283) - π Fix Tabulator popup container rendering issues (#8247)
- Resolve issues with pipeline
next/previousbuttons (#8273) - Ensure ESM compilation uses
_esmpath (#8245) - π Fix CORS issue with
turbinedata URL in Pyodide (#8272) - Ensure
ParamRef,ParamFunction, andParamMethoddo not override styling (#8264) - π Fix toggle behavior in
BootstrapTemplatesidebar (#8268) - Minor robustness improvements for Bokeh model interop (#8270)
π π Documentation
- π Minor enhancements to the Panel Gallery deployment (#8240)
- β‘οΈ Update Django integration docs (#8252)
- Clarify setup instructions (#8255)
- π Fix typo and layout issue in
README.md(#8287) - π Fix unclosed code block in
convert.md(#8280)
π§ͺ Infrastructure & Developer Experience
β Remove Bokeh metadata workaround related to Tornado (#8243)
β¬οΈ Bump Django versions in example apps:
β Add
setup-devcommand for easier local development (#8277)π Improve internal
_descendentsresolution for parameterized classes (#8284)Add
__panel__stub method toPyComponent(#8271)
-
v1.8.2 Changes
October 07, 2025This 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.
β¨ Enhancements
- π Allow custom control over Tabulator editable rows using
JSCode(#8204) - π Improve UI discoverability on
EditableTemplate(#8206) - Set pointer cursor on "Connection Lost" toast notification (#8209)
- Serve
index.htmlautomatically when serving a static directory (#8222)
π π Bug Fixes
- Ensure Tabulator does not break if other components don't correctly initialize (#8212)
- π Fix Pyodide
jsnullvalue conversion in Bokeh JSON patches (#8217) - π Fix regression causing column headers not to stretch properly across layout (#8219)
- Ensure
config.npm_cdnis respected (#8233) - Ensure bundled pyodide resources use correct path separator (#8230)
- Ensure pyodide resource bundle is only generated if necessary (#8234)
- Ensure pyodide session is registered as loaded (#8235)
π π Documentation
- Add how-to guide on deploying Panel apps on Anaconda Notebooks (#8207)
- Add how-to guide on deploying Panel apps on PythonAnywhere (#8216)
- β‘οΈ Update
Plotly.ipynbto reflect current Plotly version and correct doc URLs (#8214, #8203) - β Add missing Anaconda logo to documentation (#8208)
- β Add how-to guide on using
uvto distribute Panel apps and dependencies (#8205)
- π Allow custom control over Tabulator editable rows using
-
v1.8.1 Changes
September 16, 2025Many thanks to @ATL2001 (first contribution), @Coderambling, @philippjfr, and @hoxbro for their contributions.
β¨ Enhancements
- β Add configuration to disable container popup (#8200)
π Bug Fixes
- Ensure Tabulator empty column has no width (#8193)
- β Add UTC timezone to default time for croniter (#8199)
π Documentation
- π Update indicators_performance.md to fix typo (#8192)
-
v1.8.0 Changes
September 09, 2025This release brings a wide range of new features, enhancements, and compatibility improvements. Highlights include support for
JSCodein 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.π Features
- π Support for inline JavaScript functions in
EChartsandTabulatorviaJSCodewrapper (#8162) - β Add support for reconnecting to a session after network disruption (#8120)
- β Add support for
AVIFimages (#8164) - β Add support for bundling local resources into WASM apps (#8181)
β¨ Enhancements
- π Improve
.from_param()behavior and error messages (#8047, #8079) - β Add
--reuse-sessions warmoption to reduce session cold starts (#8087) - Enable event dispatch immediately after WebSocket connect (#8101)
- π Improve error message display in
LiteralInput(#8102) - π Allow
holdusage from a thread (#8113) - π Improve uniformity and consistency in
Tabulatorcolumn configuration (#8127) - Trigger
param.Eventcorrectly on value change (#8148) - π Allow registering external
extension_cdnfor JS resources (#8175) - π Allow overriding the
default_widgetsonHoloViewspane (#8186)
π π Bug Fixes
- Ensure
Terminalresizes correctly (#8109) - Bundle correct
AceEditorversion (#8111) - β Remove
bokeh-sampledatadependency from Pyodide builds (#8138) - Correct resource handling when resources are symlinked (#8143)
- Correct behavior when
FileDownloadresets cursor before reading (#8154) - π Fix handling of
NaTvalues (#8156) - Apply template design after rendering template (#8155)
- Prevent
select-allcheckbox from being hidden in Material theme (#8147) - π Fix handling of exclusive bounds in
Paramwidgets (#8165) - π Fix layout of
Cardheaders withrowflex mode (#8166) - Uncap height of children in scrollable
Columnlayouts (#8167) - π Fix errors in
EChartswhen chart has already been destroyed (#8168) - π Fix
Tabulatorfilter behavior with list-based filters (#8169) - π Allow
Cardto overflow container (#8170) - π Fix
pyodidemodel syncing (#8174)
π β οΈ Deprecations
- β Removed
panel.io.model.hold(was moved topanel.io.document.holdin 1.6.0) (#8188) - π Deprecated
panel.chat.langchain.PanelCallbackHandler(to be removed in 1.9.0) (#8188)
π¦ Compatibility & Infrastructure
β‘οΈ Update component versions (#7447)
DeckGLversion from 9.0.20 to 9.1.14EChartsversion from 5.6.0 to 6.0.0KaTeXversion from 0.6.0 to 0.16.22Perspectiveversion from 3.6.1 to 3.8.0Plotlyversion from 3.0.1 to 3.1.0Vegaversion from 5 to 6.1.2 and vega-lite dependency from 5 to 6.3.0Vizzuversion from 0.15 to 0.17.1
β¬οΈ Drop support for Bokeh 3.5 and 3.6 (#8116)
Full compatibility with Bokeh 3.8 (#8160)
π π Documentation
- π Support for inline JavaScript functions in
-
v1.7.5 Changes
July 22, 2025π 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.
β¨ Enhancements
- π Improve
.from_param()error messages (#8047) - β Add
--reuse-sessions warmoption to preload and cache apps before first use (#8087)
π Security
- π Fix XSS vulnerabilities in login and OAuth error templates by escaping user-controlled input (#8049)
π Bug Fixes
- π Fix
value_throttledhandling in Param panes (#8057) - Prevent
AutocompleteInputfrom resetting whenrestrict=False(#8056) - π Fix callback cleanup for
--reuse_sessionsmode (#8052) - Reset
param.Eventstate on ESM components (#8054) - π Allow
Playercomponents to start upon initialization (#8058) - π Fix modal dialog stacking and focus behavior in VanillaTemplate (#8059, #8060)
- Avoid errors in
Tabulatorwhen editing DataFrames withpd.NAvalues (#8068) - β Add guard for undefined
urlinImportedStyleSheet(#8071) - β‘οΈ Ensure session token payload is correctly updated when reusing sessions (#8072)
- Ensure
--reuse-sessionscaches the--indexapp correctly (#8073) - β Add debounce logic to
ModelChangedevents in Pyodide to improve performance and prevent redundant updates (#8077) - Ensure
Layoutableparams propagate to HoloViews plots (#8078) - π Fix regression in handling
param.Actionin.from_param()utility (#8079) - Ensure
LoadingSpinner.visiblecorrectly hides the component (#8081) - Ensure
JSONEditortriggers on re-ordering of nodes (#8086) - π Fix
JSONEditormenu option to improve usability (#8085)
π Documentation
- Add websocket communication how-to guide to documentation (#7952)
- β Add note about increasing proxy buffer size for OAuth behind reverse proxies (#8084)
π§ Maintenance
- π Fix gallery deployment automation (#8055)
- π Improve
-
v1.7.4 Changes
July 15, 2025π 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.
β¨ Enhancements
- β Add support for
bytesinput to thePDFpane (#8044) - β Add
logout_urlfor Auth0 to OAuth error page template (#8036)
π Security
- β Add authentication to files served from
--static-dirs(#8042) - Escape error messages shown on the OAuth error page fixing XSS vulnerability (#8043)
π Bug Fixes
- β Add support for
-
v0.14.1 Changes
Date: 2022-10-28
π This release primarily addresses regressions introduced in 0.14.0 and various long standing bugs. Many thanks to external contributors @liu-kan and @KedoKudo and the maintainers @Hoxbro, @maximlt and @philippjfr for contributing a number of fixes.
Minor enhancements
- π Improve support for
requestsin pyodide (#3973) - β Add option to clear value of DatetimePicker (#3990)
- β Add support for hashing dates in pn.cache (#4004)
- β Silence
EMPTY_LAYOUTwarnings (#4056)
Compatibility
- π Fix Jupyterlite and latest PyScript compatibility (#4040)
π Bugs
Webassembly conversion
- Correctly handle resource mode in when converting to WebAssembly (#3967)
Jupyter and Server
- Correctly handle future exceptions on threads (#3977)
- π Fix
panel serveindex template (#3980) - Do not error if
curdochas been destroyed (#3994) - Ensure extensions loaded in jupyter kernel are served by StaticHandler (#4000)
- π Various fixes for OAuth handling with
pn.serve(#4006) - π Fix bug in
on_loadcallback exception handling (#4007) - Ensure periodic callbacks are only started on main thread (#4011)
- Ensure jupyter server extension handles explicit
root_dir(#4029) - Ensure futures are correctly awaited when executed on thread (#4031)
Components
- Ensure
Tabulatorhandles filtering on edited values correctly ifshow_index=False(#3988, #4016) - Ensure
Tabulatordeclares numeric sorter for numeric dtypes (#3999) - π Fix regression initializing
DiscreteSliderwith non-integer value (#4009) - Ensure that template.config.raw_css is correctly applied (#4018)
- π Fix handling
MenuButtonclicks whensplit=True(#4021) - Ensure styling on
Tabulatorwith empty DataFrame does not error (#4028) - π Allow changing
levelonDebuggerwidget (#4057
- π Improve support for
-
v0.14.0 Changes
Date: 2022-09-30
π This release focuses on three main themes:
- π Support for running Panel apps entirely in the browser using WebAssembly (via Pyodide and PyScript)
- π Improvements in the app-user experience by making it easier to build responsive and performant applications
- π Improvements in the developer experience through static typing and docstrings.
π Many, many thanks to everyone who filed issues or contributed to this release. In particular we would like to thank @janimo, @xavArtley, @thuydotm, @jmosbacher, @dmarx, @2WoLpH, @ipopa144, @sdc50 for contributions and @philippjfr, @Hoxbro, @maximlt, and @MarcSkovMadsen for ongoing maintenance and development.
π Features
- β Add support for converting Panel apps to pyscript/pyodide (#3817, #3830, #3851, #3856, #3857, #3858, #3860, #3861, #3863, #3864, #3868, #3878)
- π Manage our own CDN to improve performance and reliability for delivering JS payloads (#3867, #3870)
- β Add ability to
defer_loadof components (#3882) - β Add
pn.widgethelper function (#1826, #3589) - β Add
config.exception_handlerto easily capture, log and notify users about errors (#3893) - π Implement
pn.cachefunction for memoization support (#2411) - π Rewrite server extension to run Panel applications in kernels so that previews run in the same environment as the deployed app (#3763)
- β Add ability to define authorization callback (#3777)
- π Support memray profiler (#3509)
- β Add liveness endpoint (#3832)
- β Add ability to configure exception handler (#3896)
β¨ Enhancements
- Ensure OAuth redirects to requested app and retains query arguments (#3555)
- β Add extension entry point (#3738)
- β‘οΈ Update Admin Logs page to use
Tabulator(#3694) - Ensure
location.unsyncunsets query params (#3806) - π Allow None value on numeric sliders and
LiteralInput(#3174) - π Allow serving admin panel with
pn.serve(#3798) - π Improve
ReactiveHTMLloop support and validation (#3813) - π Support declaring
Perspective.plugin_configpane (#3814) - Do not flicker busy indicator during
--autoreloadcheck (#3804) - π Improve robustness of
state.curdocin threaded and async contexts (#3776, #3810, #3834) - π Support datetime bounds for
DatetimePickerandDatetimeRangePicker(#3788) - π Allow setting the Oauth provider using environment variables (#3698)
- Implement
Player.value_throttled(#3756) - Ensure that URL query parameters are preserved during OAuth (#3656)
- π Improve
Markdowncode syntax highlighting (#3758) - Ensure components do not re-render if
backgroundorloadingparameters change (#3599) - β Add ability to define admin dashboard plugins (#3668)
- Do not calculate embed state for disabled widgets (#3757)
- β Add hard bounds to editable sliders (#3739)
- β Add bundling of shared resources (#3894)
- β Add
Tabulatoras defaultparam.DataFramewidget (#3912)
π Documentation
- π Overhaul documentation (#3568)
- π Improve Fast Template docstrings (#3570)
- π Reorganize docs and convert static notebooks to Markdown (#3875, #3833)
- β Add DevelopingCustomModels to the webpage (#3710)
- π Improve typing (#3561, #3562, #3592, #3604, #3714, #3729)
β‘οΈ Compatibility & Version updates
- π Support ipywidgets>=8.0 (#3782)
- β¬οΈ Bump jsoneditor package (#3838)
- β¬οΈ Upgrade to Tabulator 5.3.2 (#3784)
- π Improve Django compatibility (#3843, #3835)
- β Remove all usage of deprecated
Pane
π Bugs
Server
- Ensure closed websocket does not cause errors
- π Handle session and websocket close cleanly (#3769)
- π Fix prefix handling for admin page (#3809)
- π Support admin dashboard in multi-process deployments (#3812)
- π Improve document cleanup when not invoked using
server_destroy(#3842) - Ensure
pn.state.executedispatches immediately if possible (#3859) - π Ensure autoload.js resources are appropriately prefixed (#3873)
Notebook
- π Fix support for copying cells and creating new views in JupyterLab (#3652)
- β Ensure output renders in VSCode notebook with latest ipywidgets (#3765)
- π Resolve issues with Jupyter slowdown due to event_loop patching on Windows (#3770)
Tabulator
- Do not re-render
Tabulatoroncss_classesorbackgroundchange (#3598) - β‘οΈ Ensure expand icon updates on
Tabulator.expandedchange (#3703) - β‘οΈ Update
pageParameter when pagination is 'local' (#3704) - Do not apply
sortersonTabulatorcell edits (#3744) - Ensure
Tabulator.controlsrenders (#3768) - Ensure correctness of event row and selection indices in
Tabulator(#3771, #3841) - π Fix issues with frontend and backend sorters being out of sync in Tabulator (#3825, #3839)
- π Fix default values of a list header filter in
Tabulator(#3826) - π Fix the edit event with a python filter in
Tabulator(#3829) - Disable client-side date filtering on
Tabulator(#3849) - π Support editing of pandas masked array dtypes in
Tabulator(#3850) - π Fix issues editing a cell when client-side filtering applied (#3852)
- Do not recompute data when local pagination is enabled (#3854)
- Don't skip filtering when the column name is undefined (#3862)
Misc
- π Fix
FileInput.save(#3579) - π Fix issues with
Matplotlib.high_dpioption (#3591, #3594) - Ensure layout recomputes on
HTML/Markdownre-rerender (#3616) - π Allow overriding all widget parameters on
Parampane (#3754) - Ensure
DatePickerstart/end are transformed when jslinked (#3759) - Ensure notifications can be enabled without a template (#3820)
- Ensure
ReactiveHTMLinline callbacks on loop variables return correct node (#3840) - Ensure that
Perspectivedoes not take precedence on empty dict (#3936) - π Improve
sizing_modebehavior when width/height are specified (#3955) - Do not load notyf resources unless notifications are enabled (#3958)
-
v0.13.1 Changes
Date: 2022-05-20
β¨ Enhancements
- β Add repr to cell and edit events (#3434)
- π Improvements for pyodide handling (#3444, #3508, #3511)
- β Add support for
Plotlyanimation frames (#3449) - Implement single and multi-selection in Vega pane (#3470, #3499, #3505)
- β Add typehints to help developers and users (#3476)
- β Add
pn.state.executemethod to run callbacks in the right context (#3550) - Add support for asynchronous
on_edit/on_clickTabulator callbacks (#3550) - β Add
DatetimeRangeSliderwidget (#3548)
π Bug fixes
- π Fix pyodide array buffer conversion (#3409)
- π Allow
placeholderto be updated onTextEditor(#3427) - π Fix issues editing data in sorted columns (#3431)
- Ensure bokeh correctly detects whether
HTML/Markdowncontains latex (#3438) - Ensure notifications work on server created with
pn.serveand.show(#3445) - Replace slickgrid background image in custom
FastTemplateCSS (#3461) - π Ensure
param.Arrayis synced correctly inReactiveHTML(#3456) - Ensure selection on filtered
Tabulatordoes not raise out-of-bounds error (#3462) - β‘οΈ Ensure updating
Tabulatordoes not reset scroll position (#3450) - π Various fixes for
FastTemplateCSS (#3464) - Ensure
Tabulatoron_clickandon_editevents return correct row when paginated (#3410) - π Fix broken JupyterLab preview (#3469)
- Skip
Tabulatorrow selection when clicking on expand button (#3474) - Ensure overflow in
MaterialTemplateis not clipped (#3492) - π Allow providing
--indexfor directory style apps (#3493) - Ensure Tabulator expanded rows are sized correctly after re-render (#3507)
- π Make CodeHandler robust to document that has been destroyed (#3510)
- π Do not sync
DataFramewidgetsortersparameter with bokeh model (#3527) - Ensure that HoloViews callback events are not auto-dispatched (#3528)
- β‘οΈ Ensure non-updateable
Panecan be updated insideTabs(#3532) - π Fix slowdown of JupyterLab on Windows (#3531)
- π Fix issue with inverted data when editing a cell in a sorted Tabulator column (#3531)
- Ensure
Tabulatorhas correct layout after re-render (#3536) - π² Do not log events generated by admin page on the admin page (#3539)
- π Fix Tabulator events when the original column is not a string (#3541)
π Documentation