This minor release packs a punch both in terms of features, the number of enhancements and bug fixes and perhaps most importantly the addition of a set of tutorials that aim to get novices up-to-speed. The main new feature is a so called EditableTemplate which allows arranging dashboards using a drag-and-drop interface and also has strong integration with JupyterLab previews to go from a notebook to a deployed app without having to worry about writing layout code. Next, this release includes a number of new widgets (NestedSelect, DateRangePicker, ButtonIcon), layouts (Feed) and panes (Textual, WebP), and overhauls the autoreload feature with faster and more robust support for reloading entire modules. Lastly this release, along with Param 2.1.0, continues to build on the new reactive expression API making it easy to write reactive expressions and pipelines including support for streaming data with generators. We really appreciate all the work that went into this release and especially want to call out @MarcSkovMadsen's effort in putting together the new tutorial materials. There's more work to do but it's a huge step forward and we're excited to hear your feedback. We want to extend a special thanks to our amazing new crop of new contributors including @atisor73, @OSuwaidi, @suryako, @Davide-sd, @doraaki, @mayonnaisecolouredbenz7, @CTPassion, @j01024, @l3ender and @Coderambling. Next we want to recognize our returning contributors @vaniisgh, @cdeil, @limx0m, and @TheoMaturin, and finally the dedicated crew of core contributors which include @maximlt, @hoxbro, @MarcSkovMadsen, @ahuang11, @mattpap and @philippjfr.
Features
- Add
EditableTemplateto support dashboard builder UI in Jupyter (#5802) - Add
ChatAreaInputas default text input widget forChatInterface(#6379) - Add
NestedSelectwidget (#5791, #6011) - Add Panel tutorials (#5525, #6208, #6212, #6388, #6425, #6466, #6491)
- Add
DateRangePickerwidget (#6027) - Add
Feedlayout and use it as layout forChatFeed(#6031, #6296) - Add
WebPpane (#6035) - Add
ButtonIcon(#6138) - Add
Textualpane (#6181)
Enhancements
- Improve
--autoreloadby using watchfiles and selectively reloading packages (#5894, #6459)
Load loading indicator from file instead of inlining (#6112) - Allow providing additional stylesheets in
card_params(#6242) - Add
scrolloptions to permanently toggle on layouts (#6266) - Allow choosing position of frozen columns on
Tabulator(#6309) - Add help message on
ChatFeed(#6311) - Ensure CSS can be applied to every aspect of
ChatMessage(#6346) - Add HoloViz logos as
ChatMessageavatars (#6348) - Add
gapparameter toFlexBox(#6354) - Set default
stepofDatetimeRangeSliderto 1 minute (#6373) - Add support for passing objects reference to
FlexBox(#6387) - Allow editable sliders to be embedded (#6391)
- Add
messageintocss_classestoChatMessagemarkup (#6407) - Allow appending objects to the
ChatMessageheader & footer (#6410) - Add ability to declare icon label (#6411)
- Add title and settings and fix datetime to
Perspective(#6482) - Warn user if loading extension in VSCode or Colab without
jupyter_bokeh(#6485) - Throttle updates to Boolean indicators (#6481)
- Add
ParamRefbaseclass forParamFunctionandParamMethod(#6392) - Add ability to Skip
Param<Ref|Function|Method>updates (#6396) - Add
Param<Ref|Method|Function>andReactiveExprto panes module (#6432) - Set up
param.rxdisplay accessor on import (#6470) - Allow using Carto tiles in
DeckGL(#6531) - Improve
VTKJSbinary serialization (#6559) - Ensure component CSS is pre-loaded if possible, avoiding flicker on load (#6563)
Styling
- Ensure navbar toggle icon is correct color in
BootstrapTemplate(#6111) - Change
loadingbackground filters to work better in dark themes (#6112) - Improve styling of
FileInputwidget (#6479) - Improve Jupyter Preview error handling and error template (#6496)
- Add scale animation to icons on hover and click (#6376)
- Redesign index pages (#6497)
- Improve
Tabulatoreditor text color inFastdesign (#6512) - Ensure
BootstrapTemplatehamburger icon is white (#6562)
Compatibility & Version Updates
- Bump
Perspectiveversion to 2.9.0 (#5722) - Upgrade to Bokeh 3.4.x (#6072)
- Upgrade
Vizzuto 0.9.3 (#6476) - Bump
JSONEditorversion to 10.0.1 (#6477) - Upgrade to PyScript Next and Pyodide 0.25.0 in
panel convert(#6490) - Bump vtk.js version to 30.1.0 (#6559)
Bug fixes
- Add resize handler for
FloatPanel(#6201) - Fix serving of global template in notebook (#6210)
- Ensure
Tabulatorrenders in collapsedCard(#6223) - Fix issues with
VTK,VTKVolumeandVTKJSdue to webgpu renderer (#6244) - Ensure
ChatInterfacerespect supplied default user (#6290) - Ensure
HTMLand other markup panes can be emptied (#6303) - Ensure
ChatMessageinternals correctly respectDesign(#6304) - Ensure collapsed
Carddoes not cause stretching (#6305) - Ensure notebook preview always uses server resources (#6317)
- Remove animation from loading spinner without spin (#6324)
- Ensure model is only added/removed from Document once (#6342)
- Ensure
loading_indicatorresets when configured with context manager (#6343) - Fix modal overflow and resizing issues (#6355)
- Ensure that ripple matches notification size (#6360)
- Fully re-render
CodeEditoron render calls ensuring it displays correctly (#6361) - Ensure
FileDownloadbutton has correct height (#6362) - Ensure
HTMLmodel is redrawn ifstylesheetsis emptied (#6365) - Allow providing custom template (#6383)
- Ensure
Debuggerrenders without error (#6423) - Ensure
ChatMessageheaderupdates dynamically (#6441) - Ensure pending writes are dispatched in order and only from correct thread (#6443)
- Ensure layout reuses model if available (#6446)
- Improved exception handler in unlocked message dispatch (#6447)
- Fix display of interactive
Matplotlib(#6450) - Ensure streaming
ChatMessageonChatInterfaceand mentionserialize(#6452) - Ensure
Plotlypane renders and hides correctly inCard(#6468) - Fix issues rendering widget components with
Fastdesign (#6474) - Fix binary serialization from JS -> Pyodide (#6490)
- Avoid overeager garbage collection (#6518)
- Fix floating point error in
IntRangeSlider(#6516) - Load JS modules from relative path (#6526)
- Ensure no events are dispatched before the websocket is open (#6528)
- Ensure
Markdownparsing does not choke on partial links (#6535) - Fixes to ensure larger
PDFs can be rendered (#6538) - Ensure
IPywidgetcomms are only opened once (#6542) - Fixes for message handling in Jupyter Preview context (#6547)
- Fix unnecessary loading of
ReactiveHTMLresources (#6552) - Ensure
Template.raw_csshas higher precedence than default template CSS (#6554) - Avoid asyncio event loop startup issues in some contexts (#6555)
- Ensure column subset is retained on
Tabulator.style(#6560) - Ensure bokeh mathjax bundle when mathjax extension is loaded in notebook (#6564)
Chat Components
- Fix
ChatInterfacestopbutton for synchronous functions (#6312) - Include
stylesheetsdownstream, including layouts in ChatMessage (#6405) - Ensure ChatInterface supports chat input without
value_inputparameter (#6505) - Ensure word breaks to avoid overflow in
ChatMessage(#6187, #6509) - Ensure nested disabled state stays disabled on
ChatFeed(#6507) - Allow streaming
Noneas the initialChatMessagevalue (#6522)
Documentation
- Add Roadmap to documentation (#5443)
- Refactor
ReactiveHTMLdocs (#5448, #6358) - Improve
HoloViewsreference guide (#6065) - Improve the user experience for resetting Jupyterlite (#6198)
- Add explanation docs about APIs (#6289, #6469)
- Add section headers to Chat reference documentation (#6370)
- Migrate gallery to new Anaconda DSP instance (#6413)
- Improve home page (#6422)
- Adding AWS deployment to documentation (#6434)
- Update Streamlit comparison (#6467)
- Add logging how-to guide (#6511)
- Document pygments dependency for code syntax highlighting (#6519)
- Add how-to guide on configuring PyCharm (#6525)
Deprecations & Removals
- Remove
Acealias forCodeEditor - Remove
ChatBoxwhich has been replaced bypanel.chatcomponents - Remove
HTML.stylewhich is now replaced withHTML.styles - Remove
Trend.titlewhich is now replaced byTrend.name - Remove
Viewable.appwhich is now replaced withpn.io.notebook.show_server - Remove
Viewable.backgroundwhich is now replaced withViewable(styles={'background': ...}) - Remove
Viewable.pprintwhich is now replaced withprint(Viewable(...))