Skip to content

Releases: holoviz/panel

Version 1.8.7

28 Jan 16:51

Choose a tag to compare

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.

🐛 Bug fixes

  • Rerun Tabulator page size calculation on resize (#8395)
  • Fix issues with monkey-patched versions of Plotly (#8397)

⏪ Reverted

  • Ensure edit_readonly resets both class- and instance-level parameters (#8371)
  • Validate ReactiveHTML missing id errors (#8382)

Version 1.8.6

26 Jan 17:20

Choose a tag to compare

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!

✨ Enhancements

  • Add placeholder parameter on FloatInput and IntInput (#8360)
  • Support for file extensions in FileDropper.accepted_filetypes (#8380)
  • Accept 2D arrays for stereo Audio (#8381)

🐛 Bug Fixes

  • Ensure collapsed Card still renders components to avoid child render issues (#8274)
  • ESM & React Components:
    • Fix errors when renamed parameters are linked on ESM components (#8357)
    • Fix rel_path resolution in ESM components (#8375)
    • Fix autoreload watcher setup for ESM apps (#8361)
    • Delay removal of ReactComponent children until new ones are mounted (#8358)
  • Ensure PathLike is accepted for requirements in pyodide conversion calls (#8366)
  • Ensure edit_readonly resets both class- and instance-level parameters (#8371)
  • Fix guest endpoint validation at root path (#8370)
  • Don't attempt to refresh access token if there is no active user session (#8384)
  • Ensure OAuth state for user is reset after failing to refresh access token (#8389)
  • Ensure config.design value is respected by Template (#8388)
  • Improve robustness of Tabulator.page_size inference (#8390)

⚠️ Compatibility & Deprecations

  • Added compatibility for pandas 3.0 (#8385)

📚 Documentation

  • Update Plotly example to prevent flicker on load (#8362)

🧪 Maintenance

  • Bump bokeh to 3.8.2 in Django example app (#8376)
  • Bump preact to 10.26.10 (#8367)
  • Update pre-commit hooks (#8363)

Version 1.8.5

30 Dec 16:08
54d68dc

Choose a tag to compare

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.

🐛 Bug Fixes

  • Fix error in notebook environments causing failure to run apps (#8334)
  • Prevent Tabulator from unintentionally reverting show_index=False back to True (#8333)
  • Ensure transformed param values are inherited by ESM components (#8338)
  • Ensure DataFrame objects can be referenced in Vega datasets (#8330)
  • Improve handling of code highlighting in Markdown pane (#8331)
  • Allow replacing child models inside ReactiveESM components (#8348)

📚 Documentation

  • Add how-to guides for converting Panel apps to desktop and mobile apps (#8349)
  • Update FastAPI integration instructions (#8337)
  • Publish updated Roadmap for Panel v2 and beyond (#8339)

🧪 Maintenance & Build

  • Use trusted publisher setup for NPM release
  • Bump Node.js version used in build

Version 1.8.4

02 Dec 17:44

Choose a tag to compare

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_content to 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.Action only triggers one event (#8305)
  • Fix conflict when using both ipywidgets and Tabulator extensions (#8308)
  • Ensure discrete events (e.g. button clicks) are scheduled after change events (#8311, #8319)
  • Reinstate application name as default index page title (#8313)
  • Redirect requests to the prefixed root when --prefix is set (#8321)
  • Ensure non-active Tabs are not clickable (#8324)

🧪 Maintenance & Infrastructure

  • Update Python/JS dependencies (#8318)
  • Fix type checking errors (#8314)
  • Pin jupyterlite-core temporarily (#8315)
  • Clean up pixi.toml project config (#8303)

Version 1.8.3

10 Nov 11:05

Choose a tag to compare

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

  • 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 to Vega pane (#8266)
  • Add official support for Python 3.14 (#8241)
  • Add render_policy="manual" option for JSComponent (#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.location wasn’t retained (#8283)
  • Fix Tabulator popup container rendering issues (#8247)
  • Resolve issues with pipeline next/previous buttons (#8273)
  • Ensure ESM compilation uses _esm path (#8245)
  • Fix CORS issue with turbine data URL in Pyodide (#8272)
  • Ensure ParamRef, ParamFunction, and ParamMethod do not override styling (#8264)
  • Fix toggle behavior in BootstrapTemplate sidebar (#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:

    • 4.2.224.2.25 (#8226)
    • 4.2.224.2.26 in multi-apps example (#8282)
  • Add setup-dev command for easier local development (#8277)

  • Improve internal _descendents resolution for parameterized classes (#8284)

  • Add __panel__ stub method to PyComponent (#8271)

Version 1.8.2

07 Oct 13:10

Choose a tag to compare

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.

✨ 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.html automatically when serving a static directory (#8222)

🐛 Bug Fixes

  • Ensure Tabulator does not break if other components don't correctly initialize (#8212)
  • Fix Pyodide jsnull value conversion in Bokeh JSON patches (#8217)
  • Fix regression causing column headers not to stretch properly across layout (#8219)
  • Ensure config.npm_cdn is 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.ipynb to reflect current Plotly version and correct doc URLs (#8214, #8203)
  • Add missing Anaconda logo to documentation (#8208)
  • Add how-to guide on using uv to distribute Panel apps and dependencies (#8205)

Version 1.8.1

16 Sep 16:29
v1.8.1
2acd688

Choose a tag to compare

Many 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)

Version 1.8.0

09 Sep 13:17

Choose a tag to compare

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.

🚀 Features

  • Support for inline JavaScript functions in ECharts and Tabulator via JSCode wrapper (#8162)
  • Add support for reconnecting to a session after network disruption (#8120)
  • Add support for AVIF images (#8164)
  • Add support for bundling local resources into WASM apps (#8181)

✨ Enhancements

  • Improve .from_param() behavior and error messages (#8047, #8079)
  • Add --reuse-sessions warm option to reduce session cold starts (#8087)
  • Enable event dispatch immediately after WebSocket connect (#8101)
  • Improve error message display in LiteralInput (#8102)
  • Allow hold usage from a thread (#8113)
  • Improve uniformity and consistency in Tabulator column configuration (#8127)
  • Trigger param.Event correctly on value change (#8148)
  • Allow registering external extension_cdn for JS resources (#8175)
  • Allow overriding the default_widgets on HoloViews pane (#8186)

🐛 Bug Fixes

  • Ensure Terminal resizes correctly (#8109)
  • Bundle correct AceEditor version (#8111)
  • Remove bokeh-sampledata dependency from Pyodide builds (#8138)
  • Correct resource handling when resources are symlinked (#8143)
  • Correct behavior when FileDownload resets cursor before reading (#8154)
  • Fix handling of NaT values (#8156)
  • Apply template design after rendering template (#8155)
  • Prevent select-all checkbox from being hidden in Material theme (#8147)
  • Fix handling of exclusive bounds in Param widgets (#8165)
  • Fix layout of Card headers with row flex mode (#8166)
  • Uncap height of children in scrollable Column layouts (#8167)
  • Fix errors in ECharts when chart has already been destroyed (#8168)
  • Fix Tabulator filter behavior with list-based filters (#8169)
  • Allow Card to overflow container (#8170)
  • Fix pyodide model syncing (#8174)

⚠️ Deprecations

  • Removed panel.io.model.hold (was moved to panel.io.document.hold in 1.6.0) (#8188)
  • Deprecated panel.chat.langchain.PanelCallbackHandler (to be removed in 1.9.0) (#8188)

📦 Compatibility & Infrastructure

  • Update component versions (#7447)
    • DeckGL version from 9.0.20 to 9.1.14
    • ECharts version from 5.6.0 to 6.0.0
    • KaTeX version from 0.6.0 to 0.16.22
    • Perspective version from 3.6.1 to 3.8.0
    • Plotly version from 3.0.1 to 3.1.0
    • Vega version from 5 to 6.1.2 and vega-lite dependency from 5 to 6.3.0
    • Vizzu version 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

  • Add guide for using WebSocket comms (#7952)
  • Update links for Tabulator (#8126)
  • Align component parameter reference documentation (#8152)

Version 1.7.5

22 Jul 12:43

Choose a tag to compare

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 warm option 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_throttled handling in Param panes (#8057)
  • Prevent AutocompleteInput from resetting when restrict=False (#8056)
  • Fix callback cleanup for --reuse_sessions mode (#8052)
  • Reset param.Event state on ESM components (#8054)
  • Allow Player components to start upon initialization (#8058)
  • Fix modal dialog stacking and focus behavior in VanillaTemplate (#8059, #8060)
  • Avoid errors in Tabulator when editing DataFrames with pd.NA values (#8068)
  • Add guard for undefined url in ImportedStyleSheet (#8071)
  • Ensure session token payload is correctly updated when reusing sessions (#8072)
  • Ensure --reuse-sessions caches the --index app correctly (#8073)
  • Add debounce logic to ModelChanged events in Pyodide to improve performance and prevent redundant updates (#8077)
  • Ensure Layoutable params propagate to HoloViews plots (#8078)
  • Fix regression in handling param.Action in .from_param() utility (#8079)
  • Ensure LoadingSpinner.visible correctly hides the component (#8081)
  • Ensure JSONEditor triggers on re-ordering of nodes (#8086)
  • Fix JSONEditor menu 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)

Version 1.7.4

15 Jul 14:00

Choose a tag to compare

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 bytes input to the PDF pane (#8044)
  • Add logout_url for 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

  • Ensure ReactComponent forces a re-render after render step (#8037)
  • Fix this.mouse bug in ECharts implementation (#8041)
  • Fix incorrect import path in Django integration docs (bokehjsdirbokehjs_path) (#8040)
  • Update Bokeh/FastAPI extra dependency pin to ensure compatibility (#8039)