New features and enhancements
- Introduce
ui.skip_linkfor keyboard-accessibility skip links (WCAG 2.4.1 "Bypass Blocks") (#5790 by @evnchn, @falkoschindler) - Add per-line hover tooltips to
ui.codemirrorvia a newline_tooltipsproperty (with optionalline_tooltip_html) (#5992 by @Jepson2k, @falkoschindler, @evnchn) - Add a
ui.plotlyrun_plot_method()helper (mirroringrun_grid_method/run_chart_method) with aPlotly.extendTracesdemo for appending data without re-sending the full figure (#2660, #6060 by @evnchn, @falkoschindler) - Improve the error message when storing a non-JSON-serializable value in
app.storage, pointing at the offending key path and the underlying type instead of an internal class name (#6044, #6050 by @NichtJens, @falkoschindler, @evnchn)
Bugfixes
-
Fix dropped
app.native.window_args,app.native.settingsandapp.native.start_argswhen the spawned window process can't re-execute the main module (e.g. console-scripts,python -m, PyInstaller); unpicklable values now emit a one-time warning instead of being silently dropped (#6082, #6093 by @VFLins, @falkoschindler, @evnchn) -
Fix blank
ui.aggridwhen flex columns use the infinite row model;auto_size_columnsbecomes a tri-statebool | Nonedefaulting toNone(skipautoSizeStrategywhen columns use flex) (#5087, #6080 by @davetapley, @evnchn, @falkoschindler) -
Fix
Event.emitted()returningNoneinstead of the emitted arguments, adding an opt-inexpect_argsparameter toEvent.subscribe()(#6077, #6078 by @falkoschindler, @evnchn) -
Fix the
ui.sub_pages404 sad-face persisting after client-side navigation when the page is first loaded at an unknown URL (#6069, #6071 by @evnchn, @falkoschindler)Note: Apps that relied on the styled sad-face overlay appearing on
ui.sub_pages404s now see only the inline404: sub page X not foundlabel inside their own chrome. The HTTP 404 status and theshow_404=Falseescape hatch are unchanged. -
Replace the misleading "remove the main guard" reload error for
python -m <pkg>with a targeted message naming the package and the working alternatives (#181, #3769, #5280, #5939, #6066, #6068 by @NichtJens, @evnchn, @falkoschindler) -
Fix
Client has been deletedwarning spam on reload when scene objects are mutated afterawait(#6058, #6059 by @codingpaula, @evnchn, @falkoschindler)Note:
Element.update(),run_method()andget_computed_prop()now stay silent only for the disconnect/reload race; using an element after an explicitelement.delete()emits a one-shot warning with a stack trace.
Documentation
- Improve the Markdown documentation served to AI agents: serve Markdown to known agent user-agents sending a wildcard
Accept, emit heading prefixes while skipping decorative HTML and demo previews, and addaria-label/child-content labels to button Markdown (#6007, #6052, #6053, #6054 by @evnchn, @falkoschindler, @HosseyNJF) - Fill
llms.mdgaps in the element surface vs.ui.*exports (#6048, #6051 by @evnchn, @falkoschindler) - Document how to keep
ui.plotlyresponsive with large datasets by passing NumPy arrays / pandas Series instead of Python lists (#3340, #6095 by @TsaiTung-Chen, @python-and-novella, @mohsenminaei, @krashdifferent, @eddie3ruff, @buiapp, @falkoschindler, @evnchn) - Fix bad Cumulative Layout Shift (CLS) on the documentation homepage (#6087, #6089 by @evnchn, @falkoschindler)
Testing
- Redo: randomize test ports and directories for parallel pytest sessions, re-applying #5960 with a fix for the #6061 import-time
Storage.pathregression (#5960, #6061, #6075 by @falkoschindler, @evnchn)
Infrastructure
- Fix Selenium screenshot artifacts not being uploaded on test failure (#6086 by @HosseyNJF, @evnchn, @falkoschindler)
Special thanks to our top sponsors DiscoLike Inc. and Lechler GmbH ✨
and all our other sponsors and contributors for supporting this project!
🙏 Want to support this project? Check out our GitHub Sponsors page to help us keep building amazing features!