The Panel 1.0 release is finally here and it brings a huge number of improvements. The largest improvements in this release come from an upgrade from Bokeh 2.x to Bokeh 3.x. Bokeh overhauled its internal layout engine and stylesheet handling, making applications significantly more performant and customizable going forward.
This release marks a huge step forward in the usability of Panel but is also just a first step in leveraging many of the new capabilities that the updated layout engine and design system affords. In the coming months we will continue to improve and polish the UI and UX and make it easier for you to extend Panel as needed.
For now we want to thank the many people that contributed to this release either by contributing directly or by testing and providing feedback. Many thanks to the core contributors @MarcSkovMadsen, @Hoxbro, @maximlt, @jbednar, @droumis and @philippjfr and the outside contributors @ahuang11, @cdeil, @MridulS, @AndrewMaged814, @midnighter and @wendrul.
Demo
To see an overview of the most exciting features in Panel 1.0 check out this interactive slideshow we have prepared.
Installation
To install panel 1.0 simply get it with pip:
pip install panel==1.0.2
or with conda:
conda install -c conda-forge panel==1.0.2
Migration
Some of the changes related to the new layout engine and design system will require small updates to your existing applications. To make this transition as smooth as possible we have provided an upgrade/migration guide.
Major Features
The three main features we want to highlight as part of this release are:
- Add new and highly performant layout engine, addressing many performance and layout issues (#4326, #4463, #4491, #4503, #4522, #4690)
- Add unified Design and Theme system (#4413, #4475, #4466, #4540, #4548, #4770, #4792, #4793, #4801)
- Implement support for passing parameters, widgets and bound functions by reference for simple and powerful reactivity (#4495, #4505, #4603, #4606)
New Components
This release also adds a number of exciting new components you can leverage in your applications:
- Add
Swipelayout (#3007) - Add
Switchwidget ([#4130](Add Switch widget and description parameter to widgets by philippjfr · Pull Request #4130 · holoviz/panel · GitHub)) - Add
Vizzupane (#4226, #4739) - Add
BrowserInfomodel to expose browser window and navigator APIs (#4533) - Add
BasicAuthprovider for quick password based auth (#4684) - Add
FloatPanellayout (#4707, #4711) - Add a
SlidesTemplatebased on reveal.js to create interactive presentations (#4798)
Major enhancements
There are also a number of major enhancements in this release that we are very excited about:
- Improved Markdown rendering (#4688)
- Add support for tooltips on widgets ([#4130](Add Switch widget and description parameter to widgets by philippjfr · Pull Request #4130 · holoviz/panel · GitHub), #4621, #4643)
- Ensure
.ipynband.mdbased apps can be used as--index(#4432) - Add support for selecting
formatandencodingfor Matplotlib image output and implemented responsive Image sizing (#4514) - Add support for icons on
Button(#4797) - Add generic
Imagepane that auto-detects the image filetype (#4551) - Add support for writing applications in Markdown (#4602)
- Improve support for inline resources for Jupyter (#3013, #4787)
- Add ability to reuse sessions to speed up rendering (#3679, #4658)
- Improve notebook resource and extension loading (#4752)
- Add ability to add global loading spinner to application(s) (#4659)
Documentation
The last major change we want to highlight is a complete overhaul of the documentation, moving from long and difficult-to-navigate user guides to distinct easily applied how-to guides along with separate, longer explanation sections. We also put in significant effort to ensure that most of our documentation can be run interactively in Pyodide or JupyterLite.
- Modernize documentation by using latest pydata-sphinx-theme (#4609, #4701)
- Add upgrade/migration guide (#4693)
- Add Explanation section (#2797, #3168, #4664)
- Migrate user guide to how-to guides (#4244, #4251, #4267, #4290, #4412, #4422, #4759, #4774)
- Completely overhaul App Gallery (#4047, #4565, #4574, #4598, #4683)
- Use pyodide rendering throughout documentation and add JupyterLite links (#4751)
Deprecations & API changes
Compatibility
- Bokeh 3 compatibility (#4098, #4117, #4129, #4140, #4150, #4275, #4467, #4435, #4441, #4449, #4448, #4508)
- Upgrade plotly.js to 2.18.0 (#4320)
- Upgrade Tabulator to 5.4 and optimize rendering (#4482](Update Tabulator to 5.4 and optimize rendering by philippjfr · Pull Request #4482 · holoviz/panel · GitHub))
- Upgrade Echarts to 5.4.1 (#4538)
- Upgrade pyodide (0.23.1) and pyscript versions (#4344)
- Add support for altair and vega-lite v5 (#4488)
- Add support for latest versions of ipywidgets (#4716, #4766, #4779)
Deprecations
- Deprecate
IDOMpane (#4293](Deprecate ReactTemplate, IDOM pane and Viewable.app by philippjfr · Pull Request #4293 · holoviz/panel · GitHub), #4323) - Deprecate
Viewable.app(#4293](Deprecate ReactTemplate, IDOM pane and Viewable.app by philippjfr · Pull Request #4293 · holoviz/panel · GitHub)) - Deprecate
Viewable.pprint(#4347) - Deprecate and remove
RGGPlot - Rename
AcetoCodeEditor(#4627)
API changes & Backward Compatibility
- Pandas is now only a (lazy) runtime dependency (#4411)
-
Tabulator.frozen_rowsnow respects the order of rows in the data instead of the order in which thefrozen_rowswere defined (#4482](Update Tabulator to 5.4 and optimize rendering by philippjfr · Pull Request #4482 · holoviz/panel · GitHub)) - Make
margindefaults consistent across widgets and panes (#4528) - Extension calls must specify all required extensions (#4562)
- The
.embedmethod now returns a Mimebundle object for rendering (#4791) - Remove
panel examplesCLI command and pyct dependency (#4691) - Expose all layout components in top-level API (#4696)
Other Enhancements
Configuration
- Allow to set the log level of the Admin logger (#3495)
- Add
pn.state.servedto simplify determining whether script is executed as an application or in an interactive session (#4252) - Add
pn.config.loading_indicatorto determine whether to show loading indicator by default (#4259)
Jupyter
- Improve startup, error handling and shutdown of Jupyter kernels (#4364)
- Log errors in JupyterLab preview to server logs (#4773)
- Support binary JS → Python communication in notebooks (#4635)
- Modify sys.path when running inside Jupyter Kernel (#4489)
Pyodide
- IPython
displaycompatibility in pyodide builds (#4270) - Ensure
panel convertrespectspn.config(#4359) - Fix notification support in Pyodide (#4387)
Miscelleanous
- Handle cancelling and empty value edit events on
Tabulator(#4343) - Add favicon to base template (#4626)
- Ensure
CrossSelectorfilters apply on each keystroke (#4339) - Do not re-create
Vega.selectionsobject unless selections changed (#4497) - Standardize parameter mapping APIs (#4386)
- Add
Plotly.link_figureparameter (#4333) - Add support for .JPEG file extension in the
JPGpane (#4532) - Make periodic callback
countera parameter (#4134) - Add Echarts events (#2174)
- Additional cache support (#4663, #4667)
Bug fixes
- Fix caching on undecorated Parameterized method (#4332)
- Ensure that global notification object can be used inside notebook callbacks (#4331)
- Ensure
hash_funcsare applied recursively in cache (#4334) - Fix cache
FIFOpolicy bug (#4789) - Fix specifying custom index with relative path (#4288)
- Fix issue reusing
FileDownloadmodel (#4328) - Fix
DeckGLtooltip handling (#4628) - Fix NumPy integer/floating checks on
Perspective(#4366) - Ensure
memrayprofiler temporary file is flushed (#4666) - Fix mimetype issue on windows (#4738)
- Fix
Plotlyundefined value errors for eventdata (#4355)
Tabulator
- Ensure updates to
Tabulatorformatter or editor updates model (#4296, #4781) - Ensure
Tabulatorinternal_index_mappingis updated on stream (#4292) - Ensure
Tabulatorheader filters aren’t treated as regex (#4423) - Ensure
Tabulatorstylesare re-applied when local pagination changes (#4795)
